NaturesAura/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntityPowderPlacer.java

58 lines
2.7 KiB
Java
Raw Normal View History

2019-02-22 19:06:47 +01:00
package de.ellpeck.naturesaura.blocks.tiles;
import de.ellpeck.naturesaura.entities.EntityEffectInhibitor;
import de.ellpeck.naturesaura.items.ModItems;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
2019-10-20 22:30:49 +02:00
import net.minecraft.util.EntityPredicates;
import net.minecraft.util.Direction;
2019-02-22 19:06:47 +01:00
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import java.util.List;
public class TileEntityPowderPlacer extends TileEntityImpl {
@Override
2019-03-19 17:21:06 +01:00
public void onRedstonePowerChange(int newPower) {
if (this.redstonePower <= 0 && newPower > 0) {
List<EntityEffectInhibitor> powders = this.world.getEntitiesWithinAABB(EntityEffectInhibitor.class,
2019-10-20 22:30:49 +02:00
new AxisAlignedBB(this.pos, this.pos.add(1, 2, 1)), EntityPredicates.IS_ALIVE);
for (Direction facing : Direction.HORIZONTALS) {
2019-03-19 17:21:06 +01:00
TileEntity tile = this.world.getTileEntity(this.pos.offset(facing));
if (tile == null || !tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing.getOpposite()))
continue;
IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing.getOpposite());
if (handler == null)
continue;
2019-02-22 19:06:47 +01:00
2019-03-19 17:21:06 +01:00
if (!powders.isEmpty()) {
for (EntityEffectInhibitor powder : powders) {
ItemStack drop = powder.getDrop();
for (int i = 0; i < handler.getSlots(); i++) {
ItemStack remain = handler.insertItem(i, drop, false);
if (remain.isEmpty()) {
powder.setDead();
break;
} else if (remain.getCount() != drop.getCount()) {
powder.setAmount(remain.getCount());
}
2019-02-22 19:06:47 +01:00
}
}
2019-03-19 17:21:06 +01:00
} else {
for (int i = 0; i < handler.getSlots(); i++) {
ItemStack stack = handler.extractItem(i, Integer.MAX_VALUE, true);
if (stack.isEmpty() || stack.getItem() != ModItems.EFFECT_POWDER)
continue;
EntityEffectInhibitor.place(this.world, stack, this.pos.getX() + 0.5, this.pos.getY() + 1, this.pos.getZ() + 0.5);
handler.extractItem(i, Integer.MAX_VALUE, false);
break;
}
2019-02-22 19:06:47 +01:00
}
}
}
2019-03-19 17:21:06 +01:00
super.onRedstonePowerChange(newPower);
2019-02-22 19:06:47 +01:00
}
}