123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package me.km.blocks;
- import java.awt.Color;
- import java.util.LinkedList;
- import net.minecraft.block.state.IBlockState;
- import net.minecraft.item.ItemStack;
- import net.minecraft.nbt.NBTBase;
- import net.minecraft.nbt.NBTTagCompound;
- import net.minecraft.nbt.NBTTagList;
- import net.minecraft.network.NetworkManager;
- import net.minecraft.network.play.server.SPacketUpdateTileEntity;
- import net.minecraft.tileentity.TileEntity;
- import net.minecraft.util.math.BlockPos;
- import net.minecraft.world.World;
- public class TileEntityCauldron extends TileEntity
- {
- private CauldronColorMixer mixer;
-
- public TileEntityCauldron()
- {
- mixer = new CauldronColorMixer();
- }
-
- @Override
- public NBTTagCompound writeToNBT(NBTTagCompound com)
- {
- super.writeToNBT(com);
-
- NBTTagList list = new NBTTagList();
- LinkedList<ItemStack> items = mixer.getItems();
- items.stream().forEach(stack ->
- {
- NBTTagCompound nbttagcompound = new NBTTagCompound();
- stack.writeToNBT(nbttagcompound);
- list.appendTag(nbttagcompound);
- });
-
- com.setTag("items", list);
- return com;
- }
-
- @Override
- public void readFromNBT(NBTTagCompound com)
- {
- super.readFromNBT(com);
- readItems(com);
- }
-
- private void readItems(NBTTagCompound com)
- {
- if(com.hasKey("items", 9))
- {
- mixer.reset();
- NBTTagList list = com.getTagList("items", 10);
- LinkedList<ItemStack> items = mixer.getItems();
- for(NBTBase base : list)
- {
- items.add(new ItemStack((NBTTagCompound) base));
- }
-
- mixer.cache();
- }
- }
- @Override
- protected void setWorldCreate(World w)
- {
- this.setWorld(w);
- }
- public boolean hasDefaultColor()
- {
- return mixer.getItems().isEmpty();
- }
-
- public int getNumberOfIngredients()
- {
- return mixer.getItems().size();
- }
-
- public LinkedList<ItemStack> getIngredients()
- {
- return mixer.getItems();
- }
-
- public Color getColor()
- {
- return mixer.getMixedColor();
- }
-
- public void reset()
- {
- mixer.reset();
- }
-
- public boolean addItemStack(ItemStack stack)
- {
- boolean b = mixer.addColor(stack);
- if(b)
- {
- notifyBlockUpdate();
- markDirty();
- }
- return b;
- }
- public void setColor(int red, int green, int blue)
- {
- mixer.reset(new Color(red, green, blue));
- notifyBlockUpdate();
- markDirty();
- }
-
- private void notifyBlockUpdate()
- {
- IBlockState state = world.getBlockState(pos);
- this.world.notifyBlockUpdate(pos, state, state, 3);
- }
-
- @Override
- public SPacketUpdateTileEntity getUpdatePacket()
- {
- return new SPacketUpdateTileEntity(this.pos, -1, this.getUpdateTag());
- }
-
- @Override
- public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt)
- {
- readItems(pkt.getNbtCompound());
- notifyBlockUpdate();
- }
- @Override
- public NBTTagCompound getUpdateTag()
- {
- return writeToNBT(new NBTTagCompound());
- }
-
- @Override
- public boolean shouldRefresh(World w, BlockPos pos, IBlockState oldState, IBlockState newState)
- {
- return oldState.getBlock() != newState.getBlock();
- }
- }
|