diff options
Diffstat (limited to 'src/main/java/kubatech/loaders')
14 files changed, 740 insertions, 33 deletions
diff --git a/src/main/java/kubatech/loaders/BlockLoader.java b/src/main/java/kubatech/loaders/BlockLoader.java new file mode 100644 index 0000000000..55e97badc6 --- /dev/null +++ b/src/main/java/kubatech/loaders/BlockLoader.java @@ -0,0 +1,24 @@ +package kubatech.loaders; + +import cpw.mods.fml.common.registry.GameRegistry; +import kubatech.api.enums.ItemList; +import kubatech.loaders.block.KubaBlock; +import kubatech.loaders.block.KubaItemBlock; +import kubatech.loaders.block.blocks.TeaAcceptor; +import kubatech.tileentity.TeaAcceptorTile; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemBlock; + +public class BlockLoader { + + public static final KubaBlock kubaBlock = new KubaBlock(Material.anvil); + public static final ItemBlock kubaItemBlock = new KubaItemBlock(kubaBlock); + + public static void registerBlocks() { + GameRegistry.registerTileEntity(TeaAcceptorTile.class, "KT_TeaAcceptor"); + GameRegistry.registerBlock(kubaBlock, null, "kubablocks"); + GameRegistry.registerItem(kubaItemBlock, "kubablocks"); + + ItemList.TeaAcceptor.set(kubaBlock.registerProxyBlock(new TeaAcceptor())); + } +} diff --git a/src/main/java/kubatech/loaders/ItemLoader.java b/src/main/java/kubatech/loaders/ItemLoader.java index 7df248da60..8db9c9f15f 100644 --- a/src/main/java/kubatech/loaders/ItemLoader.java +++ b/src/main/java/kubatech/loaders/ItemLoader.java @@ -22,6 +22,7 @@ package kubatech.loaders; import static kubatech.api.enums.ItemList.*; import cpw.mods.fml.common.registry.GameRegistry; +import kubatech.loaders.item.ItemProxy; import kubatech.loaders.item.KubaItems; import kubatech.loaders.item.items.Tea; import kubatech.loaders.item.items.TeaCollection; @@ -31,7 +32,7 @@ import kubatech.loaders.item.items.TeaUltimate; public class ItemLoader { public static final KubaItems kubaitems = new KubaItems(); - public static void RegisterItems() { + public static void registerItems() { GameRegistry.registerItem(kubaitems, "kubaitems"); // DON'T EVER CHANGE ORDER IN HERE, ADD NEW ITEMS ON BOTTOM @@ -75,5 +76,8 @@ public class ItemLoader { FermentedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("fermented_tea_leaf"))); BruisedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("bruised_tea_leaf"))); PartiallyOxidizedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("partially_oxidized_tea_leaf"))); + + TeaAcceptorResearchNote.set( + kubaitems.registerProxyItem(new ItemProxy("tea_acceptor_research_note", "research_note"))); } } diff --git a/src/main/java/kubatech/loaders/RecipeLoader.java b/src/main/java/kubatech/loaders/RecipeLoader.java index 2b7fe77719..7bbaaf17e7 100644 --- a/src/main/java/kubatech/loaders/RecipeLoader.java +++ b/src/main/java/kubatech/loaders/RecipeLoader.java @@ -21,6 +21,7 @@ package kubatech.loaders; import static kubatech.api.enums.ItemList.*; +import com.dreammaster.gthandler.CustomItemList; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.GT_Values; import gregtech.api.enums.Materials; @@ -270,5 +271,24 @@ public class RecipeLoader { GameRegistry.addSmelting(WhiteTeaLeaf.get(1), WhiteTea.get(1), 10); GameRegistry.addSmelting(YellowTeaLeaf.get(1), YellowTea.get(1), 10); } + if (LoaderReference.Avaritia && LoaderReference.GTNHCoreMod) { + GT_Values.RA.addAssemblylineRecipe( + TeaAcceptorResearchNote.get(1), + 10000, + new Object[] { + LegendaryUltimateTea.get(0), + GameRegistry.findItemStack("Avaritia", "Neutronium_Compressor", 1), + gregtech.api.enums.ItemList.Quantum_Tank_EV.get(1), + CustomItemList.FluidExtractorUHV.get(10), + new Object[] {OrePrefixes.circuit.get(Materials.SuperconductorUHV), 4L}, + new Object[] {OrePrefixes.circuit.get(Materials.SuperconductorUHV), 4L}, + new Object[] {OrePrefixes.circuit.get(Materials.SuperconductorUHV), 4L}, + new Object[] {OrePrefixes.circuit.get(Materials.SuperconductorUHV), 4L}, + }, + new FluidStack[] {FluidRegistry.getFluidStack("molten.indalloy140", 28800)}, + TeaAcceptor.get(1), + 6000, + 2_048_000); + } } } diff --git a/src/main/java/kubatech/loaders/TCLoader.java b/src/main/java/kubatech/loaders/TCLoader.java new file mode 100644 index 0000000000..3c4980f251 --- /dev/null +++ b/src/main/java/kubatech/loaders/TCLoader.java @@ -0,0 +1,125 @@ +package kubatech.loaders; + +import cpw.mods.fml.common.registry.GameRegistry; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.stream.Collectors; +import kubatech.api.LoaderReference; +import kubatech.api.enums.ItemList; +import kubatech.api.utils.ItemID; +import kubatech.loaders.item.items.TeaUltimate; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import thaumcraft.api.ThaumcraftApi; +import thaumcraft.api.ThaumcraftApiHelper; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.crafting.InfusionRecipe; +import thaumcraft.api.research.ResearchCategories; +import thaumcraft.api.research.ResearchItem; +import thaumcraft.api.research.ResearchPage; + +public class TCLoader { + private static boolean lateLoaded = false; + + public static void load() {} + + public static void lateLoad() { + if (lateLoaded) return; + lateLoaded = true; + if (!LoaderReference.GTNHCoreMod || !LoaderReference.DraconicEvolution) return; + + final ItemStack[] components = new ItemStack[] { + // ItemList.LegendaryBlackTea.get(1), + // ItemList.LegendaryButterflyTea.get(1), + // ItemList.LegendaryEarlGrayTea.get(1), + ItemList.LegendaryGreenTea.get(1), // EIG + // ItemList.LegendaryLemonTea.get(1), + // ItemList.LegendaryMilkTea.get(1), + // ItemList.LegendaryOolongTea.get(1), + ItemList.LegendaryPeppermintTea.get(1), // HTGR + ItemList.LegendaryPuerhTea.get(1), // EEC + // ItemList.LegendaryRedTea.get(1), + // ItemList.LegendaryWhiteTea.get(1), + ItemList.LegendaryYellowTea.get(1), // IApiary + ItemList.BlackTea.get(1), + ItemList.EarlGrayTea.get(1), + ItemList.GreenTea.get(1), + ItemList.LemonTea.get(1), + ItemList.MilkTea.get(1), + ItemList.OolongTea.get(1), + ItemList.PeppermintTea.get(1), + ItemList.PuerhTea.get(1), + ItemList.WhiteTea.get(1), + ItemList.YellowTea.get(1) + }; + + final HashSet<ItemID> componentsHashed = Arrays.stream(components) + .map(stack -> ItemID.create_NoCopy(stack, true, false, true)) + .collect(Collectors.toCollection(HashSet::new)); + + InfusionRecipe ultimateTeaRecipe; + //noinspection unchecked + ThaumcraftApi.getCraftingRecipes() + .add( + ultimateTeaRecipe = + new InfusionRecipe( + "KT_UltimateTea", + ItemList.LegendaryUltimateTea.get(1), + 10, + new AspectList() + .add(Aspect.MAGIC, 100) + .add(Aspect.HEAL, 100) + .add(Aspect.PLANT, 100) + .add(Aspect.EXCHANGE, 100), + GameRegistry.findItemStack("DraconicEvolution", "dezilsMarshmallow", 1), + components) { + @Override + public boolean matches( + ArrayList<ItemStack> input, + ItemStack central, + World world, + EntityPlayer player) { + if (!central.isItemEqual(getRecipeInput())) return false; + if (!ThaumcraftApiHelper.isResearchComplete( + player.getCommandSenderName(), this.research)) return false; + if (componentsHashed.size() > input.size()) return false; + HashSet<ItemID> hashedInputs = input.stream() + .map(stack -> ItemID.create_NoCopy(stack, true, false, true)) + .collect(Collectors.toCollection(HashSet::new)); + return hashedInputs.containsAll(componentsHashed); + } + }); + ResearchItem research = + new ResearchItem( + "KT_UltimateTea", + "NEWHORIZONS", + new AspectList() + .add(Aspect.MAGIC, 1) + .add(Aspect.HEAL, 1) + .add(Aspect.PLANT, 1) + .add(Aspect.EXCHANGE, 1), + -2, + 4, + 2, + ItemList.LegendaryUltimateTea.get(1)) { + @Override + public String getName() { + return TeaUltimate.getUltimateTeaDisplayName(super.getName()); + } + }; + research.setPages( + new ResearchPage("KT.research.ultimatetea") { + @Override + public String getTranslatedText() { + return TeaUltimate.getUltimateTeaDisplayName(super.getTranslatedText()); + } + }, + new ResearchPage(ultimateTeaRecipe)); + research.setParents("INFUSION", "DEZILSMARSHMALLOW"); + ThaumcraftApi.addWarpToResearch("KT_UltimateTea", 20); + ResearchCategories.addResearch(research); + } +} diff --git a/src/main/java/kubatech/loaders/block/BlockProxy.java b/src/main/java/kubatech/loaders/block/BlockProxy.java new file mode 100644 index 0000000000..1c06fd50d9 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/BlockProxy.java @@ -0,0 +1,76 @@ +package kubatech.loaders.block; + +import static kubatech.loaders.block.KubaBlock.defaultTileEntityUI; + +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; +import java.util.List; +import kubatech.Tags; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +public class BlockProxy { + + private final String unlocalizedName; + private final String texturepath; + private IIcon icon; + + public BlockProxy(String unlocalizedName, String texture) { + this.unlocalizedName = "kubablock." + unlocalizedName; + texturepath = Tags.MODID + ":" + texture; + } + + public void itemInit(int ID) {} + + public boolean onActivated(World world, int x, int y, int z, EntityPlayer player) { + if (this instanceof IProxyTileEntityProvider) { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof ITileWithModularUI) { + if (world.isRemote) return true; + if (te instanceof KubaBlock.IModularUIProvider) + ((KubaBlock.IModularUIProvider) te).getUI().open(player, world, x, y, z); + else defaultTileEntityUI.open(player, world, x, y, z); + return true; + } + } + return false; + } + + public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {} + + public void registerIcon(IIconRegister iconRegister) { + icon = iconRegister.registerIcon(texturepath); + } + + public IIcon getIcon(int side) { + return icon; + } + + public String getUnlocalizedName() { + return this.unlocalizedName; + } + + public String getDisplayName(ItemStack stack) { + return StatCollector.translateToLocal(this.unlocalizedName + ".name").trim(); + } + + public void addInformation(ItemStack stack, EntityPlayer entity, List<String> tooltipList, boolean showDebugInfo) {} + + public float getHardness() { + return 10.f; + } + + public Material getMaterial() { + return Material.anvil; + } + + public float getResistance() { + return 5.f; + } +} diff --git a/src/main/java/kubatech/loaders/block/IProxyTileEntityProvider.java b/src/main/java/kubatech/loaders/block/IProxyTileEntityProvider.java new file mode 100644 index 0000000000..b2a94c09b7 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/IProxyTileEntityProvider.java @@ -0,0 +1,8 @@ +package kubatech.loaders.block; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public interface IProxyTileEntityProvider { + TileEntity createTileEntity(World world); +} diff --git a/src/main/java/kubatech/loaders/block/KubaBlock.java b/src/main/java/kubatech/loaders/block/KubaBlock.java new file mode 100644 index 0000000000..dd34ce5883 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/KubaBlock.java @@ -0,0 +1,187 @@ +package kubatech.loaders.block; + +import static kubatech.kubatech.KT; + +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; +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.lang.ref.WeakReference; +import java.util.HashMap; +import java.util.List; +import java.util.function.Function; +import kubatech.loaders.BlockLoader; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class KubaBlock extends Block { + + public static final Function<IModularUIContainerCreator, UIInfo<?, ?>> TileEntityUIFactory = + containerConstructor -> UIBuilder.of() + .container((player, world, x, y, z) -> { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof ITileWithModularUI) { + UIBuildContext buildContext = new UIBuildContext(player); + ModularWindow window = ((ITileWithModularUI) te).createWindow(buildContext); + return containerConstructor.createUIContainer( + new ModularUIContext(buildContext, te::markDirty), window); + } + return null; + }) + .gui(((player, world, x, y, z) -> { + if (!world.isRemote) return null; + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof ITileWithModularUI) { + UIBuildContext buildContext = new UIBuildContext(player); + ModularWindow window = ((ITileWithModularUI) te).createWindow(buildContext); + return new ModularGui(containerConstructor.createUIContainer( + new ModularUIContext(buildContext, null), window)); + } + return null; + })) + .build(); + + public static final UIInfo<?, ?> defaultTileEntityUI = TileEntityUIFactory.apply(ModularUIContainer::new); + + static final HashMap<Integer, BlockProxy> blocks = new HashMap<>(); + private static int idCounter = 0; + + public KubaBlock(Material p_i45394_1_) { + super(p_i45394_1_); + setCreativeTab(KT); + } + + public ItemStack registerProxyBlock(BlockProxy block) { + blocks.put(idCounter, block); + block.itemInit(idCounter); + return new ItemStack(BlockLoader.kubaItemBlock, 1, idCounter++); + } + + private BlockProxy getBlock(int id) { + return blocks.get(id); + } + + WeakReference<World> lastAccessor = null; + int X, Y, Z; + + public void setLastBlockAccess(World accessor, int x, int y, int z) { + lastAccessor = new WeakReference<>(accessor); + X = x; + Y = y; + Z = z; + } + + @Override + public boolean hasTileEntity(int meta) { + return getBlock(meta) instanceof IProxyTileEntityProvider; + } + + @SuppressWarnings("unchecked") + @Override + public void getSubBlocks(Item p_149666_1_, CreativeTabs p_149666_2_, List p_149666_3_) { + for (int i = 0; i < blocks.size(); i++) p_149666_3_.add(new ItemStack(p_149666_1_, 1, i)); + } + + @Override + public void registerBlockIcons(IIconRegister p_149651_1_) { + blocks.values().forEach(b -> b.registerIcon(p_149651_1_)); + } + + @Override + public IIcon getIcon(int p_149691_1_, int p_149691_2_) { + return blocks.get(p_149691_2_).getIcon(p_149691_1_); + } + + @Override + public String getLocalizedName() { + return "KUBABLOCK"; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + if (!hasTileEntity(metadata)) return null; + return ((IProxyTileEntityProvider) getBlock(metadata)).createTileEntity(world); + } + + @Override + public boolean onBlockActivated( + World p_149727_1_, + int p_149727_2_, + int p_149727_3_, + int p_149727_4_, + EntityPlayer p_149727_5_, + int p_149727_6_, + float p_149727_7_, + float p_149727_8_, + float p_149727_9_) { + return getBlock(p_149727_1_.getBlockMetadata(p_149727_2_, p_149727_3_, p_149727_4_)) + .onActivated(p_149727_1_, p_149727_2_, p_149727_3_, p_149727_4_, p_149727_5_); + } + + @Override + public void onBlockPlacedBy( + World p_149689_1_, + int p_149689_2_, + int p_149689_3_, + int p_149689_4_, + EntityLivingBase p_149689_5_, + ItemStack p_149689_6_) { + getBlock(p_149689_6_.getItemDamage()) + .onBlockPlaced(p_149689_1_, p_149689_2_, p_149689_3_, p_149689_4_, p_149689_5_, p_149689_6_); + } + + @Override + public float getBlockHardness(World p_149712_1_, int p_149712_2_, int p_149712_3_, int p_149712_4_) { + return getBlock(p_149712_1_.getBlockMetadata(p_149712_2_, p_149712_3_, p_149712_4_)) + .getHardness(); + } + + @Override + public Material getMaterial() { + if (lastAccessor == null) return super.getMaterial(); + World world = lastAccessor.get(); + if (world == null) { + lastAccessor = null; + return super.getMaterial(); + } + if (world.getBlock(X, Y, Z) != this) return super.getMaterial(); + return getBlock(world.getBlockMetadata(X, Y, Z)).getMaterial(); + } + + @Override + public float getExplosionResistance( + Entity par1Entity, + World world, + int x, + int y, + int z, + double explosionX, + double explosionY, + double explosionZ) { + return getBlock(world.getBlockMetadata(x, y, z)).getResistance(); + } + + @FunctionalInterface + public interface IModularUIContainerCreator { + ModularUIContainer createUIContainer(ModularUIContext context, ModularWindow mainWindow); + } + + @FunctionalInterface + public interface IModularUIProvider { + UIInfo<?, ?> getUI(); + } +} diff --git a/src/main/java/kubatech/loaders/block/KubaItemBlock.java b/src/main/java/kubatech/loaders/block/KubaItemBlock.java new file mode 100644 index 0000000000..eb5197d1bf --- /dev/null +++ b/src/main/java/kubatech/loaders/block/KubaItemBlock.java @@ -0,0 +1,37 @@ +package kubatech.loaders.block; + +import java.util.List; +import kubatech.kubatech; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class KubaItemBlock extends ItemBlock { + public KubaItemBlock(Block p_i45328_1_) { + super(p_i45328_1_); + setHasSubtypes(true); + } + + @Override + public void registerIcons(IIconRegister p_94581_1_) { + super.registerIcons(p_94581_1_); + } + + @Override + public String getUnlocalizedName(ItemStack p_77667_1_) { + return KubaBlock.blocks.get(p_77667_1_.getItemDamage()).getUnlocalizedName(); + } + + @Override + public String getItemStackDisplayName(ItemStack p_77653_1_) { + return KubaBlock.blocks.get(p_77653_1_.getItemDamage()).getDisplayName(p_77653_1_); + } + + @SuppressWarnings("unchecked") + @Override + 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_); + } +} diff --git a/src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java b/src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java new file mode 100644 index 0000000000..97b41efdc0 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/blocks/TeaAcceptor.java @@ -0,0 +1,42 @@ +package kubatech.loaders.block.blocks; + +import java.util.List; +import kubatech.loaders.block.BlockProxy; +import kubatech.loaders.block.IProxyTileEntityProvider; +import kubatech.tileentity.TeaAcceptorTile; +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.world.World; + +public class TeaAcceptor extends BlockProxy implements IProxyTileEntityProvider { + + public TeaAcceptor() { + super("tea_acceptor", "tea_acceptor"); + } + + @Override + public TileEntity createTileEntity(World world) { + return new TeaAcceptorTile(); + } + + @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; + ((TeaAcceptorTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getCommandSenderName()); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer entity, List<String> tooltipList, boolean showDebugInfo) { + tooltipList.add("Accepts Tea items and adds them to your network"); + tooltipList.add("Can accept up to 10 stacks per tick"); + } + + @Override + public float getResistance() { + return 999999999999.f; + } +} 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/TeaUltima |
