From e46e63816150f7fd9f856c18eee39a3c96653b53 Mon Sep 17 00:00:00 2001 From: Me <135455255+IcarussOne@users.noreply.github.com> Date: Thu, 23 May 2024 15:08:30 -0500 Subject: [PATCH] Start equipment overhaul --- .../mixin/EntityCultistClericMixin.java | 36 +++++++++++++ .../mixin/EntityCultistKnightMixin.java | 51 +++++++++++++++++++ .../resources/mixins.crimsonrevelations.json | 2 + 3 files changed, 89 insertions(+) create mode 100644 src/main/java/com/mobiusflip/crimsonrevelations/mixin/EntityCultistClericMixin.java create mode 100644 src/main/java/com/mobiusflip/crimsonrevelations/mixin/EntityCultistKnightMixin.java diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/mixin/EntityCultistClericMixin.java b/src/main/java/com/mobiusflip/crimsonrevelations/mixin/EntityCultistClericMixin.java new file mode 100644 index 0000000..5e7ed31 --- /dev/null +++ b/src/main/java/com/mobiusflip/crimsonrevelations/mixin/EntityCultistClericMixin.java @@ -0,0 +1,36 @@ +package com.mobiusflip.crimsonrevelations.mixin; + +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 net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import thaumcraft.api.items.ItemsTC; +import thaumcraft.common.entities.monster.cult.EntityCultist; +import thaumcraft.common.entities.monster.cult.EntityCultistCleric; + +@Mixin(value = EntityCultistCleric.class, remap = false) +public class EntityCultistClericMixin extends EntityCultist { + public EntityCultistClericMixin(World world) { + super(world); + this.setDropChance(EntityEquipmentSlot.CHEST, 0.025F); + this.setDropChance(EntityEquipmentSlot.FEET, 0.025F); + this.setDropChance(EntityEquipmentSlot.HEAD, 0.025F); + this.setDropChance(EntityEquipmentSlot.LEGS, 0.025F); + this.setDropChance(EntityEquipmentSlot.MAINHAND, -1.0F); + } + + // Replaces the original equip event with ours + @Inject(method = "setLoot", at = @At(value = "HEAD"), cancellable = true) + public void crSetLoot(DifficultyInstance diff, CallbackInfo ci) { + ci.cancel(); + this.setItemStackToSlot(EntityEquipmentSlot.HEAD, new ItemStack(ItemsTC.crimsonRobeHelm)); + this.setItemStackToSlot(EntityEquipmentSlot.CHEST, new ItemStack(ItemsTC.crimsonRobeChest)); + this.setItemStackToSlot(EntityEquipmentSlot.LEGS, new ItemStack(ItemsTC.crimsonRobeLegs)); + this.setItemStackToSlot(EntityEquipmentSlot.FEET, new ItemStack(ItemsTC.crimsonBoots)); + } +} diff --git a/src/main/java/com/mobiusflip/crimsonrevelations/mixin/EntityCultistKnightMixin.java b/src/main/java/com/mobiusflip/crimsonrevelations/mixin/EntityCultistKnightMixin.java new file mode 100644 index 0000000..0ac8d61 --- /dev/null +++ b/src/main/java/com/mobiusflip/crimsonrevelations/mixin/EntityCultistKnightMixin.java @@ -0,0 +1,51 @@ +package com.mobiusflip.crimsonrevelations.mixin; + +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 net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import thaumcraft.api.items.ItemsTC; +import thaumcraft.common.entities.monster.cult.EntityCultist; +import thaumcraft.common.entities.monster.cult.EntityCultistKnight; + +@Mixin(value = EntityCultistKnight.class, remap = false) +public class EntityCultistKnightMixin extends EntityCultist { + public EntityCultistKnightMixin(World world) { + super(world); + this.setDropChance(EntityEquipmentSlot.CHEST, 0.025F); + this.setDropChance(EntityEquipmentSlot.FEET, 0.025F); + this.setDropChance(EntityEquipmentSlot.HEAD, 0.025F); + this.setDropChance(EntityEquipmentSlot.LEGS, 0.025F); + this.setDropChance(EntityEquipmentSlot.MAINHAND, -1.0F); + } + + // Replaces the original equip event with ours + @Inject(method = "setLoot", at = @At(value = "HEAD"), cancellable = true) + public void crSetLoot(DifficultyInstance diff, CallbackInfo ci) { + ci.cancel(); + this.setItemStackToSlot(EntityEquipmentSlot.HEAD, new ItemStack(ItemsTC.crimsonPlateHelm)); + this.setItemStackToSlot(EntityEquipmentSlot.CHEST, new ItemStack(ItemsTC.crimsonPlateChest)); + this.setItemStackToSlot(EntityEquipmentSlot.LEGS, new ItemStack(ItemsTC.crimsonPlateLegs)); + this.setItemStackToSlot(EntityEquipmentSlot.FEET, new ItemStack(ItemsTC.crimsonBoots)); + + if (this.rand.nextFloat() < 0.05F) { + int i = this.rand.nextInt(5); + + if (i == 0) { + this.setHeldItem(this.getActiveHand(), new ItemStack(ItemsTC.voidSword)); + this.setItemStackToSlot(EntityEquipmentSlot.HEAD, new ItemStack(ItemsTC.crimsonRobeHelm)); + } else { + this.setHeldItem(this.getActiveHand(), new ItemStack(ItemsTC.thaumiumSword)); + this.setItemStackToSlot(EntityEquipmentSlot.HEAD, ItemStack.EMPTY); + } + } else { + this.setHeldItem(this.getActiveHand(), new ItemStack(Items.IRON_SWORD)); + } + } +} diff --git a/src/main/resources/mixins.crimsonrevelations.json b/src/main/resources/mixins.crimsonrevelations.json index 0726639..a404bb7 100644 --- a/src/main/resources/mixins.crimsonrevelations.json +++ b/src/main/resources/mixins.crimsonrevelations.json @@ -4,6 +4,8 @@ "minVersion": "0.8", "compatibilityLevel": "JAVA_8", "mixins": [ + "EntityCultistClericMixin", + "EntityCultistKnightMixin", "EntityCultistPortalLesserMixin", "TCEntityEventsMixin" ],