From 0ecb697d75b25206daf921ecec1c910d6ab77491 Mon Sep 17 00:00:00 2001 From: Jakub <53441451+kuba6000@users.noreply.github.com> Date: Mon, 10 Apr 2023 21:02:49 +0200 Subject: Tea Network update: still alpha (#69) * Move to UUID checking and BigInteger tea count * Research category * Start working on tea limit * Maybe * Update en_US.lang * Fix * Save UUID mapping * Mark dirty * Fixes --- src/main/java/kubatech/CommonProxy.java | 2 +- src/main/java/kubatech/FMLEventHandler.java | 4 + src/main/java/kubatech/api/Variables.java | 6 ++ src/main/java/kubatech/api/enums/ItemList.java | 1 + src/main/java/kubatech/api/helpers/UUIDFinder.java | 23 ++++++ src/main/java/kubatech/api/tea/TeaNetwork.java | 92 +++++++++++++++++++++ src/main/java/kubatech/commands/CommandTea.java | 33 ++++---- src/main/java/kubatech/kubatech.java | 1 + src/main/java/kubatech/loaders/BlockLoader.java | 4 + src/main/java/kubatech/loaders/MTLoader.java | 2 - src/main/java/kubatech/loaders/TCLoader.java | 12 ++- .../java/kubatech/loaders/block/BlockProxy.java | 21 +++-- .../java/kubatech/loaders/block/KubaBlock.java | 5 ++ .../java/kubatech/loaders/block/KubaItemBlock.java | 12 +++ .../kubatech/loaders/block/blocks/TeaAcceptor.java | 4 +- .../kubatech/loaders/block/blocks/TeaStorage.java | 46 +++++++++++ .../kubatech/loaders/item/items/TeaCollection.java | 30 ++++--- .../kubatech/loaders/item/items/TeaUltimate.java | 79 +++++++++++------- src/main/java/kubatech/savedata/PlayerData.java | 14 ++-- .../java/kubatech/savedata/PlayerDataManager.java | 32 +++++-- .../java/kubatech/tileentity/TeaAcceptorTile.java | 67 +++++++++------ .../java/kubatech/tileentity/TeaStorageTile.java | 63 ++++++++++++++ src/main/resources/assets/kubatech/lang/en_US.lang | 2 + .../assets/kubatech/textures/blocks/blank.png | Bin 0 -> 599 bytes .../kubatech/textures/blocks/tea_acceptor.png | Bin 9957 -> 6837 bytes .../textures/blocks/tea_acceptor.png.mcmeta | 5 -- .../kubatech/textures/blocks/tea_storage.png | Bin 0 -> 935 bytes .../assets/kubatech/textures/gui/green_tea.png | Bin 0 -> 6557 bytes 28 files changed, 449 insertions(+), 111 deletions(-) create mode 100644 src/main/java/kubatech/api/helpers/UUIDFinder.java create mode 100644 src/main/java/kubatech/api/tea/TeaNetwork.java create mode 100644 src/main/java/kubatech/loaders/block/blocks/TeaStorage.java create mode 100644 src/main/java/kubatech/tileentity/TeaStorageTile.java create mode 100644 src/main/resources/assets/kubatech/textures/blocks/blank.png delete mode 100644 src/main/resources/assets/kubatech/textures/blocks/tea_acceptor.png.mcmeta create mode 100644 src/main/resources/assets/kubatech/textures/blocks/tea_storage.png create mode 100644 src/main/resources/assets/kubatech/textures/gui/green_tea.png (limited to 'src') diff --git a/src/main/java/kubatech/CommonProxy.java b/src/main/java/kubatech/CommonProxy.java index a93d5991c1..37bd924579 100644 --- a/src/main/java/kubatech/CommonProxy.java +++ b/src/main/java/kubatech/CommonProxy.java @@ -37,11 +37,11 @@ public class CommonProxy { MinecraftForge.EVENT_BUS.register(new PlayerDataManager()); registerItems(); registerBlocks(); - if (LoaderReference.Thaumcraft) TCLoader.load(); } public void init(FMLInitializationEvent event) { if (LoaderReference.MineTweaker) MTLoader.init(); + if (LoaderReference.Thaumcraft) TCLoader.init(); } public void postInit(FMLPostInitializationEvent event) { diff --git a/src/main/java/kubatech/FMLEventHandler.java b/src/main/java/kubatech/FMLEventHandler.java index b096c7bb11..f1aa845ebd 100644 --- a/src/main/java/kubatech/FMLEventHandler.java +++ b/src/main/java/kubatech/FMLEventHandler.java @@ -10,7 +10,9 @@ package kubatech; +import kubatech.api.helpers.UUIDFinder; import kubatech.api.network.LoadConfigPacket; +import kubatech.savedata.PlayerDataManager; import net.minecraft.entity.player.EntityPlayerMP; @@ -23,6 +25,8 @@ public class FMLEventHandler { @SubscribeEvent public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) { if (!(event.player instanceof EntityPlayerMP)) return; + UUIDFinder.updateMapping(event.player.getCommandSenderName(), event.player.getPersistentID()); + PlayerDataManager.initializePlayer((EntityPlayerMP) event.player); kubatech.info("Sending config to " + event.player.getDisplayName()); kubatech.NETWORK.sendTo(LoadConfigPacket.instance, (EntityPlayerMP) event.player); } diff --git a/src/main/java/kubatech/api/Variables.java b/src/main/java/kubatech/api/Variables.java index fd1c8564d5..74312d6fb7 100644 --- a/src/main/java/kubatech/api/Variables.java +++ b/src/main/java/kubatech/api/Variables.java @@ -10,6 +10,9 @@ package kubatech.api; +import java.text.DecimalFormat; +import java.text.NumberFormat; + import kubatech.api.utils.StringUtils; import net.minecraft.util.EnumChatFormatting; @@ -41,4 +44,7 @@ public class Variables { public static final double ln4 = Math.log(4d); public static final double ln2 = Math.log(2d); + + public static final NumberFormat numberFormatScientific = new DecimalFormat("0.00E0"); + public static final NumberFormat numberFormat = NumberFormat.getInstance(); } diff --git a/src/main/java/kubatech/api/enums/ItemList.java b/src/main/java/kubatech/api/enums/ItemList.java index 55621888ee..9176c6b207 100644 --- a/src/main/java/kubatech/api/enums/ItemList.java +++ b/src/main/java/kubatech/api/enums/ItemList.java @@ -58,6 +58,7 @@ public enum ItemList implements IItemContainer { PartiallyOxidizedTeaLeaf, TeaAcceptorResearchNote, TeaAcceptor, + TeaStorage, Beeeeee; private ItemStack mStack; diff --git a/src/main/java/kubatech/api/helpers/UUIDFinder.java b/src/main/java/kubatech/api/helpers/UUIDFinder.java new file mode 100644 index 0000000000..737080ef80 --- /dev/null +++ b/src/main/java/kubatech/api/helpers/UUIDFinder.java @@ -0,0 +1,23 @@ +package kubatech.api.helpers; + +import java.util.HashMap; +import java.util.UUID; + +public class UUIDFinder { + + private static final HashMap UUIDToUsernameMap = new HashMap<>(); + private static final HashMap UsernameToUUIDMap = new HashMap<>(); + + public static UUID getUUID(String username) { + return UsernameToUUIDMap.get(username); + } + + public static String getUsername(UUID player) { + return UUIDToUsernameMap.get(player); + } + + public static void updateMapping(String username, UUID player) { + UUIDToUsernameMap.put(player, username); + UsernameToUUIDMap.put(username, player); + } +} diff --git a/src/main/java/kubatech/api/tea/TeaNetwork.java b/src/main/java/kubatech/api/tea/TeaNetwork.java new file mode 100644 index 0000000000..298982ce9d --- /dev/null +++ b/src/main/java/kubatech/api/tea/TeaNetwork.java @@ -0,0 +1,92 @@ +package kubatech.api.tea; + +import java.math.BigInteger; +import java.util.HashSet; +import java.util.UUID; + +import kubatech.savedata.PlayerData; +import kubatech.savedata.PlayerDataManager; +import kubatech.tileentity.TeaStorageTile; + +import net.minecraft.nbt.NBTTagCompound; + +public class TeaNetwork { + + // TODO: Optimize later :P + public BigInteger teaAmount = BigInteger.ZERO; + public BigInteger teaLimit = BigInteger.valueOf(Long.MAX_VALUE); + PlayerData owner; + private HashSet teaStorageExtenders = new HashSet<>(); + + public static TeaNetwork getNetwork(UUID player) { + PlayerData p = PlayerDataManager.getPlayer(player); + if (p == null) return null; + TeaNetwork n = p.teaNetwork; + if (n == null) { + p.teaNetwork = new TeaNetwork(); + p.teaNetwork.owner = p; + return p.teaNetwork; + } + n.owner = p; + return n; + } + + public boolean canAfford(long price, boolean take) { + return canAfford(BigInteger.valueOf(price), take); + } + + public boolean canAfford(BigInteger price, boolean take) { + if (teaAmount.compareTo(price) >= 0) { + if (take) { + teaAmount = teaAmount.subtract(price); + markDirty(); + } + return true; + } + return false; + } + + public boolean addTea(long toAdd) { + return addTea(BigInteger.valueOf(toAdd)); + } + + public boolean addTea(BigInteger toAdd) { + BigInteger newValue = teaAmount.add(toAdd); + if (newValue.compareTo(teaLimit) > 0) return false; + teaAmount = teaAmount.add(toAdd); + markDirty(); + return true; + } + + public boolean canAdd(long toAdd) { + return canAdd(BigInteger.valueOf(toAdd)); + } + + public boolean canAdd(BigInteger toAdd) { + return teaAmount.add(toAdd).compareTo(teaLimit) <= 0; + } + + public void registerTeaStorageExtender(TeaStorageTile storageTile) { + if (teaStorageExtenders.add(storageTile)) teaLimit = teaLimit.add(storageTile.teaExtendAmount()); + } + + public void unregisterTeaStorageExtender(TeaStorageTile storageTile) { + if (teaStorageExtenders.remove(storageTile)) teaLimit = teaLimit.subtract(storageTile.teaExtendAmount()); + } + + public void markDirty() { + owner.markDirty(); + } + + public NBTTagCompound toNBT() { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setByteArray("teaAmount", teaAmount.toByteArray()); + return nbt; + } + + public static TeaNetwork fromNBT(NBTTagCompound nbt) { + TeaNetwork teaNetwork = new TeaNetwork(); + teaNetwork.teaAmount = new BigInteger(nbt.getByteArray("teaAmount")); + return teaNetwork; + } +} diff --git a/src/main/java/kubatech/commands/CommandTea.java b/src/main/java/kubatech/commands/CommandTea.java index 726b8ce799..4fff7f0a40 100644 --- a/src/main/java/kubatech/commands/CommandTea.java +++ b/src/main/java/kubatech/commands/CommandTea.java @@ -12,8 +12,11 @@ package kubatech.commands; import static kubatech.commands.CommandTea.Translations.*; -import kubatech.savedata.PlayerData; -import kubatech.savedata.PlayerDataManager; +import java.math.BigInteger; +import java.util.UUID; + +import kubatech.api.helpers.UUIDFinder; +import kubatech.api.tea.TeaNetwork; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; @@ -76,43 +79,43 @@ public class CommandTea extends CommandBase { p_71515_1_.addChatMessage(new ChatComponentText(INVALID_OPTION.get())); return; } - PlayerData playerData = PlayerDataManager.getPlayer(p_71515_2_[0]); - if (playerData == null) { + UUID player = UUIDFinder.getUUID(p_71515_2_[0]); + if (player == null) { p_71515_1_.addChatMessage(new ChatComponentText(PLAYER_NOT_FOUND.get())); return; } + TeaNetwork teaNetwork = TeaNetwork.getNetwork(player); if (!p_71515_2_[1].equalsIgnoreCase("get") && p_71515_2_.length < 3) { p_71515_1_.addChatMessage(new ChatComponentText(INVALID_OPTION.get())); return; } switch (p_71515_2_[1].toLowerCase()) { case "get": - p_71515_1_.addChatMessage(new ChatComponentText(SUCCESS_GET.get(p_71515_2_[0], playerData.teaAmount))); + p_71515_1_.addChatMessage(new ChatComponentText(SUCCESS_GET.get(p_71515_2_[0], teaNetwork.teaAmount))); break; case "set": { - long tea; + BigInteger tea; try { - tea = Long.parseLong(p_71515_2_[2]); + tea = new BigInteger(p_71515_2_[2]); } catch (NumberFormatException ex) { p_71515_1_.addChatMessage(new ChatComponentText(INVALID_OPTION.get())); return; } - playerData.teaAmount = tea; - playerData.markDirty(); - p_71515_1_.addChatMessage(new ChatComponentText(SUCCESS_SET.get(p_71515_2_[0], playerData.teaAmount))); + teaNetwork.teaAmount = tea; + teaNetwork.markDirty(); + p_71515_1_.addChatMessage(new ChatComponentText(SUCCESS_SET.get(p_71515_2_[0], teaNetwork.teaAmount))); break; } case "add": { - long tea; + BigInteger tea; try { - tea = Long.parseLong(p_71515_2_[2]); + tea = new BigInteger(p_71515_2_[2]); } catch (NumberFormatException ex) { p_71515_1_.addChatMessage(new ChatComponentText(INVALID_OPTION.get())); return; } - playerData.teaAmount += tea; - playerData.markDirty(); - p_71515_1_.addChatMessage(new ChatComponentText(SUCCESS_ADD.get(p_71515_2_[0], playerData.teaAmount))); + teaNetwork.addTea(tea); + p_71515_1_.addChatMessage(new ChatComponentText(SUCCESS_ADD.get(p_71515_2_[0], teaNetwork.teaAmount))); break; } default: diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java index b0868a3f30..2ec2da2e7b 100644 --- a/src/main/java/kubatech/kubatech.java +++ b/src/main/java/kubatech/kubatech.java @@ -81,6 +81,7 @@ public class kubatech { super.displayAllReleventItems(p_78018_1_); p_78018_1_.add(ItemList.ExtremeExterminationChamber.get(1)); p_78018_1_.add(ItemList.ExtremeIndustrialApiary.get(1)); + p_78018_1_.add(ItemList.ExtremeIndustrialGreenhouse.get(1)); } }; diff --git a/src/main/java/kubatech/loaders/BlockLoader.java b/src/main/java/kubatech/loaders/BlockLoader.java index feed715fa7..b16fd55b4e 100644 --- a/src/main/java/kubatech/loaders/BlockLoader.java +++ b/src/main/java/kubatech/loaders/BlockLoader.java @@ -14,7 +14,9 @@ import kubatech.api.enums.ItemList; import kubatech.loaders.block.KubaBlock; import kubatech.loaders.block.KubaItemBlock; import kubatech.loaders.block.blocks.TeaAcceptor; +import kubatech.loaders.block.blocks.TeaStorage; import kubatech.tileentity.TeaAcceptorTile; +import kubatech.tileentity.TeaStorageTile; import net.minecraft.block.material.Material; import net.minecraft.item.ItemBlock; @@ -28,9 +30,11 @@ public class BlockLoader { public static void registerBlocks() { GameRegistry.registerTileEntity(TeaAcceptorTile.class, "KT_TeaAcceptor"); + GameRegistry.registerTileEntity(TeaStorageTile.class, "KT_TeaStorage"); GameRegistry.registerBlock(kubaBlock, null, "kubablocks"); GameRegistry.registerItem(kubaItemBlock, "kubablocks"); ItemList.TeaAcceptor.set(kubaBlock.registerProxyBlock(new TeaAcceptor())); + ItemList.TeaStorage.set(kubaBlock.registerProxyBlock(new TeaStorage())); } } diff --git a/src/main/java/kubatech/loaders/MTLoader.java b/src/main/java/kubatech/loaders/MTLoader.java index d223e83951..b39c99e795 100644 --- a/src/main/java/kubatech/loaders/MTLoader.java +++ b/src/main/java/kubatech/loaders/MTLoader.java @@ -11,7 +11,6 @@ package kubatech.loaders; import kubatech.Tags; -import kubatech.api.LoaderReference; import minetweaker.MineTweakerImplementationAPI; import org.apache.logging.log4j.LogManager; @@ -31,6 +30,5 @@ public class MTLoader { public void MTOnPostReload(MineTweakerImplementationAPI.ReloadEvent reloadEvent) { LOG.info("MT Recipes Loaded!"); - if (LoaderReference.Thaumcraft) TCLoader.register(); } } diff --git a/src/main/java/kubatech/loaders/TCLoader.java b/src/main/java/kubatech/loaders/TCLoader.java index a4141d4ba5..37aed521cc 100644 --- a/src/main/java/kubatech/loaders/TCLoader.java +++ b/src/main/java/kubatech/loaders/TCLoader.java @@ -15,6 +15,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.stream.Collectors; +import kubatech.Tags; import kubatech.api.LoaderReference; import kubatech.api.enums.ItemList; import kubatech.api.utils.ItemID; @@ -22,6 +23,7 @@ import kubatech.loaders.item.items.TeaUltimate; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import thaumcraft.api.ThaumcraftApi; @@ -36,9 +38,13 @@ import cpw.mods.fml.common.registry.GameRegistry; public class TCLoader { - public static void load() {} + public static final String TCCategoryKey = "KUBATECH"; - public static void register() { + public static void init() { + ResearchCategories.registerCategory( + TCCategoryKey, + new ResourceLocation(Tags.MODID, "textures/gui/green_tea.png"), + new ResourceLocation("thaumcraft", "textures/gui/gui_researchback.png")); if (!LoaderReference.GTNHCoreMod || !LoaderReference.DraconicEvolution) return; registerRecipe(); registerResearch(); @@ -102,7 +108,7 @@ public class TCLoader { if (ultimateTeaResearch == null) { ultimateTeaResearch = new ResearchItem( "KT_UltimateTea", - "NEWHORIZONS", + TCCategoryKey, new AspectList().add(Aspect.MAGIC, 1).add(Aspect.HEAL, 1).add(Aspect.PLANT, 1) .add(Aspect.EXCHANGE, 1), -2, diff --git a/src/main/java/kubatech/loaders/block/BlockProxy.java b/src/main/java/kubatech/loaders/block/BlockProxy.java index 4ce6aa820d..a546aa80d8 100644 --- a/src/main/java/kubatech/loaders/block/BlockProxy.java +++ b/src/main/java/kubatech/loaders/block/BlockProxy.java @@ -31,12 +31,20 @@ import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; public class BlockProxy { private final String unlocalizedName; - private final String texturepath; - private IIcon icon; + private final String sideTexturePath; + private final String topBottomTexturePath; + private IIcon sideIcon; + private IIcon topBottomIcon; public BlockProxy(String unlocalizedName, String texture) { this.unlocalizedName = "kubablock." + unlocalizedName; - texturepath = Tags.MODID + ":" + texture; + sideTexturePath = topBottomTexturePath = Tags.MODID + ":" + texture; + } + + public BlockProxy(String unlocalizedName, String sideTexture, String topBottomTexture) { + this.unlocalizedName = "kubablock." + unlocalizedName; + sideTexturePath = Tags.MODID + ":" + sideTexture; + topBottomTexturePath = Tags.MODID + ":" + topBottomTexture; } public void itemInit(int ID) {} @@ -58,11 +66,14 @@ public class BlockProxy { public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {} public void registerIcon(IIconRegister iconRegister) { - icon = iconRegister.registerIcon(texturepath); + sideIcon = iconRegister.registerIcon(sideTexturePath); + if (sideTexturePath.equals(topBottomTexturePath)) topBottomIcon = sideIcon; + else topBottomIcon = iconRegister.registerIcon(topBottomTexturePath); } public IIcon getIcon(int side) { - return icon; + if (side <= 1) return topBottomIcon; + else return sideIcon; } public String getUnlocalizedName() { diff --git a/src/main/java/kubatech/loaders/block/KubaBlock.java b/src/main/java/kubatech/loaders/block/KubaBlock.java index 92481c3f8a..52b378dbf5 100644 --- a/src/main/java/kubatech/loaders/block/KubaBlock.java +++ b/src/main/java/kubatech/loaders/block/KubaBlock.java @@ -106,6 +106,11 @@ public class KubaBlock extends Block { for (int i = 0; i < blocks.size(); i++) p_149666_3_.add(new ItemStack(p_149666_1_, 1, i)); } + @Override + public int damageDropped(int meta) { + return meta; + } + @Override public void registerBlockIcons(IIconRegister p_149651_1_) { blocks.values().forEach(b -> b.registerIcon(p_149651_1_)); diff --git a/src/main/java/kubatech/loaders/block/KubaItemBlock.java b/src/main/java/kubatech/loaders/block/KubaItemBlock.java index 8d497a6a0f..bdd0c6eecd 100644 --- a/src/main/java/kubatech/loaders/block/KubaItemBlock.java +++ b/src/main/java/kubatech/loaders/block/KubaItemBlock.java @@ -17,6 +17,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import net.minecraft.world.World; public class KubaItemBlock extends ItemBlock { @@ -25,6 +26,12 @@ public class KubaItemBlock extends ItemBlock { setHasSubtypes(true); } + @Override + public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, + float hitX, float hitY, float hitZ, int metadata) { + return super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata); + } + @Override public void registerIcons(IIconRegister p_94581_1_) { super.registerIcons(p_94581_1_); @@ -45,4 +52,9 @@ public class KubaItemBlock extends ItemBlock { public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List p_77624_3_, boolean p_77624_4_) { KubaBlock.blocks.get(p_77624_1_.getItemDamage()).addInformation(p_77624_1_, p_77624_2_, p_77624_3_, p_77624_4_); } + + @Override + public int getMetadata(int p_77647_1_) { + return p_77647_1_; + } } diff --git a/src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java b/src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java index 2f4f36db53..9eba767376 100644 --- a/src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java +++ b/src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java @@ -26,7 +26,7 @@ import net.minecraft.world.World; public class TeaAcceptor extends BlockProxy implements IProxyTileEntityProvider { public TeaAcceptor() { - super("tea_acceptor", "tea_acceptor"); + super("tea_acceptor", "tea_acceptor", "blank"); } @Override @@ -38,7 +38,7 @@ public class TeaAcceptor extends BlockProxy implements IProxyTileEntityProvider public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { if (world.isRemote) return; if (!(player instanceof EntityPlayerMP)) return; - ((TeaAcceptorTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getCommandSenderName()); + ((TeaAcceptorTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getPersistentID()); } @Override diff --git a/src/main/java/kubatech/loaders/block/blocks/TeaStorage.java b/src/main/java/kubatech/loaders/block/blocks/TeaStorage.java new file mode 100644 index 0000000000..a80b73fce0 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/blocks/TeaStorage.java @@ -0,0 +1,46 @@ +package kubatech.loaders.block.blocks; + +import static kubatech.api.Variables.numberFormat; + +import java.util.List; + +import kubatech.loaders.block.BlockProxy; +import kubatech.loaders.block.IProxyTileEntityProvider; +import kubatech.tileentity.TeaStorageTile; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +public class TeaStorage extends BlockProxy implements IProxyTileEntityProvider { + + public TeaStorage() { + super("tea_storage", "tea_storage"); + } + + @Override + public TileEntity createTileEntity(World world) { + return new TeaStorageTile(); + } + + @Override + public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + if (world.isRemote) return; + if (!(player instanceof EntityPlayerMP)) return; + ((TeaStorageTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getPersistentID()); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { + tooltipList.add("Extends Tea Storage by " + EnumChatFormatting.RED + numberFormat.format(Long.MAX_VALUE)); + } + + @Override + public float getResistance() { + return 999999999999.f; + } +} diff --git a/src/main/java/kubatech/loaders/item/items/TeaCollection.java b/src/main/java/kubatech/loaders/item/items/TeaCollection.java index 5ef3995301..46c13a0032 100644 --- a/src/main/java/kubatech/loaders/item/items/TeaCollection.java +++ b/src/main/java/kubatech/loaders/item/items/TeaCollection.java @@ -12,13 +12,13 @@ package kubatech.loaders.item.items; import java.util.LinkedList; import java.util.List; +import java.util.UUID; import kubatech.api.utils.ModUtils; import kubatech.loaders.ItemLoader; import kubatech.loaders.item.ItemProxy; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityClientPlayerMP; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -48,19 +48,29 @@ public class TeaCollection extends ItemProxy { private static final int[][] achievement_poses = new int[][] { { 0, 0 }, { 2, 0 }, { 3, 1 }, { 4, 2 }, { 4, 4 }, { 3, 5 }, { 2, 6 }, { 0, 6 }, { -1, 5 }, { -2, 4 }, { -2, 2 }, { -1, 1 }, { 1, 3 } }; - boolean checkTeaOwner(ItemStack stack, String username) { + boolean checkTeaOwner(ItemStack stack, UUID player) { + NBTTagCompound tag = stack.stackTagCompound; + if (tag == null || !stack.stackTagCompound.hasKey("TeaOwnerUUID")) return true; + return stack.stackTagCompound.getString("TeaOwnerUUID").equals(player.toString()); + } + + boolean checkTeaOwner(ItemStack stack, String player) { NBTTagCompound tag = stack.stackTagCompound; if (tag == null || !stack.stackTagCompound.hasKey("TeaOwner")) return true; - return stack.stackTagCompound.getString("TeaOwner").equals(username); + return stack.stackTagCompound.getString("TeaOwner").equals(player); } - private boolean checkOrSetTeaOwner(ItemStack stack, String username) { + private boolean checkOrSetTeaOwner(ItemStack stack, EntityPlayer player) { NBTTagCompound tag = stack.stackTagCompound; - if (tag == null || !stack.stackTagCompound.hasKey("TeaOwner")) { - stack.setTagInfo("TeaOwner", new NBTTagString(username)); + if (tag == null || !stack.stackTagCompound.hasKey("TeaOwnerUUID")) { + stack.setTagInfo("TeaOwnerUUID", new NBTTagString(player.getPersistentID().toString())); + stack.setTagInfo("TeaOwner", new NBTTagString(player.getCommandSenderName())); return true; } - return stack.stackTagCompound.getString("TeaOwner").equals(username); + if (stack.stackTagCompound.getString("TeaOwnerUUID").equals(player.getPersistentID().toString())) { + stack.setTagInfo("TeaOwner", new NBTTagString(player.getCommandSenderName())); + return true; + } else return false; } @Override @@ -136,6 +146,7 @@ public class TeaCollection extends ItemProxy { if (!ModUtils.isClientSided || Minecraft.getMinecraft().thePlayer == null) { return super.getDisplayName(stack); } + // UUID is different on client if in offline mode I think if (checkTeaOwner(stack, Minecraft.getMinecraft().thePlayer.getCommandSenderName())) { return super.getDisplayName(stack); } @@ -146,7 +157,7 @@ public class TeaCollection extends ItemProxy { public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) { if (world.isRemote) return; if (!(entity instanceof EntityPlayerMP)) return; - checkOrSetTeaOwner(stack, entity.getCommandSenderName()); + checkOrSetTeaOwner(stack, (EntityPlayer) entity); NBTTagCompound tag = stack.stackTagCompound; if (tag.hasKey("display")) tag.removeTag("display"); } @@ -166,10 +177,9 @@ public class TeaCollection extends ItemProxy { if (new Throwable().getStackTrace()[1].getMethodName().equals("isAchievementInPages")) return super.getAchievements(); // 5HEAD FIX - EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer; unlockedAchievements.clear(); for (Achievement achievement : achievements) - if (player.getStatFileWriter().hasAchievementUnlocked(achievement)) + if (Minecraft.getMinecraft().thePlayer.getStatFileWriter().hasAchievementUnlocked(achievement)) unlockedAchievements.add(achievement); return unlockedAchievements; } diff --git a/src/main/java/kubatech/loaders/item/items/TeaUltimate.java b/src/main/java/kubatech/loaders/item/items/TeaUltimate.java index 35b4ae28f1..ec7da06b2d 100644 --- a/src/main/java/kubatech/loaders/item/items/TeaUltimate.java +++ b/src/main/java/kubatech/loaders/item/items/TeaUltimate.java @@ -10,14 +10,18 @@ package kubatech.loaders.item.items; +import static kubatech.api.Variables.numberFormat; +import static kubatech.api.Variables.numberFormatScientific; + +import java.math.BigInteger; import java.text.NumberFormat; +import java.util.concurrent.atomic.AtomicReference; import kubatech.api.enums.ItemList; +import kubatech.api.tea.TeaNetwork; import kubatech.api.utils.ModUtils; import kubatech.api.utils.StringUtils; import kubatech.loaders.item.IItemProxyGUI; -import kubatech.savedata.PlayerData; -import kubatech.savedata.PlayerDataManager; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; @@ -26,11 +30,11 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import codechicken.nei.NEIClientUtils; + import com.gtnewhorizons.modularui.api.ModularUITextures; import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; @@ -64,7 +68,7 @@ public class TeaUltimate extends TeaCollection implements IItemProxyGUI { @Override public String getDisplayName(ItemStack stack) { - if (!ModUtils.isClientSided) return super.getDisplayName(stack); + if (!ModUtils.isClientSided || Minecraft.getMinecraft().thePlayer == null) return super.getDisplayName(stack); if (checkTeaOwner(stack, Minecraft.getMinecraft().thePlayer.getCommandSenderName())) { return getUltimateTeaDisplayName(super.getDisplayName(stack)); } @@ -75,10 +79,12 @@ public class TeaUltimate extends TeaCollection implements IItemProxyGUI { public ModularWindow createWindow(ItemStack stack, EntityPlayer player) { ModularWindow.Builder builder = ModularWindow.builder(200, 150); builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - final PlayerData playerData = PlayerDataManager.getPlayer(player.getCommandSenderName()); + final TeaNetwork teaNetwork = TeaNetwork.getNetwork(player.getPersistentID()); IDrawable tab1 = new ItemDrawable(ItemList.LegendaryUltimateTea.get(1)).withFixedSize(18, 18, 4, 6); IDrawable tab2 = new ItemDrawable(new ItemStack(Blocks.crafting_table)).withFixedSize(18, 18, 4, 6); IDrawable tab3 = new ItemDrawable(new ItemStack(Items.golden_apple)).withFixedSize(18, 18, 4, 6); + AtomicReference teaAmount = new AtomicReference<>(BigInteger.ZERO); + AtomicReference teaLimit = new AtomicReference<>(BigInteger.ZERO); builder.widget( new TabContainer() .setButtonSize( @@ -127,11 +133,33 @@ public class TeaUltimate extends TeaCollection implements IItemProxyGUI { .addChild( new DynamicTextWidget( () -> new Text( - "Tea: " + (playerData == null ? "ERROR" - : NumberFormat.getInstance() - .format(playerData.teaAmount))) - .color(Color.GREEN.normal)) - .setPos(20, 20))) + "Tea: " + (NEIClientUtils.shiftKey() + ? numberFormat.format(teaAmount.get()) + : numberFormatScientific + .format(teaAmount.get()))) + .color(Color.GREEN.dark(3))) + .setSynced(false) + .setPos(20, 20) + .attachSyncer( + new FakeSyncWidget.BigIntegerSyncer( + () -> teaNetwork.teaAmount, + teaAmount::set), + builder)) + .addChild( + new DynamicTextWidget( + () -> new Text( + "Tea limit: " + (NEIClientUtils.shiftKey() + ? numberFormat.format(teaLimit.get()) + : numberFormatScientific + .format(teaLimit.get()))) + .color(Color.GREEN.dark(3))) + .setSynced(false) + .setPos(20, 30) + .attachSyncer( + new FakeSyncWidget.BigIntegerSyncer( + () -> teaNetwork.teaLimit, + teaLimit::set), + builder))) .addPage( new MultiChildWidget() .addChild( @@ -143,10 +171,7 @@ public class TeaUltimate extends TeaCollection implements IItemProxyGUI { new ButtonWidget() .setOnClick((Widget.ClickData clickData, Widget widget) -> { if (!(player instanceof EntityPlayerMP)) return; - if (playerData == null || playerData.teaAmount < 50_000L) - return; - playerData.teaAmount -= 50_000L; - playerData.markDirty(); + if (!teaNetwork.canAfford(50_000, true)) return; if (player.inventory.addItemStackToInventory( ItemList.TeaAcceptorResearchNote.get(1))) return; @@ -187,7 +212,7 @@ public class TeaUltimate extends TeaCollection implements IItemProxyGUI { public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer entity) { if (world.isRemote) return stack; if (!(entity instanceof EntityPlayerMP)) return stack; - if (!checkTeaOwner(stack, entity.getCommandSenderName())) return stack; + if (!checkTeaOwner(stack, entity.getPersistentID())) return stack; openHeldItemGUI(entity); return stack; } @@ -197,18 +222,16 @@ public class TeaUltimate extends TeaCollection implements IItemProxyGUI { if (world.isRemote) return; if (!(entity instanceof EntityPlayerMP)) return; super.onUpdate(stack, world, entity, slot, isCurrentItem); - if (checkTeaOwner(stack, entity.getCommandSenderName())) { - PlayerData playerData = PlayerDataManager.getPlayer(entity.getCommandSenderName()); - if (playerData == null) return; - playerData.teaAmount++; - playerData.markDirty(); - - if (playerData.autoRegen && playerData.teaAmount > 75_000) { - if (((EntityPlayerMP) entity).getActivePotionEffect(Potion.regeneration) == null) { - ((EntityPlayerMP) entity).addPotionEffect(new PotionEffect(Potion.regeneration.id, 1200, 0, true)); - playerData.teaAmount -= 75_000; - } - } + if (checkTeaOwner(stack, entity.getPersistentID())) { + TeaNetwork teaNetwork = TeaNetwork.getNetwork(entity.getPersistentID()); + teaNetwork.addTea(1); + + /* + * if (playerData.autoRegen && playerData.teaAmount > 75_000) { if (((EntityPlayerMP) + * entity).getActivePotionEffect(Potion.regeneration) == null) { ((EntityPlayerMP) + * entity).addPotionEffect(new PotionEffect(Potion.regeneration.id, 1200, 0, true)); playerData.teaAmount -= + * 75_000; } } + */ } } } diff --git a/src/main/java/kubatech/savedata/PlayerData.java b/src/main/java/kubatech/savedata/PlayerData.java index a00b7fd0fa..3cf33bab2d 100644 --- a/src/main/java/kubatech/savedata/PlayerData.java +++ b/src/main/java/kubatech/savedata/PlayerData.java @@ -10,24 +10,26 @@ package kubatech.savedata; +import kubatech.api.tea.TeaNetwork; + import net.minecraft.nbt.NBTTagCompound; public class PlayerData { - public long teaAmount = 0L; - public boolean autoRegen = false; + public String username = ""; + public TeaNetwork teaNetwork; PlayerData(NBTTagCompound NBTData) { - teaAmount = NBTData.getLong("teaAmount"); - autoRegen = NBTData.getBoolean("autoRegen"); + username = NBTData.getString("username"); + if (NBTData.hasKey("teaNetwork")) teaNetwork = TeaNetwork.fromNBT(NBTData.getCompoundTag("teaNetwork")); } PlayerData() {} public NBTTagCompound toNBTData() { NBTTagCompound NBTData = new NBTTagCompound(); - NBTData.setLong("teaAmount", teaAmount); - NBTData.setBoolean("autoRegen", autoRegen); + NBTData.setString("username", username); + if (teaNetwork != null) NBTData.setTag("teaNetwork", teaNetwork.toNBT()); return NBTData; } diff --git a/src/main/java/kubatech/savedata/PlayerDataManager.java b/src/main/java/kubatech/savedata/PlayerDataManager.java index d14a261542..ba894504e3 100644 --- a/src/main/java/kubatech/savedata/PlayerDataManager.java +++ b/src/main/java/kubatech/savedata/PlayerDataManager.java @@ -12,7 +12,11 @@ package kubatech.savedata; import java.util.HashMap; import java.util.Map; +import java.util.UUID; +import kubatech.api.helpers.UUIDFinder; + +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraft.world.WorldSavedData; @@ -24,7 +28,7 @@ public class PlayerDataManager extends WorldSavedData { private static final String playerDataName = "KubaTech_PlayerData"; static PlayerDataManager Instance = null; - private final HashMap players = new HashMap<>(); + private final HashMap players = new HashMap<>(); public static void Initialize(World world) { if (Instance != null) { @@ -53,7 +57,11 @@ public class PlayerDataManager extends WorldSavedData { players.clear(); for (int i = 0, imax = NBTData.getInteger("size"); i < imax; i++) { NBTTagCompound playerNBTData = NBTData.getCompoundTag("Player." + i); - players.put(playerNBTData.getString("username"), new PlayerData(playerNBTData.getCompoundTag("data"))); + if (!playerNBTData.hasKey("uuid")) continue; + UUID uuid = UUID.fromString(playerNBTData.getString("uuid")); + PlayerData pData = new PlayerData(playerNBTData.getCompoundTag("data")); + players.put(uuid, pData); + if (!pData.username.isEmpty()) UUIDFinder.updateMapping(pData.username, uuid); } } @@ -61,17 +69,27 @@ public class PlayerDataManager extends WorldSavedData { public void writeToNBT(NBTTagCompound NBTData) { NBTData.setInteger("size", players.size()); int i = 0; - for (Map.Entry playerDataEntry : players.entrySet()) { + for (Map.Entry playerDataEntry : players.entrySet()) { NBTTagCompound playerNBTData = new NBTTagCompound(); - playerNBTData.setString("username", playerDataEntry.getKey()); + playerNBTData.setString("uuid", playerDataEntry.getKey().toString()); playerNBTData.setTag("data", playerDataEntry.getValue().toNBTData()); NBTData.setTag("Player." + (i++), playerNBTData); } } - public static PlayerData getPlayer(String username) { - if (Instance == null) return null; - return Instance.players.computeIfAbsent(username, s -> new PlayerData()); + public static PlayerData getPlayer(UUID player) { + if (Instance == null) return null; // probably client side + return Instance.players.computeIfAbsent(player, s -> new PlayerData()); + } + + public static void initializePlayer(EntityPlayerMP player) { + if (Instance == null) return; + if (!Instance.players.containsKey(player.getPersistentID())) { + PlayerData pData = new PlayerData(); + pData.username = player.getCommandSenderName(); + Instance.players.put(player.getPersistentID(), pData); + Instance.markDirty(); + } } @SuppressWarnings("unused") diff --git a/src/main/java/kubatech/tileentity/TeaAcceptorTile.java b/src/main/java/kubatech/tileentity/TeaAcceptorTile.java index 20b101e70d..73bfd46d65 100644 --- a/src/main/java/kubatech/tileentity/TeaAcceptorTile.java +++ b/src/main/java/kubatech/tileentity/TeaAcceptorTile.java @@ -10,15 +10,19 @@ package kubatech.tileentity; -import java.text.NumberFormat; +import static kubatech.api.Variables.numberFormat; +import static kubatech.api.Variables.numberFormatScientific; + +import java.math.BigInteger; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.BiFunction; import kubatech.api.enums.ItemList; +import kubatech.api.tea.TeaNetwork; import kubatech.api.utils.StringUtils; import kubatech.loaders.ItemLoader; import kubatech.loaders.block.KubaBlock; -import kubatech.savedata.PlayerData; -import kubatech.savedata.PlayerDataManager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -27,6 +31,8 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; +import codechicken.nei.NEIClientUtils; + import com.gtnewhorizons.modularui.api.ModularUITextures; import com.gtnewhorizons.modularui.api.drawable.Text; import com.gtnewhorizons.modularui.api.math.Color; @@ -36,6 +42,7 @@ import com.gtnewhorizons.modularui.api.widget.Widget; import com.gtnewhorizons.modularui.common.builder.UIInfo; import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; import com.gtnewhorizons.modularui.common.widget.DynamicTextWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; public class TeaAcceptorTile extends TileEntity @@ -45,16 +52,16 @@ public class TeaAcceptorTile extends TileEntity super(); } - private String tileOwner = null; - private PlayerData playerData = null; + private UUID tileOwner = null; + private TeaNetwork teaNetwork = null; private long averageInput = 0L; private long inAmount = 0L; private int ticker = 0; - public void setTeaOwner(String teaOwner) { - if (tileOwner == null || tileOwner.isEmpty()) { + public void setTeaOwner(UUID teaOwner) { + if (tileOwner == null) { tileOwner = teaOwner; - playerData = PlayerDataManager.getPlayer(tileOwner); + teaNetwork = TeaNetwork.getNetwork(tileOwner); markDirty(); } } @@ -62,20 +69,21 @@ public class TeaAcceptorTile extends TileEntity @Override public void readFromNBT(NBTTagCompound NBTData) { super.readFromNBT(NBTData); - tileOwner = NBTData.getString("tileOwner"); - if (!tileOwner.isEmpty()) { - playerData = PlayerDataManager.getPlayer(tileOwner); - } + try { + tileOwner = UUID.fromString(NBTData.getString("tileOwner")); + teaNetwork = TeaNetwork.getNetwork(tileOwner); + } catch (Exception ignored) {} } @Override public void writeToNBT(NBTTagCompound NBTData) { super.writeToNBT(NBTData); - NBTData.setString("tileOwner", tileOwner); + NBTData.setString("tileOwner", tileOwner.toString()); } @Override public void updateEntity() { + if (this.worldObj.isRemote) return; if (++ticker % 100 == 0) { averageInput = inAmount / 100; inAmount = 0; @@ -104,10 +112,9 @@ public class TeaAcceptorTile extends TileEntity @Override public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) { - if (playerData != null) { - playerData.teaAmount += p_70299_2_.stackSize; - playerData.markDirty(); + if (teaNetwork != null) { inAmount += p_70299_2_.stackSize; + teaNetwork.addTea(p_70299_2_.stackSize); } } @@ -128,7 +135,7 @@ public class TeaAcceptorTile extends TileEntity @Override public boolean isUseableByPlayer(EntityPlayer p_70300_1_) { - return p_70300_1_.getCommandSenderName().equals(tileOwner); + return p_70300_1_.getPersistentID().equals(tileOwner); } @Override @@ -142,6 +149,8 @@ public class TeaAcceptorTile extends TileEntity @Override public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) { + if (teaNetwork == null) return false; + if (!teaNetwork.canAdd(p_94041_2_.stackSize)) return false; return p_94041_2_.getItem() == ItemLoader.kubaitems && p_94041_2_.getItemDamage() >= minDamage && p_94041_2_.getItemDamage() <= maxDamage; } @@ -166,7 +175,7 @@ public class TeaAcceptorTile extends TileEntity ModularWindow.Builder builder = ModularWindow.builder(170, 70); builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); EntityPlayer player = buildContext.getPlayer(); - + AtomicReference teaAmount = new AtomicReference<>(BigInteger.ZERO); builder.widgets( posCenteredHorizontally( 10, @@ -174,20 +183,24 @@ public class TeaAcceptorTile extends TileEntity new Text("Tea Acceptor").format(EnumChatFormatting.BOLD) .format(EnumChatFormatting.DARK_RED))), posCenteredHorizontally(30, new DynamicTextWidget(() -> { - if (player.getCommandSenderName().equals(tileOwner)) - return new Text("[Tea]").color(Color.GREEN.normal); + if (player.getPersistentID().equals(tileOwner)) return new Text("[Tea]").color(Color.GREEN.normal); else return new Text("This is not your block").color(Color.RED.normal); })), posCenteredHorizontally( 40, - new DynamicTextWidget( + (TextWidget) new DynamicTextWidget( () -> new Text( - (playerData == null ? "ERROR" - : StringUtils.applyRainbow( - NumberFormat.getInstance().format(playerData.teaAmount), - (int) ((playerData.teaAmount / Math.max(1, averageInput * 10)) - % Integer.MAX_VALUE), - EnumChatFormatting.BOLD.toString()))).shadow())), + StringUtils.applyRainbow( + NEIClientUtils.shiftKey() ? numberFormat.format(teaAmount.get()) + : numberFormatScientific.format(teaAmount.get()), + (int) ((teaAmount.get().longValue() / Math.max(1, averageInput * 10)) + % Integer.MAX_VALUE), + EnumChatFormatting.BOLD.toString())).shadow()).setSynced(false) + .attachSyncer( + new FakeSyncWidget.BigIntegerSyncer( + () -> teaNetwork.teaAmount, + teaAmount::set), + builder)), posCenteredHorizontally( 50, new DynamicTextWidget(() -> new Text("IN: " + averageInput + "/t").color(Color.BLACK.normal))) diff --git a/src/main/java/kubatech/tileentity/TeaStorageTile.java b/src/main/java/kubatech/tileentity/TeaStorageTile.java new file mode 100644 index 0000000000..4a3837e3c6 --- /dev/null +++ b/src/main/java/kubatech/tileentity/TeaStorageTile.java @@ -0,0 +1,63 @@ +package kubatech.tileentity; + +import java.math.BigInteger; +import java.util.UUID; + +import kubatech.api.tea.TeaNetwork; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; + +public class TeaStorageTile extends TileEntity { + + public TeaStorageTile() { + super(); + } + + private UUID tileOwner = null; + private TeaNetwork teaNetwork = null; + + public void setTeaOwner(UUID teaOwner) { + if (tileOwner == null) { + tileOwner = teaOwner; + teaNetwork = TeaNetwork.getNetwork(tileOwner); + markDirty(); + teaNetwork.registerTeaStorageExtender(this); + } + } + + @Override + public void readFromNBT(NBTTagCompound NBTData) { + super.readFromNBT(NBTData); + try { + tileOwner = UUID.fromString(NBTData.getString("tileOwner")); + teaNetwork = TeaNetwork.getNetwork(tileOwner); + teaNetwork.registerTeaStorageExtender(this); + } catch (Exception ignored) {} + } + + @Override + public void writeToNBT(NBTTagCompound NBTData) { + super.writeToNBT(NBTData); + NBTData.setString("tileOwner", tileOwner.toString()); + } + + @Override + public boolean canUpdate() { + return false; + } + + public BigInteger teaExtendAmount() { + return BigInteger.valueOf(Long.MAX_VALUE); + } + + @Override + public void onChunkUnload() { + if (teaNetwork != null) teaNetwork.unregisterTeaStorageExtender(this); + } + + @Override + public void invalidate() { + if (teaNetwork != null) teaNetwork.unregisterTeaStorageExtender(this); + } +} diff --git a/src/main/resources/assets/kubatech/lang/en_US.lang b/src/main/resources/assets/kubatech/lang/en_US.lang index de090859be..43e35261be 100644 --- a/src/main/resources/assets/kubatech/lang/en_US.lang +++ b/src/main/resources/assets/kubatech/lang/en_US.lang @@ -39,6 +39,7 @@ command.tea.usage= get/set/add () #Blocks kubablock.tea_acceptor.name=§4§lTea Acceptor +kubablock.tea_storage.name=§4§lTea Storage Extender #Items kubaitem.fromcollection=This item is from @@ -118,6 +119,7 @@ achievement.teacollection.yellow_tea.desc=§6Green Tea with more grassy flavour achievement.teacollection.ultimate_tea.desc=§4§lOne Tea to drink them all #Thaumcraft +tc.research_category.KUBATECH=§4§lTEA tc.research_name.KT_UltimateTea=%s §6§lTea tc.research_text.KT_UltimateTea=§4§lPure power KT.research.ultimatetea=You have found a way to convert all this Tea into pure power creating the %s §6§lTea diff --git a/src/main/resources/assets/kubatech/textures/blocks/blank.png b/src/main/resources/assets/kubatech/textures/blocks/blank.png new file mode 100644 index 0000000000..b343d809c4 Binary files /dev/null and b/src/main/resources/assets/kubatech/textures/blocks/blank.png differ diff --git a/src/main/resources/assets/kubatech/textures/blocks/tea_acceptor.png b/src/main/resources/assets/kubatech/textures/blocks/tea_acceptor.png index 11766b0b7c..6f582fe9e7 100644 Binary files a/src/main/resources/assets/kubatech/textures/blocks/tea_acceptor.png and b/src/main/resources/assets/kubatech/textures/blocks/tea_acceptor.png differ diff --git a/src/main/resources/assets/kubatech/textures/blocks/tea_acceptor.png.mcmeta b/src/main/resources/assets/kubatech/textures/blocks/tea_acceptor.png.mcmeta deleted file mode 100644 index 60af678259..0000000000 --- a/src/main/resources/assets/kubatech/textures/blocks/tea_acceptor.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "animation":{ - "frametime":4 - } -} \ No newline at end of file diff --git a/src/main/resources/assets/kubatech/textures/blocks/tea_storage.png b/src/main/resources/assets/kubatech/textures/blocks/tea_storage.png new file mode 100644 index 0000000000..88d78cda08 Binary files /dev/null and b/src/main/resources/assets/kubatech/textures/blocks/tea_storage.png differ diff --git a/src/main/resources/assets/kubatech/textures/gui/green_tea.png b/src/main/resources/assets/kubatech/textures/gui/green_tea.png new file mode 100644 index 0000000000..7b8f46029d Binary files /dev/null and b/src/main/resources/assets/kubatech/textures/gui/green_tea.png differ -- cgit