From f93d8932d5cf7be5096c57a7451998fe47bdd77c Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Mon, 15 Jun 2020 16:55:56 -0400 Subject: [PATCH] Mobs Are Guaranteed To Have At Least One Piece OF Armor --- README.md | 1 + .../twine/mixin/MixinBoatEntity.java | 2 +- .../thebrokenrail/twine/mixin/MixinMobEntity.java | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2aa47d7..a976422 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ Each player has a "personal" stage of an area, the highest online player's diffi - Normal Gameplay ### Stage 2 +- Mobs Are Guaranteed To Have At Least One Piece OF Armor ### Stage 3 - Hostile Mobs Attack Passive Mobs diff --git a/src/main/java/com/thebrokenrail/twine/mixin/MixinBoatEntity.java b/src/main/java/com/thebrokenrail/twine/mixin/MixinBoatEntity.java index 865a1fd..3e5058b 100644 --- a/src/main/java/com/thebrokenrail/twine/mixin/MixinBoatEntity.java +++ b/src/main/java/com/thebrokenrail/twine/mixin/MixinBoatEntity.java @@ -49,7 +49,7 @@ public class MixinBoatEntity implements BoatUtil { } } - @Redirect(at = @At(value = "INVOKE", target = "Ljava/util/List;size()I"), method = "updatePassengerPosition") + @Redirect(at = @At(value = "INVOKE", target = "Ljava/util/List;size()I"), method = "updatePassengerPosition", allow = 2, require = 2) public int updatePassengerPosition(List list) { if (hasChest() != BoatChestMode.NONE) { return list.size() + 1; diff --git a/src/main/java/com/thebrokenrail/twine/mixin/MixinMobEntity.java b/src/main/java/com/thebrokenrail/twine/mixin/MixinMobEntity.java index 541ff62..bf98cfd 100644 --- a/src/main/java/com/thebrokenrail/twine/mixin/MixinMobEntity.java +++ b/src/main/java/com/thebrokenrail/twine/mixin/MixinMobEntity.java @@ -19,9 +19,12 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Random; + @SuppressWarnings("ConstantConditions") @Mixin(MobEntity.class) public class MixinMobEntity { @@ -68,4 +71,16 @@ public class MixinMobEntity { } } } + + @Redirect(at = @At(value = "INVOKE", target = "Ljava/util/Random;nextFloat()F", ordinal = 0), method = "initEquipment", allow = 1) + public float initEquipment(Random random) { + StageDataComponent component = StageDataComponent.getFromWorld((ServerWorld) ((MobEntity) (Object) this).getEntityWorld()); + BlockPos blockPos = ((MobEntity) (Object) this).getBlockPos(); + int stage = component.findEffectiveStageOfChunk((ServerWorld) ((MobEntity) (Object) this).getEntityWorld(), blockPos); + if (stage >= 1) { + return -1f; + } else { + return random.nextFloat(); + } + } }