aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kubatech/loaders/item
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/kubatech/loaders/item')
-rw-r--r--src/main/java/kubatech/loaders/item/IItemProxyGUI.java9
-rw-r--r--src/main/java/kubatech/loaders/item/ItemProxy.java31
-rw-r--r--src/main/java/kubatech/loaders/item/KubaItems.java6
-rw-r--r--src/main/java/kubatech/loaders/item/items/TeaCollection.java42
-rw-r--r--src/main/java/kubatech/loaders/item/items/TeaUltimate.java160
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;
+ }
+ }
+ }
+ }
}