AnvilBlockMixin.java 1.6 KB

1234567891011121314151617181920212223242526272829303132
  1. package com.hexdragon.enchrebirth.mixin.block;
  2. import com.hexdragon.enchrebirth.block.AnvilContainerRe;
  3. import net.minecraft.block.AnvilBlock;
  4. import net.minecraft.block.BlockState;
  5. import net.minecraft.block.FallingBlock;
  6. import net.minecraft.inventory.container.INamedContainerProvider;
  7. import net.minecraft.inventory.container.SimpleNamedContainerProvider;
  8. import net.minecraft.util.IWorldPosCallable;
  9. import net.minecraft.util.math.BlockPos;
  10. import net.minecraft.util.text.TranslationTextComponent;
  11. import net.minecraft.world.World;
  12. import org.spongepowered.asm.mixin.Mixin;
  13. import org.spongepowered.asm.mixin.injection.At;
  14. import org.spongepowered.asm.mixin.injection.Inject;
  15. import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
  16. import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
  17. @Mixin(AnvilBlock.class)
  18. public abstract class AnvilBlockMixin extends FallingBlock {
  19. public AnvilBlockMixin(Properties properties) {super(properties);}
  20. // 将铁砧的处理事件替换为 Mod 所提供的事件
  21. @Inject(method = "getContainer", at = @At(value = "HEAD"), cancellable = true, locals = LocalCapture.CAPTURE_FAILEXCEPTION)
  22. private void getContainer(BlockState state, World worldIn, BlockPos pos, CallbackInfoReturnable<INamedContainerProvider> cir) {
  23. cir.setReturnValue(new SimpleNamedContainerProvider(
  24. (id, inventory, player) -> new AnvilContainerRe(id, inventory, IWorldPosCallable.of(worldIn, pos)),
  25. new TranslationTextComponent("block.minecraft.anvil")));
  26. cir.cancel();
  27. }
  28. }