diff options
Diffstat (limited to 'src/Java/gtPlusPlus/core')
-rw-r--r-- | src/Java/gtPlusPlus/core/item/ModItems.java | 9 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/item/general/books/ItemBaseBook.java | 79 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/lib/CORE.java | 4 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/util/Utils.java | 60 | ||||
-rw-r--r-- | src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java | 10 |
5 files changed, 159 insertions, 3 deletions
diff --git a/src/Java/gtPlusPlus/core/item/ModItems.java b/src/Java/gtPlusPlus/core/item/ModItems.java index 3cea650970..0f25481831 100644 --- a/src/Java/gtPlusPlus/core/item/ModItems.java +++ b/src/Java/gtPlusPlus/core/item/ModItems.java @@ -24,6 +24,7 @@ import gtPlusPlus.core.item.bauble.ModularBauble; import gtPlusPlus.core.item.chemistry.CoalTar; import gtPlusPlus.core.item.effects.RarityUncommon; import gtPlusPlus.core.item.general.*; +import gtPlusPlus.core.item.general.books.ItemBaseBook; import gtPlusPlus.core.item.general.chassis.*; import gtPlusPlus.core.item.general.throwables.ItemHydrofluoricAcidPotion; import gtPlusPlus.core.item.general.throwables.ItemSulfuricAcidPotion; @@ -43,6 +44,7 @@ import gtPlusPlus.core.util.debug.DEBUG_INIT; import gtPlusPlus.core.util.fluid.FluidUtils; import gtPlusPlus.core.util.item.ItemUtils; import gtPlusPlus.core.util.materials.MaterialUtils; +import net.minecraft.block.Block; import net.minecraft.item.*; import net.minecraft.item.Item.ToolMaterial; import net.minecraft.util.EnumChatFormatting; @@ -50,6 +52,7 @@ import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.fluids.Fluid; public final class ModItems { + public static ToolMaterial STABALLOY = EnumHelper.addToolMaterial("Staballoy", 3, 2500, 7, 1.0F, 18); public static Item ZZZ_Empty; @@ -236,9 +239,7 @@ public final class ModItems { public static Item itemHydrofluoricPotion; public static Item itemModularBauble; - - - + public static Item itemCustomBook; public static final void init(){ @@ -306,6 +307,8 @@ public final class ModItems { itemHydrofluoricPotion = new ItemHydrofluoricAcidPotion("itemHydrofluoricPotion", "Thowable Vial of Hydrofluoric Acid", "They won't see this coming, nor anything after!").setTextureName(CORE.MODID + ":itemPotion"); //Start meta Item Generation ItemsFoods.load(); + + itemCustomBook = new ItemBaseBook(); try{ diff --git a/src/Java/gtPlusPlus/core/item/general/books/ItemBaseBook.java b/src/Java/gtPlusPlus/core/item/general/books/ItemBaseBook.java new file mode 100644 index 0000000000..c7bf2e821e --- /dev/null +++ b/src/Java/gtPlusPlus/core/item/general/books/ItemBaseBook.java @@ -0,0 +1,79 @@ +package gtPlusPlus.core.item.general.books; + +import java.util.List; + +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.nbt.NBTUtils; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemWritableBook; + +public class ItemBaseBook extends ItemWritableBook{ + + public ItemBaseBook(){ + this.setCreativeTab(AddToCreativeTab.tabMisc); + this.setMaxStackSize(1); + this.setNoRepair(); + this.setMaxDamage(Short.MAX_VALUE); + this.setTextureName(CORE.MODID+":"+"itemBook"); + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < Utils.getBookCount(); i ++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public String getItemStackDisplayName(final ItemStack tItem) { + if (NBTUtils.hasKey(tItem, "mMeta")){ + return NBTUtils.getBookTitle(tItem); + } + return "GT++ Storybook"; + } + + @Override + public boolean isDamageable() { + return false; + } + + @Override + public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List p_77624_3_, boolean p_77624_4_) { + // TODO Auto-generated method stub + super.addInformation(p_77624_1_, p_77624_2_, p_77624_3_, p_77624_4_); + } + + @Override + public boolean isRepairable() { + return false; + } + + @Override + public int getDamage(ItemStack stack) { + if (NBTUtils.hasKey(stack, "mMeta")){ + return NBTUtils.getInteger(stack, "mMeta"); + } + return 0; + } + + @Override + public int getDisplayDamage(ItemStack stack) { + return 0; + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return false; + } + + @Override + public void setDamage(ItemStack stack, int damage) { + NBTUtils.setInteger(stack, "mMeta", damage); + } + +} diff --git a/src/Java/gtPlusPlus/core/lib/CORE.java b/src/Java/gtPlusPlus/core/lib/CORE.java index b2e752f7e4..95c4c7e84a 100644 --- a/src/Java/gtPlusPlus/core/lib/CORE.java +++ b/src/Java/gtPlusPlus/core/lib/CORE.java @@ -1,6 +1,7 @@ package gtPlusPlus.core.lib; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import com.mojang.authlib.GameProfile; @@ -74,6 +75,9 @@ public class CORE { public static final Map<UUID, Map<Integer, GT_MetaTileEntity_TesseractGenerator>> sTesseractGeneratorOwnershipMap = new HashMap<UUID, Map<Integer, GT_MetaTileEntity_TesseractGenerator>>(); public static final Map<UUID, Map<Integer, GT_MetaTileEntity_TesseractTerminal>> sTesseractTerminalOwnershipMap = new HashMap<UUID, Map<Integer, GT_MetaTileEntity_TesseractTerminal>>(); + //Book List + public static final Map<String, ItemStack> sBookList = new ConcurrentHashMap<String, ItemStack>(); + /** * File Paths and Resource Paths */ diff --git a/src/Java/gtPlusPlus/core/util/Utils.java b/src/Java/gtPlusPlus/core/util/Utils.java index 72124afae9..4d15c48097 100644 --- a/src/Java/gtPlusPlus/core/util/Utils.java +++ b/src/Java/gtPlusPlus/core/util/Utils.java @@ -13,24 +13,34 @@ import org.apache.logging.log4j.Logger; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.relauncher.FMLRelaunchLog; +import gregtech.api.GregTech_API; import gregtech.api.enums.Materials; import gregtech.api.enums.TC_Aspects; import gregtech.api.enums.TC_Aspects.TC_AspectStack; +import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GT_Log; +import gregtech.api.util.GT_Utility; import gtPlusPlus.GTplusplus; +import gtPlusPlus.core.item.ModItems; import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.proxy.ClientProxy; import gtPlusPlus.core.util.fluid.FluidUtils; import gtPlusPlus.core.util.item.ItemUtils; import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.nbt.NBTUtils; import ic2.core.Ic2Items; import ic2.core.init.InternalName; import ic2.core.item.resources.ItemCell; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; +import net.minecraft.init.Items; import net.minecraft.item.Item.ToolMaterial; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; @@ -756,6 +766,56 @@ public class Utils { } } + + private static int sBookCount = 0; + public static int getBookCount(){ + return sBookCount; + } + public static ItemStack getWrittenBook(String aMapping, String aTitle, String aAuthor, String[] aPages) { + if (GT_Utility.isStringInvalid(aMapping)) + return null; + ItemStack rStack = (ItemStack) CORE.sBookList.get(aMapping); + if (rStack != null) + return GT_Utility.copyAmount(1L, new Object[]{rStack}); + if ((GT_Utility.isStringInvalid(aTitle)) || (GT_Utility.isStringInvalid(aAuthor)) || (aPages.length <= 0)) + return null; + sBookCount += 1; + rStack = new ItemStack(ModItems.itemCustomBook, 1); + NBTTagCompound tNBT = new NBTTagCompound(); + tNBT.setString("title", GT_LanguageManager.addStringLocalization( + new StringBuilder().append("Book.").append(aTitle).append(".Name").toString(), aTitle)); + tNBT.setString("author", aAuthor); + NBTTagList tNBTList = new NBTTagList(); + for (byte i = 0; i < aPages.length; i = (byte) (i + 1)) { + aPages[i] = GT_LanguageManager.addStringLocalization( + new StringBuilder().append("Book.").append(aTitle).append(".Page").append((i < 10) + ? new StringBuilder().append("0").append(i).toString() + : Byte.valueOf(i)).toString(), + aPages[i]); + if (i < 48) { + if (aPages[i].length() < 256) + tNBTList.appendTag(new NBTTagString(aPages[i])); + else + GT_Log.err.println(new StringBuilder().append("WARNING: String for written Book too long! -> ") + .append(aPages[i]).toString()); + } else { + GT_Log.err.println(new StringBuilder().append("WARNING: Too much Pages for written Book! -> ") + .append(aTitle).toString()); + break; + } + } + tNBTList.appendTag(new NBTTagString(new StringBuilder().append("Credits to ").append(aAuthor) + .append(" for writing this Book. This was Book Nr. ").append(sBookCount) + .append(" at its creation. Gotta get 'em all!").toString())); + tNBT.setTag("pages", tNBTList); + rStack.setTagCompound(tNBT); + GT_Log.out.println(new StringBuilder().append("GT_Mod: Added Book to Book List - Mapping: '").append(aMapping) + .append("' - Name: '").append(aTitle).append("' - Author: '").append(aAuthor).append("'") + .toString()); + NBTUtils.setInteger(rStack, "mMeta", sBookCount); + CORE.sBookList.put(aMapping, rStack); + return GT_Utility.copy(new Object[]{rStack}); + } } diff --git a/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java b/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java index b023c64c77..3005c53f1b 100644 --- a/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java +++ b/src/Java/gtPlusPlus/core/util/nbt/NBTUtils.java @@ -250,4 +250,14 @@ public class NBTUtils { return tNBT.getString(TAG_SOULBIND); } + public static boolean hasKey(ItemStack stack, String key){ + if (stack.hasTagCompound()) { + final NBTTagCompound itemData = stack.getTagCompound(); + if (itemData.hasKey(key)){ + return true; + } + } + return false; + } + } |