diff --git a/src/main/java/carpet/mixins/HopperBlockEntityMixin.java b/src/main/java/carpet/mixins/HopperBlockEntityMixin.java new file mode 100644 index 00000000..08e35d7a --- /dev/null +++ b/src/main/java/carpet/mixins/HopperBlockEntityMixin.java @@ -0,0 +1,60 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import net.minecraft.block.HopperBlock; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.block.entity.HopperBlockEntity; +import net.minecraft.block.entity.LootableContainerBlockEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DyeColor; +import net.minecraft.util.math.BlockPos; +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.CallbackInfoReturnable; +import carpet.helpers.HopperCounter; +import carpet.utils.WoolTool; + +@Mixin(HopperBlockEntity.class) +public abstract class HopperBlockEntityMixin extends LootableContainerBlockEntity { + + protected HopperBlockEntityMixin(BlockEntityType blockEntityType_1) { + super(blockEntityType_1); + } + + @Shadow + public abstract double getHopperX(); + + @Shadow + public abstract double getHopperY(); + + @Shadow + public abstract double getHopperZ(); + + @Shadow + public abstract void setInvStack(int int_1, ItemStack itemStack_1); + + @Shadow + public abstract int getInvSize(); + + @Inject(method = "insert", at = @At("HEAD"), cancellable = true) + private void onInsert(CallbackInfoReturnable cir) + { + if (CarpetSettings.b_hopperCounters) { + DyeColor wool_color = WoolTool.getWoolColorAtPosition( + getWorld(), + new BlockPos(getHopperX(), getHopperY(), getHopperZ()).offset(this.getCachedState().get(HopperBlock.FACING))); + if (wool_color != null) { + for (int i = 0; i < this.getInvSize(); ++i) { + if (!this.getInvStack(i).isEmpty()) { + ItemStack itemstack = this.getInvStack(i);//.copy(); + HopperCounter.COUNTERS.get(wool_color).add(this.getWorld().getServer(), itemstack); + this.setInvStack(i, ItemStack.EMPTY); + } + } + cir.setReturnValue(true); + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index ea3e48fe..88a9c791 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -10,7 +10,8 @@ "ExperienceOrbEntityMixin", "PlayerActionC2SPacketMixin", "ServerPlayerEntityMixin", - "ServerChunkManagerMixin" + "ServerChunkManagerMixin", + "HopperBlockEntityMixin" ], "client": [ "MinecraftClientMixin",