diff --git a/gradle.properties b/gradle.properties index 90fa290..ab16f1e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ yarn_mappings=1.21.10+build.2 loader_version=0.17.3 loom_version=1.12-SNAPSHOT # Mod Properties -mod_version=1.3 +mod_version=1.4 maven_group=com.kasetoatz archives_base_name=StasisRods # Dependencies diff --git a/src/main/java/com/kasetoatz/stasisrods/mixin/BlockMixin.java b/src/main/java/com/kasetoatz/stasisrods/mixin/BlockMixin.java new file mode 100644 index 0000000..982764f --- /dev/null +++ b/src/main/java/com/kasetoatz/stasisrods/mixin/BlockMixin.java @@ -0,0 +1,35 @@ +package com.kasetoatz.stasisrods.mixin; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.NbtComponent; +import net.minecraft.entity.Entity; +import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.registry.tag.BlockTags; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.world.World; +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.CallbackInfoReturnable; + +import java.util.List; +import java.util.Objects; + +@Mixin(Block.class) +public class BlockMixin +{ + @Inject(method="onBreak", at=@At("HEAD")) + public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfoReturnable cir) + { + if (!state.isIn(BlockTags.PRESSURE_PLATES)) + { + return; + } + List entities = world.getEntitiesByClass(ArmorStandEntity.class, Box.of(pos.toBottomCenterPos(), 0.5, 0.5, 0.5), entity -> Objects.requireNonNullElse(entity.get(DataComponentTypes.CUSTOM_DATA), NbtComponent.DEFAULT).copyNbt().getBoolean("isPlaceholder", false)); + entities.forEach(Entity::discard); + } +} diff --git a/src/main/java/com/kasetoatz/stasisrods/mixin/EntityMixin.java b/src/main/java/com/kasetoatz/stasisrods/mixin/EntityMixin.java new file mode 100644 index 0000000..9c5f5e5 --- /dev/null +++ b/src/main/java/com/kasetoatz/stasisrods/mixin/EntityMixin.java @@ -0,0 +1,29 @@ +package com.kasetoatz.stasisrods.mixin; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.ItemEntity; +import net.minecraft.item.Items; +import net.minecraft.world.World; +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.callback.CallbackInfo; + +import static com.kasetoatz.stasisrods.util.Util.tryDiscardPlaceholder; + +@Mixin(Entity.class) +public abstract class EntityMixin +{ + @Shadow public abstract World getEntityWorld(); + + @Inject(method="discard", at=@At("HEAD")) + public void discard(CallbackInfo ci) + { + Entity entity = (Entity)(Object)this; + if (entity instanceof ItemEntity item && item.getStack().getItem() == Items.FISHING_ROD) + { + tryDiscardPlaceholder(item.getStack(), getEntityWorld().getServer()); + } + } +} diff --git a/src/main/java/com/kasetoatz/stasisrods/util/Util.java b/src/main/java/com/kasetoatz/stasisrods/util/Util.java index f814b95..6a898e1 100644 --- a/src/main/java/com/kasetoatz/stasisrods/util/Util.java +++ b/src/main/java/com/kasetoatz/stasisrods/util/Util.java @@ -50,6 +50,7 @@ public class Util public static ArmorStandEntity spawnPlaceholder(World world, Vec3d pos) { ArmorStandEntity placeholder = new ArmorStandEntity(world, pos.getX(), pos.getY(), pos.getZ()); + placeholder.setComponent(DataComponentTypes.CUSTOM_DATA, NbtComponent.DEFAULT.apply(nbt -> nbt.putBoolean("isPlaceholder", true))); placeholder.setHideBasePlate(true); placeholder.setInvisible(true); placeholder.setInvulnerable(true); diff --git a/src/main/resources/stasisrods.mixins.json b/src/main/resources/stasisrods.mixins.json index 1473fd8..ae684e4 100644 --- a/src/main/resources/stasisrods.mixins.json +++ b/src/main/resources/stasisrods.mixins.json @@ -4,6 +4,8 @@ "package": "com.kasetoatz.stasisrods.mixin", "compatibilityLevel": "JAVA_21", "mixins": [ + "BlockMixin", + "EntityMixin", "FishingRodItemMixin" ], "client": [