diff options
Diffstat (limited to 'src/main/java/kubatech/loaders/item')
5 files changed, 216 insertions, 32 deletions
diff --git a/src/main/java/kubatech/loaders/item/IItemProxyGUI.java b/src/main/java/kubatech/loaders/item/IItemProxyGUI.java new file mode 100644 index 0000000000..40020c81e9 --- /dev/null +++ b/src/main/java/kubatech/loaders/item/IItemProxyGUI.java @@ -0,0 +1,9 @@ +package kubatech.loaders.item; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public interface IItemProxyGUI { + ModularWindow createWindow(ItemStack stack, EntityPlayer player); +} diff --git a/src/main/java/kubatech/loaders/item/ItemProxy.java b/src/main/java/kubatech/loaders/item/ItemProxy.java index 03ea390f74..6c2ac6f7ea 100644 --- a/src/main/java/kubatech/loaders/item/ItemProxy.java +++ b/src/main/java/kubatech/loaders/item/ItemProxy.java @@ -19,6 +19,13 @@ package kubatech.loaders.item; +import com.gtnewhorizons.modularui.api.screen.ModularUIContext; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.builder.UIBuilder; +import com.gtnewhorizons.modularui.common.builder.UIInfo; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularGui; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; import java.util.List; import kubatech.Tags; import net.minecraft.client.renderer.texture.IIconRegister; @@ -31,6 +38,25 @@ import net.minecraft.util.StatCollector; import net.minecraft.world.World; public class ItemProxy { + private static final UIInfo<?, ?> HeldItemUIInfo = UIBuilder.of() + .container((player, w, x, y, z) -> { + ItemStack stack = player.getHeldItem(); + ItemProxy proxy = KubaItems.getItemProxy(stack); + if (!(proxy instanceof IItemProxyGUI)) return null; + UIBuildContext context = new UIBuildContext(player); + ModularWindow window = ((IItemProxyGUI) proxy).createWindow(stack, player); + return new ModularUIContainer( + new ModularUIContext(context, () -> player.inventoryContainer.detectAndSendChanges()), window); + }) + .gui((player, w, x, y, z) -> { + ItemStack stack = player.getHeldItem(); + ItemProxy proxy = KubaItems.getItemProxy(stack); + if (!(proxy instanceof IItemProxyGUI)) return null; + UIBuildContext context = new UIBuildContext(player); + ModularWindow window = ((IItemProxyGUI) proxy).createWindow(stack, player); + return new ModularGui(new ModularUIContainer(new ModularUIContext(context, null), window)); + }) + .build(); private final String unlocalizedName; private final String texturepath; private IIcon icon; @@ -80,4 +106,9 @@ public class ItemProxy { public int getMaxItemUseDuration() { return 0; } + + public static void openHeldItemGUI(EntityPlayer player) { + ItemStack stack = player.getHeldItem(); + if (KubaItems.getItemProxy(stack) instanceof IItemProxyGUI) HeldItemUIInfo.open(player); + } } diff --git a/src/main/java/kubatech/loaders/item/KubaItems.java b/src/main/java/kubatech/loaders/item/KubaItems.java index b0f8723cde..205622a30b 100644 --- a/src/main/java/kubatech/loaders/item/KubaItems.java +++ b/src/main/java/kubatech/loaders/item/KubaItems.java @@ -25,6 +25,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.HashMap; import java.util.List; +import kubatech.loaders.ItemLoader; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; @@ -56,6 +57,11 @@ public class KubaItems extends Item { return items.get(stack.getItemDamage()); } + public static ItemProxy getItemProxy(ItemStack stack) { + if (!(stack.getItem() instanceof KubaItems)) return null; + return ItemLoader.kubaitems.getItem(stack); + } + private ItemProxy getItem(int damage) { return items.get(damage); } diff --git a/src/main/java/kubatech/loaders/item/items/TeaCollection.java b/src/main/java/kubatech/loaders/item/items/TeaCollection.java index 85b74421b6..c0c20aa244 100644 --- a/src/main/java/kubatech/loaders/item/items/TeaCollection.java +++ b/src/main/java/kubatech/loaders/item/items/TeaCollection.java @@ -32,6 +32,7 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.EnumAction; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagString; import net.minecraft.stats.Achievement; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; @@ -66,6 +67,21 @@ public class TeaCollection extends ItemProxy { {1, 3} }; + boolean checkTeaOwner(ItemStack stack, String username) { + NBTTagCompound tag = stack.stackTagCompound; + if (tag == null || !stack.stackTagCompound.hasKey("TeaOwner")) return true; + return stack.stackTagCompound.getString("TeaOwner").equals(username); + } + + private boolean checkOrSetTeaOwner(ItemStack stack, String username) { + NBTTagCompound tag = stack.stackTagCompound; + if (tag == null || !stack.stackTagCompound.hasKey("TeaOwner")) { + stack.setTagInfo("TeaOwner", new NBTTagString(username)); + return true; + } + return stack.stackTagCompound.getString("TeaOwner").equals(username); + } + @Override public void ItemInit(int index) { super.ItemInit(index); @@ -87,9 +103,7 @@ public class TeaCollection extends ItemProxy { @Override public void addInformation(ItemStack stack, EntityPlayer entity, List<String> tooltipList, boolean showDebugInfo) { - if (stack.stackTagCompound != null - && stack.stackTagCompound.hasKey("TeaOwner") - && !stack.stackTagCompound.getString("TeaOwner").equals(entity.getCommandSenderName())) { + if (!checkTeaOwner(stack, entity.getCommandSenderName())) { tooltipList.add(EnumChatFormatting.GRAY + "" + EnumChatFormatting.BOLD + "" + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("kubaitem.notyours")); return; @@ -105,20 +119,16 @@ public class TeaCollection extends ItemProxy { } @Override - public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) { - if (p_77659_1_.stackTagCompound == null || !p_77659_1_.stackTagCompound.hasKey("TeaOwner")) return p_77659_1_; - if (!p_77659_1_.stackTagCompound.getString("TeaOwner").equals(p_77659_3_.getCommandSenderName())) - return p_77659_1_; - p_77659_3_.setItemInUse(p_77659_1_, 32); - return p_77659_1_; + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer entity) { + if (!checkTeaOwner(stack, entity.getCommandSenderName())) return stack; + entity.setItemInUse(stack, 32); + return stack; } @Override public ItemStack onEaten(ItemStack stack, World world, EntityPlayer entity) { if (world.isRemote) return stack; if (!(entity instanceof EntityPlayerMP)) return stack; - if (stack.stackTagCompound == null || !stack.stackTagCompound.hasKey("TeaOwner")) return stack; - if (!stack.stackTagCompound.getString("TeaOwner").equals(entity.getCommandSenderName())) return stack; entity.addChatComponentMessage(new ChatComponentText( EnumChatFormatting.GREEN + StatCollector.translateToLocal("kubaitem.teacollection.mmm"))); entity.triggerAchievement(achievement); @@ -133,11 +143,7 @@ public class TeaCollection extends ItemProxy { @Override public String getDisplayName(ItemStack stack) { if (!ModUtils.isClientSided) return super.getDisplayName(stack); - if (stack.stackTagCompound == null - || (!stack.stackTagCompound.hasKey("TeaOwner") - || stack.stackTagCompound - .getString("TeaOwner") - .equals(Minecraft.getMinecraft().thePlayer.getCommandSenderName()))) + if (checkTeaOwner(stack, Minecraft.getMinecraft().thePlayer.getCommandSenderName())) return super.getDisplayName(stack); return EnumChatFormatting.GOLD + "" + EnumChatFormatting.BOLD + "" + EnumChatFormatting.ITALIC + "???????"; } @@ -146,11 +152,9 @@ 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()); NBTTagCompound tag = stack.stackTagCompound; - if (tag == null) tag = stack.stackTagCompound = new NBTTagCompound(); if (tag.hasKey("display")) tag.removeTag("display"); - if (tag.hasKey("TeaOwner")) return; - tag.setString("TeaOwner", entity.getCommandSenderName()); } private static class TeaPage extends AchievementPage { diff --git a/src/main/java/kubatech/loaders/item/items/TeaUltimate.java b/src/main/java/kubatech/loaders/item/items/TeaUltimate.java index 1119de63d3..8a1d11a41a 100644 --- a/src/main/java/kubatech/loaders/item/items/TeaUltimate.java +++ b/src/main/java/kubatech/loaders/item/items/TeaUltimate.java @@ -19,13 +19,34 @@ package kubatech.loaders.item.items; +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.*; +import java.text.NumberFormat; +import kubatech.api.enums.ItemList; 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; +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.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; -public class TeaUltimate extends TeaCollection { +public class TeaUltimate extends TeaCollection implements IItemProxyGUI { public TeaUltimate() { super("ultimate_tea"); } @@ -34,22 +55,135 @@ public class TeaUltimate extends TeaCollection { 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) return super.getDisplayName(stack); - if (stack.stackTagCompound == null - || (!stack.stackTagCompound.hasKey("TeaOwner") - || stack.stackTagCompound - .getString("TeaOwner") - .equals(Minecraft.getMinecraft().thePlayer.getCommandSenderName()))) { - long current = System.currentTimeMillis(); - if (current - timeCounter > 100) { - timeCounter = current; - name = StringUtils.applyRainbow( - "ULTIMATE", colorCounter++, EnumChatFormatting.BOLD.toString() + EnumChatFormatting.OBFUSCATED); - } - return String.format(super.getDisplayName(stack), name + EnumChatFormatting.RESET); + 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 PlayerData playerData = PlayerDataManager.getPlayer(player.getCommandSenderName()); + 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); + 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: " + + (playerData == null + ? "ERROR" + : NumberFormat.getInstance() + .format(playerData.teaAmount))) + .color(Color.GREEN.normal)) + .setPos(20, 20))) + .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 (playerData == null || playerData.teaAmount < 50_000L) return; + playerData.teaAmount -= 50_000L; + playerData.markDirty(); + 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.getCommandSenderName())) 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.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; + } + } + } + } } |