diff options
Diffstat (limited to 'src/main/java/com/keuin/ohmyvanillamc/mixin')
4 files changed, 115 insertions, 6 deletions
diff --git a/src/main/java/com/keuin/ohmyvanillamc/mixin/DisableFishSchooling.java b/src/main/java/com/keuin/ohmyvanillamc/mixin/DisableFishSchooling.java index c30ab02..c2de0d5 100644 --- a/src/main/java/com/keuin/ohmyvanillamc/mixin/DisableFishSchooling.java +++ b/src/main/java/com/keuin/ohmyvanillamc/mixin/DisableFishSchooling.java @@ -2,6 +2,7 @@ package com.keuin.ohmyvanillamc.mixin; import com.keuin.ohmyvanillamc.OhMyVanillaMinecraft; import net.minecraft.entity.EntityType; +import net.minecraft.entity.ai.goal.FollowGroupLeaderGoal; import net.minecraft.entity.passive.FishEntity; import net.minecraft.entity.passive.SchoolingFishEntity; import net.minecraft.world.World; @@ -25,7 +26,7 @@ public abstract class DisableFishSchooling extends FishEntity { */ @Overwrite public void moveTowardLeader() { - if (!OhMyVanillaMinecraft.disableFishSchooling) { + if (!OhMyVanillaMinecraft.getConfiguration().isDisableFishSchooling()) { if (this.hasLeader()) { this.getNavigation().startMovingTo(this.leader, 1.0D); } @@ -39,5 +40,8 @@ public abstract class DisableFishSchooling extends FishEntity { @Overwrite public void initGoals() { super.initGoals(); + if (!OhMyVanillaMinecraft.getConfiguration().isDisableFishSchooling()) { + this.goalSelector.add(5, new FollowGroupLeaderGoal((SchoolingFishEntity) (Object) this)); + } } } diff --git a/src/main/java/com/keuin/ohmyvanillamc/mixin/DisablePhantomSpawning.java b/src/main/java/com/keuin/ohmyvanillamc/mixin/DisablePhantomSpawning.java index ea97857..d14fc3e 100644 --- a/src/main/java/com/keuin/ohmyvanillamc/mixin/DisablePhantomSpawning.java +++ b/src/main/java/com/keuin/ohmyvanillamc/mixin/DisablePhantomSpawning.java @@ -16,7 +16,7 @@ public class DisablePhantomSpawning { */ @Inject(method = "spawn", at = @At("HEAD"), cancellable = true) public void spawn(ServerWorld serverWorld, boolean spawnMonsters, boolean spawnAnimals, CallbackInfoReturnable<Integer> cir) { - if (OhMyVanillaMinecraft.disablePhantomSpawning) + if (OhMyVanillaMinecraft.getConfiguration().isDisablePhantomSpawning()) cir.setReturnValue(0); } } diff --git a/src/main/java/com/keuin/ohmyvanillamc/mixin/DisableWanderingTraderSpawning.java b/src/main/java/com/keuin/ohmyvanillamc/mixin/DisableWanderingTraderSpawning.java index 040c352..3af7941 100644 --- a/src/main/java/com/keuin/ohmyvanillamc/mixin/DisableWanderingTraderSpawning.java +++ b/src/main/java/com/keuin/ohmyvanillamc/mixin/DisableWanderingTraderSpawning.java @@ -5,17 +5,20 @@ import net.minecraft.world.WanderingTraderManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(WanderingTraderManager.class) public class DisableWanderingTraderSpawning { /** * Disable ticking + * * @author trueKeuin */ - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - public void tick(CallbackInfo ci) { - if (OhMyVanillaMinecraft.disableWanderingTraderSpawning) + @Inject(method = "spawn", at = @At("HEAD"), cancellable = true) + public void tick(CallbackInfoReturnable<Integer> ci) { + if (OhMyVanillaMinecraft.getConfiguration().isDisableWanderingTraderSpawning()) { + ci.setReturnValue(0); ci.cancel(); + } } } diff --git a/src/main/java/com/keuin/ohmyvanillamc/mixin/ReintroduceLlamaItemDuping.java b/src/main/java/com/keuin/ohmyvanillamc/mixin/ReintroduceLlamaItemDuping.java new file mode 100644 index 0000000..29ed03a --- /dev/null +++ b/src/main/java/com/keuin/ohmyvanillamc/mixin/ReintroduceLlamaItemDuping.java @@ -0,0 +1,102 @@ +package com.keuin.ohmyvanillamc.mixin; + +import com.keuin.ohmyvanillamc.OhMyVanillaMinecraft; +import net.minecraft.advancement.PlayerAdvancementTracker; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.packet.s2c.play.PlayerListS2CPacket; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.PlayerManager; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.stat.ServerStatHandler; +import net.minecraft.stat.Stats; +import org.apache.logging.log4j.Logger; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +@Mixin(PlayerManager.class) +public abstract class ReintroduceLlamaItemDuping { + + @Shadow + protected abstract void savePlayerData(ServerPlayerEntity player); + + @Shadow + @Final + private static Logger LOGGER; + + @Shadow + @Final + private List<ServerPlayerEntity> players; + + @Shadow + @Final + private MinecraftServer server; + + @Shadow + @Final + private Map<UUID, ServerPlayerEntity> playerMap; + + @Shadow + @Final + private Map<UUID, ServerStatHandler> statisticsMap; + + @Shadow + @Final + private Map<UUID, PlayerAdvancementTracker> advancementTrackers; + + @Shadow + public abstract void sendToAll(Packet<?> packet); + + /** + * @reason re-introduce llama item duplicating glitch. + * @author trueKeuin + */ + @Overwrite + public void remove(ServerPlayerEntity player) { + ServerWorld serverWorld = player.getServerWorld(); + player.incrementStat(Stats.LEAVE_GAME); + this.savePlayerData(player); + if (player.hasVehicle()) { + Entity entity = player.getRootVehicle(); + if (entity.hasPlayerRider()) { + LOGGER.debug("Removing player mount"); + player.stopRiding(); + serverWorld.removeEntity(entity); + // entity.removed = true + entity.removed = !OhMyVanillaMinecraft.getConfiguration().isReintroduceLlamaItemDuplicating() || entity.removed; + + Entity entity2; + for (Iterator var4 = entity.getPassengersDeep().iterator(); var4.hasNext(); // entity2.removed = true + entity2.removed = !OhMyVanillaMinecraft.getConfiguration().isReintroduceLlamaItemDuplicating() || entity2.removed) { + entity2 = (Entity) var4.next(); + serverWorld.removeEntity(entity2); + } + + serverWorld.getChunk(player.chunkX, player.chunkZ).markDirty(); + } + } + + player.detach(); + serverWorld.removePlayer(player); + player.getAdvancementTracker().clearCriteria(); + this.players.remove(player); + this.server.getBossBarManager().onPlayerDisconnect(player); + UUID uUID = player.getUuid(); + ServerPlayerEntity serverPlayerEntity = (ServerPlayerEntity) this.playerMap.get(uUID); + if (serverPlayerEntity == player) { + this.playerMap.remove(uUID); + this.statisticsMap.remove(uUID); + this.advancementTrackers.remove(uUID); + } + + this.sendToAll(new PlayerListS2CPacket(PlayerListS2CPacket.Action.REMOVE_PLAYER, new ServerPlayerEntity[]{player})); + } +} |