TileEntityCauldron.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package me.km.blocks;
  2. import java.awt.Color;
  3. import java.util.LinkedList;
  4. import net.minecraft.block.state.IBlockState;
  5. import net.minecraft.item.ItemStack;
  6. import net.minecraft.nbt.NBTBase;
  7. import net.minecraft.nbt.NBTTagCompound;
  8. import net.minecraft.nbt.NBTTagList;
  9. import net.minecraft.network.NetworkManager;
  10. import net.minecraft.network.play.server.SPacketUpdateTileEntity;
  11. import net.minecraft.tileentity.TileEntity;
  12. import net.minecraft.util.math.BlockPos;
  13. import net.minecraft.world.World;
  14. public class TileEntityCauldron extends TileEntity
  15. {
  16. private CauldronColorMixer mixer;
  17. public TileEntityCauldron()
  18. {
  19. mixer = new CauldronColorMixer();
  20. }
  21. @Override
  22. public NBTTagCompound writeToNBT(NBTTagCompound com)
  23. {
  24. super.writeToNBT(com);
  25. NBTTagList list = new NBTTagList();
  26. LinkedList<ItemStack> items = mixer.getItems();
  27. items.stream().forEach(stack ->
  28. {
  29. NBTTagCompound nbttagcompound = new NBTTagCompound();
  30. stack.writeToNBT(nbttagcompound);
  31. list.appendTag(nbttagcompound);
  32. });
  33. com.setTag("items", list);
  34. return com;
  35. }
  36. @Override
  37. public void readFromNBT(NBTTagCompound com)
  38. {
  39. super.readFromNBT(com);
  40. readItems(com);
  41. }
  42. private void readItems(NBTTagCompound com)
  43. {
  44. if(com.hasKey("items", 9))
  45. {
  46. mixer.reset();
  47. NBTTagList list = com.getTagList("items", 10);
  48. LinkedList<ItemStack> items = mixer.getItems();
  49. for(NBTBase base : list)
  50. {
  51. items.add(new ItemStack((NBTTagCompound) base));
  52. }
  53. mixer.cache();
  54. }
  55. }
  56. @Override
  57. protected void setWorldCreate(World w)
  58. {
  59. this.setWorld(w);
  60. }
  61. public boolean hasDefaultColor()
  62. {
  63. return mixer.getItems().isEmpty();
  64. }
  65. public int getNumberOfIngredients()
  66. {
  67. return mixer.getItems().size();
  68. }
  69. public LinkedList<ItemStack> getIngredients()
  70. {
  71. return mixer.getItems();
  72. }
  73. public Color getColor()
  74. {
  75. return mixer.getMixedColor();
  76. }
  77. public void reset()
  78. {
  79. mixer.reset();
  80. }
  81. public boolean addItemStack(ItemStack stack)
  82. {
  83. boolean b = mixer.addColor(stack);
  84. if(b)
  85. {
  86. notifyBlockUpdate();
  87. markDirty();
  88. }
  89. return b;
  90. }
  91. public void setColor(int red, int green, int blue)
  92. {
  93. mixer.reset(new Color(red, green, blue));
  94. notifyBlockUpdate();
  95. markDirty();
  96. }
  97. private void notifyBlockUpdate()
  98. {
  99. IBlockState state = world.getBlockState(pos);
  100. this.world.notifyBlockUpdate(pos, state, state, 3);
  101. }
  102. @Override
  103. public SPacketUpdateTileEntity getUpdatePacket()
  104. {
  105. return new SPacketUpdateTileEntity(this.pos, -1, this.getUpdateTag());
  106. }
  107. @Override
  108. public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt)
  109. {
  110. readItems(pkt.getNbtCompound());
  111. notifyBlockUpdate();
  112. }
  113. @Override
  114. public NBTTagCompound getUpdateTag()
  115. {
  116. return writeToNBT(new NBTTagCompound());
  117. }
  118. @Override
  119. public boolean shouldRefresh(World w, BlockPos pos, IBlockState oldState, IBlockState newState)
  120. {
  121. return oldState.getBlock() != newState.getBlock();
  122. }
  123. }