diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index 5e3357dd..c8d69441 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -113,7 +113,7 @@ public class CarpetSettings "Counters are global and shared between players, 16 channels available", "Items counted are destroyed, count up to one stack per tick per hopper") .isACommand().boolAccelerate().defaultFalse(), - rule("renewableSponges", "experimental feature", "Guardians turn into Elder Guardian when struck by lightning").wip(), + rule("renewableSponges", "experimental feature", "Guardians turn into Elder Guardian when struck by lightning"), rule("movableTileEntities", "experimental", "Pistons can push tile entities, like hoppers, chests etc.").boolAccelerate().wip(), rule("desertShrubs", "feature", "Saplings turn into dead shrubs in hot climates and no water access when it attempts to grow into a tree").wip(), rule("silverFishDropGravel", "experimental", "Silverfish drop a gravel item when breaking out of a block"), diff --git a/src/main/java/carpet/mixins/GuardianEntityMixin.java b/src/main/java/carpet/mixins/GuardianEntityMixin.java new file mode 100644 index 00000000..d2691aa9 --- /dev/null +++ b/src/main/java/carpet/mixins/GuardianEntityMixin.java @@ -0,0 +1,48 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import net.minecraft.entity.EntityData; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LightningEntity; +import net.minecraft.entity.SpawnType; +import net.minecraft.entity.mob.ElderGuardianEntity; +import net.minecraft.entity.mob.GuardianEntity; +import net.minecraft.entity.mob.HostileEntity; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(GuardianEntity.class) +public abstract class GuardianEntityMixin extends HostileEntity +{ + protected GuardianEntityMixin(EntityType entityType_1, World world_1) + { + super(entityType_1, world_1); + } + + @Override + public void onStruckByLightning(LightningEntity lightning) + { + if (!this.world.isClient && !this.removed && CarpetSettings.getBool("renewableSponges")) + { + ElderGuardianEntity elderGuardian = new ElderGuardianEntity(EntityType.ELDER_GUARDIAN ,this.world); + elderGuardian.setPositionAndAngles(this.x, this.y, this.z, this.yaw, this.pitch); + elderGuardian.initialize(this.world ,this.world.getLocalDifficulty(new BlockPos(elderGuardian)), SpawnType.EVENT, (EntityData)null, (CompoundTag)null); + elderGuardian.setAiDisabled(this.isAiDisabled()); + + if (this.hasCustomName()) + { + elderGuardian.setCustomName(this.getCustomName()); + elderGuardian.setCustomNameVisible(this.isCustomNameVisible()); + } + + this.world.spawnEntity(elderGuardian); + this.remove(); + } + else + { + super.onStruckByLightning(lightning); + } + } +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 19c5fb26..c3d73277 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -52,6 +52,7 @@ "ServerPlayerInteractionManager_scarpetEventsMixin", "EntityMixin", "DirectionMixin", + "GuardianEntityMixin", "ServerChunkManagerMixin", "SpawnHelperMixin",