/* * spotless:off * KubaTech - Gregtech Addon * Copyright (C) 2022 - 2024 kuba6000 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . * spotless:on */ 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 net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import com.gtnewhorizons.modularui.api.ModularUITextures; import com.gtnewhorizons.modularui.api.drawable.IDrawable; import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; import com.gtnewhorizons.modularui.api.drawable.Text; import com.gtnewhorizons.modularui.api.math.Color; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.api.widget.Widget; import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.DynamicTextWidget; import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; import com.gtnewhorizons.modularui.common.widget.TabButton; import com.gtnewhorizons.modularui.common.widget.TabContainer; import com.gtnewhorizons.modularui.common.widget.TextWidget; import codechicken.nei.NEIClientUtils; 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; public class ItemTeaUltimate extends ItemTeaCollection implements IItemProxyGUI { public ItemTeaUltimate() { super("ultimate_tea"); } private static String name = ""; private static long timeCounter = 0; private static int colorCounter = 0; public static String getUltimateTeaDisplayName(String displayName) { long current = System.currentTimeMillis(); if (current - timeCounter > 100) { timeCounter = current; name = StringUtils.applyRainbow( "ULTIMATE", colorCounter++, EnumChatFormatting.BOLD.toString() + EnumChatFormatting.OBFUSCATED); } return String.format(displayName, name + EnumChatFormatting.RESET); } @Override public String getDisplayName(ItemStack stack) { if (!ModUtils.isClientSided || Minecraft.getMinecraft().thePlayer == null) return super.getDisplayName(stack); if (checkTeaOwner(stack, Minecraft.getMinecraft().thePlayer.getCommandSenderName())) { return getUltimateTeaDisplayName(super.getDisplayName(stack)); } return EnumChatFormatting.GOLD + "" + EnumChatFormatting.BOLD + "" + EnumChatFormatting.ITALIC + "???????"; } @Override public ModularWindow createWindow(ItemStack stack, EntityPlayer player) { ModularWindow.Builder builder = ModularWindow.builder(200, 150); builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); 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(28, 32) .addTabButton( new TabButton(0) .setBackground(false, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0, 1f, 0.5f), tab1) .setBackground(true, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0.5f, 1f, 1f), tab1) .setPos(0, -28)) .addTabButton( new TabButton(1) .setBackground(false, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0, 1f, 0.5f), tab2) .setBackground(true, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0.5f, 1f, 1f), tab2) .setPos(28, -28)) .addTabButton( new TabButton(2) .setBackground(false, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0, 1f, 0.5f), tab3) .setBackground(true, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0.5f, 1f, 1f), tab3) .setPos(56, -28)) .addPage( new MultiChildWidget().addChild( new TextWidget( new Text("STATUS").format(EnumChatFormatting.BOLD) .format(EnumChatFormatting.GOLD) .shadow()).setPos(10, 5)) .addChild( new DynamicTextWidget( () -> new Text( "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( new TextWidget( new Text("EXCHANGE").format(EnumChatFormatting.BOLD) .format(EnumChatFormatting.GOLD) .shadow()).setPos(10, 5)) .addChild(new ButtonWidget().setOnClick((Widget.ClickData clickData, Widget widget) -> { if (!(player instanceof EntityPlayerMP)) return; if (!teaNetwork.canAfford(50_000, true)) return; if (player.inventory.addItemStackToInventory(ItemList.TeaAcceptorResearchNote.get(1))) return; player.entityDropItem(ItemList.TeaAcceptorResearchNote.get(1), 0.5f); }) .setBackground(new ItemDrawable().setItem(ItemList.TeaAcceptorResearchNote.get(1))) .addTooltip("Tea Acceptor Research Note") .addTooltip( new Text( "Cost: " + NumberFormat.getInstance() .format(50_000) + " Tea").color(Color.GRAY.normal)) .setPos(20, 20))) .addPage( new MultiChildWidget().addChild( new TextWidget( new Text("BENEFITS").format(EnumChatFormatting.BOLD) .format(EnumChatFormatting.GOLD) .shadow()).setPos(10, 5)) /* * .addChild(new ButtonWidget() .setOnClick((Widget.ClickData clickData, Widget widget) -> { if * (!(player instanceof EntityPlayerMP)) return; if (playerData == null) return; * playerData.autoRegen = !playerData.autoRegen; playerData.markDirty(); }) .setBackground(new * ItemDrawable().setItem(new ItemStack(Items.potionitem, 1, 8193))) * .addTooltip("Regeneration I") .addTooltip("For 1 minute") .addTooltip(new Text("Cost: " + * NumberFormat.getInstance().format(75_000) + " Tea") .color(Color.GRAY.normal)) // * .addTooltip( //Find a way to run that on server, or different approach // new * Text("Autobuy: " + (playerData == null ? "ERROR" : playerData.autoRegen)) // * .color(Color.GREY.normal)) .setPos(20, 20)) */ )); return builder.build(); } @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer entity) { if (world.isRemote) return stack; if (!(entity instanceof EntityPlayerMP)) return stack; if (!checkTeaOwner(stack, entity.getPersistentID())) return stack; openHeldItemGUI(entity); return stack; } @Override public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) { if (world.isRemote) return; if (!(entity instanceof EntityPlayerMP)) return; super.onUpdate(stack, world, entity, slot, isCurrentItem); 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; } } */ } } }