diff --git a/src/main/java/com/darkona/adventurebackpack/AdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/AdventureBackpack.java index 26f753a6..7c8e0d90 100644 --- a/src/main/java/com/darkona/adventurebackpack/AdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/AdventureBackpack.java @@ -1,11 +1,8 @@ package com.darkona.adventurebackpack; -import net.minecraft.launchwrapper.Launch; import net.minecraftforge.common.MinecraftForge; import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; @@ -29,9 +26,9 @@ import com.darkona.adventurebackpack.init.ModWorldGen; import com.darkona.adventurebackpack.proxy.IProxy; import com.darkona.adventurebackpack.reference.GeneralReference; +import com.darkona.adventurebackpack.reference.LoadedMods; import com.darkona.adventurebackpack.reference.ModInfo; import com.darkona.adventurebackpack.reference.WailaTileAdventureBackpack; -import com.darkona.adventurebackpack.util.LogHelper; /** * Created on 10/10/2014 @@ -88,37 +85,11 @@ public void init(FMLInitializationEvent event) @Mod.EventHandler public void postInit(FMLPostInitializationEvent event) { - if ((Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment")) - { - ConfigHandler.IS_DEVENV = true; - LogHelper.info("Dev environment detected. All hail the creator"); - } - - ConfigHandler.IS_BUILDCRAFT = registerMod("BuildCraft|Core"); - ConfigHandler.IS_ENDERIO = registerMod("EnderIO"); - ConfigHandler.IS_GREGTECH = registerMod("gregtech"); - ConfigHandler.IS_TCONSTRUCT = registerMod("TConstruct"); - ConfigHandler.IS_THAUMCRAFT = registerMod("Thaumcraft"); - + LoadedMods.init(); GeneralReference.init(); //ConditionalFluidEffect.init(); //ModItems.conditionalInit(); //ModRecipes.conditionalInit(); } - - private static boolean registerMod(String modID) - { - if (!Loader.isModLoaded(modID)) - return false; - - String modName = modID; - for (ModContainer mod : Loader.instance().getModList()) - { - if (mod.getModId().equals(modID)) - modName = mod.getName(); - } - LogHelper.info(modName + " is present. Acting accordingly"); - return true; - } } diff --git a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java index f60168a1..837b9200 100644 --- a/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/block/TileAdventureBackpack.java @@ -119,6 +119,7 @@ public boolean deploySleepingBag(EntityPlayer player, World world, int meta, int sby = cY; sbz = cZ; sbdir = meta; + world.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); } return sleepingBagDeployed; } diff --git a/src/main/java/com/darkona/adventurebackpack/client/gui/GuiAdvBackpack.java b/src/main/java/com/darkona/adventurebackpack/client/gui/GuiAdvBackpack.java index f1d24d44..f0989d61 100644 --- a/src/main/java/com/darkona/adventurebackpack/client/gui/GuiAdvBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/client/gui/GuiAdvBackpack.java @@ -21,6 +21,7 @@ import com.darkona.adventurebackpack.inventory.InventoryBackpack; import com.darkona.adventurebackpack.network.PlayerActionPacket; import com.darkona.adventurebackpack.network.SleepingBagPacket; +import com.darkona.adventurebackpack.reference.LoadedMods; import com.darkona.adventurebackpack.util.Resources; import com.darkona.adventurebackpack.util.TinkersUtils; @@ -33,7 +34,6 @@ public class GuiAdvBackpack extends GuiWithTanks { private static final ResourceLocation TEXTURE = Resources.guiTextures("guiBackpackNew"); - private static final ResourceLocation TINKERS_ICONS = TinkersUtils.getTinkersIcons(); private static final int TINKERS_SLOT = 38; //ContainerBackpack.CRAFT_MATRIX_EMULATION[4] private static GuiImageButtonNormal bedButton = new GuiImageButtonNormal(5, 91, 18, 18); @@ -110,11 +110,11 @@ else if (source == Source.HOLDING) drawHoveringText(tankRight.getTankTooltip(), mouseX, mouseY, fontRendererObj); } - if (ConfigHandler.IS_TCONSTRUCT && ConfigHandler.tinkerToolsMaintenance) + if (LoadedMods.TCONSTRUCT && ConfigHandler.tinkerToolsMaintenance) { if (inventory.getStackInSlot(TINKERS_SLOT) == null) { - this.mc.getTextureManager().bindTexture(TINKERS_ICONS); + this.mc.getTextureManager().bindTexture(TinkersUtils.GUI_ICONS); this.drawTexturedModalRect(this.guiLeft + 169, this.guiTop + 77, 0, 233, 18, 18); } } diff --git a/src/main/java/com/darkona/adventurebackpack/client/gui/GuiOverlay.java b/src/main/java/com/darkona/adventurebackpack/client/gui/GuiOverlay.java index 43203703..198b66ea 100644 --- a/src/main/java/com/darkona/adventurebackpack/client/gui/GuiOverlay.java +++ b/src/main/java/com/darkona/adventurebackpack/client/gui/GuiOverlay.java @@ -33,6 +33,7 @@ import com.darkona.adventurebackpack.config.ConfigHandler; import com.darkona.adventurebackpack.inventory.IInventoryTanks; import com.darkona.adventurebackpack.item.ItemHose; +import com.darkona.adventurebackpack.reference.LoadedMods; import com.darkona.adventurebackpack.reference.ModInfo; import com.darkona.adventurebackpack.reference.ToolHandler; import com.darkona.adventurebackpack.util.GregtechUtils; @@ -81,6 +82,7 @@ public void onRenderExperienceBar(RenderGameOverlayEvent.Post event) if (event.type != RenderGameOverlayEvent.ElementType.EXPERIENCE) return; + EntityPlayer player = mc.thePlayer; ScaledResolution resolution = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight); screenWidth = resolution.getScaledWidth(); screenHeight = resolution.getScaledHeight(); @@ -107,6 +109,14 @@ public void onRenderExperienceBar(RenderGameOverlayEvent.Post event) ? ConfigHandler.statusOverlayIndentV : screenHeight - BUFF_ICON_SIZE - ConfigHandler.statusOverlayIndentV; + if (LoadedMods.THAUMCRAFT + && ConfigHandler.statusOverlayThaumcraft && ConfigHandler.statusOverlayLeft + && ConfigHandler.statusOverlayTop == !ThaumcraftUtils.DIAL_BOTTOM + && ThaumcraftUtils.isTool(player.inventory.getCurrentItem())) + { + xPos += 50; // do not overlap thaumcraft GUI + } + Collection activePotionEffects = this.mc.thePlayer.getActivePotionEffects(); if (!activePotionEffects.isEmpty()) { @@ -119,24 +129,16 @@ public void onRenderExperienceBar(RenderGameOverlayEvent.Post event) PotionEffect potionEffect = (PotionEffect) activeEffect.next(); Potion potion = Potion.potionTypes[potionEffect.getPotionID()]; - try - { - // yes potion should not be null here, but it sometimes does. let the vanilla crash itself, no need to report this to us - if (potion != null && potion.hasStatusIcon()) - { - int iconIndex = potion.getStatusIconIndex(); - this.drawTexturedModalRect( - xPos, yPos, - BUFF_ICON_BASE_U_OFFSET + iconIndex % BUFF_ICONS_PER_ROW * BUFF_ICON_SIZE, - BUFF_ICON_BASE_V_OFFSET + iconIndex / BUFF_ICONS_PER_ROW * BUFF_ICON_SIZE, - BUFF_ICON_SIZE, BUFF_ICON_SIZE); - } - } - catch (NullPointerException npe) + // yes potion should not be null here, but it sometimes does + // let the vanilla crash itself, no need to report this to us + if (potion != null && potion.hasStatusIcon()) { - String msg = "Weird NPE is caught: activePotionEffects: " + activePotionEffects - + "; potionEffect: " + potionEffect + "; potion: " + potion; - throw new NullPointerException(msg); + int iconIndex = potion.getStatusIconIndex(); + this.drawTexturedModalRect( + xPos, yPos, + BUFF_ICON_BASE_U_OFFSET + iconIndex % BUFF_ICONS_PER_ROW * BUFF_ICON_SIZE, + BUFF_ICON_BASE_V_OFFSET + iconIndex / BUFF_ICONS_PER_ROW * BUFF_ICON_SIZE, + BUFF_ICON_SIZE, BUFF_ICON_SIZE); } } } @@ -144,7 +146,6 @@ public void onRenderExperienceBar(RenderGameOverlayEvent.Post event) if (ConfigHandler.tanksOverlay) { - EntityPlayer player = mc.thePlayer; if (Wearing.isWearingWearable(player)) { IInventoryTanks inv = Wearing.getWearingWearableInv(player); diff --git a/src/main/java/com/darkona/adventurebackpack/config/ConfigHandler.java b/src/main/java/com/darkona/adventurebackpack/config/ConfigHandler.java index e4bec2b1..bb5b84b1 100644 --- a/src/main/java/com/darkona/adventurebackpack/config/ConfigHandler.java +++ b/src/main/java/com/darkona/adventurebackpack/config/ConfigHandler.java @@ -17,13 +17,6 @@ public class ConfigHandler { public static Configuration config; - public static boolean IS_DEVENV = false; - public static boolean IS_BUILDCRAFT = false; - public static boolean IS_ENDERIO = false; - public static boolean IS_GREGTECH = false; - public static boolean IS_TCONSTRUCT = false; - public static boolean IS_THAUMCRAFT = false; - public static boolean allowSoulBound = true; public static boolean backpackDeathPlace = true; public static boolean backpackAbilities = true; @@ -46,6 +39,7 @@ public class ConfigHandler public static boolean statusOverlayTop = true; public static int statusOverlayIndentH = 2; public static int statusOverlayIndentV = 2; + public static boolean statusOverlayThaumcraft = true; public static boolean tanksOverlay = true; public static boolean tanksOverlayRight = true; @@ -134,6 +128,7 @@ private static void loadConfiguration() statusOverlayTop = config.getBoolean("Stick To Top", "graphics.status", true, "Stick to top?"); statusOverlayIndentH = config.getInt("Indent Horizontal", "graphics.status", 2, 0, 1000, "Horizontal indent from the window border"); statusOverlayIndentV = config.getInt("Indent Vertical", "graphics.status", 2, 0, 500, "Vertical indent from the window border"); + statusOverlayThaumcraft = config.getBoolean("Respect Thaumcraft", "graphics.status", true, "Take into account Thaumcraft wands GUI and do not overlap it"); // Graphics.Tanks tanksOverlay = config.getBoolean("Enable Overlay", "graphics.tanks", true, "Show the different wearable overlays on screen?"); diff --git a/src/main/java/com/darkona/adventurebackpack/init/ConditionalFluidEffect.java b/src/main/java/com/darkona/adventurebackpack/init/ConditionalFluidEffect.java index ad32cb24..8ad5fb90 100644 --- a/src/main/java/com/darkona/adventurebackpack/init/ConditionalFluidEffect.java +++ b/src/main/java/com/darkona/adventurebackpack/init/ConditionalFluidEffect.java @@ -1,8 +1,8 @@ package com.darkona.adventurebackpack.init; -import com.darkona.adventurebackpack.config.ConfigHandler; import com.darkona.adventurebackpack.fluids.effects.FuelEffect; import com.darkona.adventurebackpack.fluids.effects.OilEffect; +import com.darkona.adventurebackpack.reference.LoadedMods; import adventurebackpack.api.FluidEffect; /** @@ -17,7 +17,7 @@ public class ConditionalFluidEffect public static void init() { - if (ConfigHandler.IS_BUILDCRAFT) + if (LoadedMods.BUILDCRAFT) { oilEffect = new OilEffect(); fuelEffect = new FuelEffect(); diff --git a/src/main/java/com/darkona/adventurebackpack/init/ModItems.java b/src/main/java/com/darkona/adventurebackpack/init/ModItems.java index 7ca8c2c1..ccdca0aa 100644 --- a/src/main/java/com/darkona/adventurebackpack/init/ModItems.java +++ b/src/main/java/com/darkona/adventurebackpack/init/ModItems.java @@ -55,12 +55,12 @@ public static void init() /*public static void conditionalInit() { - if (ConfigHandler.IS_BUILDCRAFT) + if (LoadedMods.BUILDCRAFT) { GameRegistry.registerItem(copterPack, "copterPack"); } - if (ConfigHandler.IS_RAILCRAFT) + if (LoadedMods.RAILCRAFT) { GameRegistry.registerItem(steamJetpack, "steamJetpack"); } diff --git a/src/main/java/com/darkona/adventurebackpack/init/ModRecipes.java b/src/main/java/com/darkona/adventurebackpack/init/ModRecipes.java index 8803a135..0156e02e 100644 --- a/src/main/java/com/darkona/adventurebackpack/init/ModRecipes.java +++ b/src/main/java/com/darkona/adventurebackpack/init/ModRecipes.java @@ -286,7 +286,7 @@ public static void init() /*public static void conditionalInit() { - if(ConfigHandler.IS_BUILDCRAFT) + if (LoadedMods.BUILDCRAFT) { } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java index dbd696c4..0fef433d 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/ContainerBackpack.java @@ -1,9 +1,11 @@ package com.darkona.adventurebackpack.inventory; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraftforge.fluids.FluidTank; @@ -37,6 +39,7 @@ public class ContainerBackpack extends ContainerAdventureBackpack private static final int BUCKET_LEFT = TOOL_END + 1; private static final int BUCKET_RIGHT = BUCKET_LEFT + 2; private static final int MATRIX_DIMENSION = 3; + private static final int CRAFT_RESULT = BUCKET_RIGHT + 2 + (MATRIX_DIMENSION * MATRIX_DIMENSION); private static final int[] CRAFT_MATRIX_EMULATION = findCraftMatrixEmulationIDs(); private InventoryCraftingBackpack craftMatrix = new InventoryCraftingBackpack(this, MATRIX_DIMENSION, MATRIX_DIMENSION); @@ -96,7 +99,7 @@ private void makeSlots(InventoryPlayer invPlayer) startX = 215; startY = -2500; - //startY = ConfigHandler.IS_DEVENV ? 125 : -2500; + //startY = LoadedMods.DEV_ENV ? 125 : -2500; for (int row = 0; row < MATRIX_DIMENSION; row++) // craftMatrix, usually 9 slots, [90-98] { for (int col = 0; col < MATRIX_DIMENSION; col++) @@ -110,6 +113,24 @@ private void makeSlots(InventoryPlayer invPlayer) syncCraftMatrixToInventory(); } + @Override + public void detectAndSendChanges() + { + ItemStack stackA = ((Slot) inventorySlots.get(CRAFT_RESULT)).getStack(); + ItemStack stackB = (ItemStack) inventoryItemStacks.get(CRAFT_RESULT); + + if (!ItemStack.areItemStacksEqual(stackB, stackA)) + { + stackB = stackA == null ? null : stackA.copy(); + inventoryItemStacks.set(CRAFT_RESULT, stackB); + + if (player instanceof EntityPlayerMP) + ((EntityPlayerMP) player).sendContainerAndContentsToPlayer(this, this.getInventory()); + } + + super.detectAndSendChanges(); + } + @Override protected boolean detectChanges() { @@ -268,7 +289,7 @@ protected void dropContentOnClose() @Override public void onCraftMatrixChanged(IInventory inventory) { - if (ConfigHandler.tinkerToolsMaintenance && TinkersUtils.isTool(craftMatrix.getStackInSlot(4))) + if (ConfigHandler.tinkerToolsMaintenance && TinkersUtils.isToolOrWeapon(craftMatrix.getStackInSlot(4))) { craftResult.setInventorySlotContents(0, TinkersUtils.getTinkersRecipe(craftMatrix)); return; diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/IAsynchronousInventory.java b/src/main/java/com/darkona/adventurebackpack/inventory/IAsynchronousInventory.java index 8a00dd2d..1ac1abdc 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/IAsynchronousInventory.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/IAsynchronousInventory.java @@ -10,7 +10,7 @@ */ public interface IAsynchronousInventory extends IInventory { - void setInventorySlotContentsNoSave(int slot, ItemStack stack); + void setInventorySlotContentsNoSave(int slot, ItemStack stack); //TODO rework realisations, see InventoryBackpack - ItemStack decrStackSizeNoSave(int slot, int amount); + ItemStack decrStackSizeNoSave(int slot, int amount); //TODO whats the point and diff with decrStackSize? } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java index ce0fefee..e5a60edd 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/InventoryBackpack.java @@ -210,7 +210,7 @@ public void setInventorySlotContentsNoSave(int slot, ItemStack stack) if (stack.stackSize > this.getInventoryStackLimit()) stack.stackSize = this.getInventoryStackLimit(); - if(stack.stackSize == 0) + if (stack.stackSize == 0) stack = null; } diff --git a/src/main/java/com/darkona/adventurebackpack/inventory/SlotTool.java b/src/main/java/com/darkona/adventurebackpack/inventory/SlotTool.java index dfa13dd2..fdd65d68 100644 --- a/src/main/java/com/darkona/adventurebackpack/inventory/SlotTool.java +++ b/src/main/java/com/darkona/adventurebackpack/inventory/SlotTool.java @@ -56,7 +56,10 @@ public static boolean isValidTool(ItemStack stack) // GregTech if (GregtechUtils.isTool(itemName)) - return !(stack.getItemDamage() == 0 || stack.getItemDamage() > 169); // 0 = sword, 170 = turbines + { + int meta = stack.getItemDamage(); + return !(meta == 0 || meta == 24 || meta > 169); // 0 = sword, 24 = mortar, 170+ = turbines + } if (itemName.startsWith("gt.metaitem")) return false; // charged baterries and such // Tinkers Construct diff --git a/src/main/java/com/darkona/adventurebackpack/reference/BackpackTypes.java b/src/main/java/com/darkona/adventurebackpack/reference/BackpackTypes.java index 797f8a6e..1a67ffb6 100644 --- a/src/main/java/com/darkona/adventurebackpack/reference/BackpackTypes.java +++ b/src/main/java/com/darkona/adventurebackpack/reference/BackpackTypes.java @@ -1,5 +1,6 @@ package com.darkona.adventurebackpack.reference; +import java.util.Arrays; import java.util.EnumSet; import com.google.common.collect.BiMap; @@ -7,6 +8,7 @@ import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.text.WordUtils; @@ -121,24 +123,20 @@ public enum BackpackTypes private final byte meta; private final String skinName; - private final Props[] props; + private final ImmutableSet props; BackpackTypes(int meta, String skin, Props... props) { Validate.inclusiveBetween(0, (int) Byte.MAX_VALUE, meta, "wrong meta value: %s (%s)", meta, this); this.meta = (byte) meta; - this.props = props; - this.skinName = skin; + this.skinName = skin.isEmpty() ? generateSkinName() : skin; + this.props = Sets.immutableEnumSet((Arrays.asList(props))); } BackpackTypes(int meta, Props... props) { - Validate.inclusiveBetween(0, (int) Byte.MAX_VALUE, meta, "wrong meta value: %s (%s)", meta, this); - - this.meta = (byte) meta; - this.props = props; - this.skinName = generateSkinName(); + this(meta, StringUtils.EMPTY, props); } private String generateSkinName() @@ -259,12 +257,12 @@ public static boolean isSpecial(BackpackTypes type) public static boolean hasProperty(BackpackTypes type, Props prop) { - for (Props p : type.props) - { - if (p == prop) - return true; - } - return false; + return type.props.contains(prop); + } + + public static boolean hasProperties(BackpackTypes type, ImmutableSet props) + { + return type.props.containsAll(props); } public enum Props @@ -276,6 +274,8 @@ public enum Props //HOLIDAY, //OTHER_ABILITY, // creeper or skeleton etc ; + + public static final ImmutableSet POTION_EFFECT = Sets.immutableEnumSet(SPECIAL, REMOVAL); } // --- diff --git a/src/main/java/com/darkona/adventurebackpack/reference/GeneralReference.java b/src/main/java/com/darkona/adventurebackpack/reference/GeneralReference.java index 9ad286f4..5daeb751 100644 --- a/src/main/java/com/darkona/adventurebackpack/reference/GeneralReference.java +++ b/src/main/java/com/darkona/adventurebackpack/reference/GeneralReference.java @@ -31,7 +31,7 @@ public static void init() parseLiquidFuelsConfig(); parseDimensionBlacklistConfig(); - if (ConfigHandler.IS_DEVENV) + if (LoadedMods.DEV_ENV) liquidFuels.put("holywater", 0.0f); // shhh.. you did not see anything. hallelujah! } diff --git a/src/main/java/com/darkona/adventurebackpack/reference/LoadedMods.java b/src/main/java/com/darkona/adventurebackpack/reference/LoadedMods.java new file mode 100644 index 00000000..d4985da4 --- /dev/null +++ b/src/main/java/com/darkona/adventurebackpack/reference/LoadedMods.java @@ -0,0 +1,48 @@ +package com.darkona.adventurebackpack.reference; + +import net.minecraft.launchwrapper.Launch; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.ModContainer; + +import com.darkona.adventurebackpack.util.LogHelper; + +/** + * Created on 24.02.2018 + * + * @author Ugachaga + */ +public final class LoadedMods +{ + public static final boolean DEV_ENV = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); + + public static final boolean BUILDCRAFT = registerMod("BuildCraft|Core"); + public static final boolean ENDERIO = registerMod("EnderIO"); + public static final boolean GREGTECH = registerMod("gregtech"); + public static final boolean TCONSTRUCT = registerMod("TConstruct"); + public static final boolean THAUMCRAFT = registerMod("Thaumcraft"); + + private LoadedMods() {} + + public static void init() + { + if (DEV_ENV) + { + LogHelper.info("Dev environment detected. All hail the creator"); + } + } + + private static boolean registerMod(String modID) + { + if (!Loader.isModLoaded(modID)) + return false; + + String modName = modID; + for (ModContainer mod : Loader.instance().getModList()) + { + if (mod.getModId().equals(modID)) + modName = mod.getName(); + } + LogHelper.info(modName + " is present. Acting accordingly"); + return true; + } +} diff --git a/src/main/java/com/darkona/adventurebackpack/util/CoordsUtils.java b/src/main/java/com/darkona/adventurebackpack/util/CoordsUtils.java index 65ee2ca0..02f1455c 100644 --- a/src/main/java/com/darkona/adventurebackpack/util/CoordsUtils.java +++ b/src/main/java/com/darkona/adventurebackpack/util/CoordsUtils.java @@ -274,11 +274,7 @@ public static boolean spawnSleepingBag(EntityPlayer player, World world, int met ++cX; break; } - if (world.setBlock(cX, cY, cZ, sleepingBag, meta + 8, 3)) - { - world.markBlockForUpdate(cX, cY, cZ); - return true; - } + return world.setBlock(cX, cY, cZ, sleepingBag, meta + 8, 3); } return false; } diff --git a/src/main/java/com/darkona/adventurebackpack/util/EnchUtils.java b/src/main/java/com/darkona/adventurebackpack/util/EnchUtils.java index 87193cd0..fff885d0 100644 --- a/src/main/java/com/darkona/adventurebackpack/util/EnchUtils.java +++ b/src/main/java/com/darkona/adventurebackpack/util/EnchUtils.java @@ -7,60 +7,46 @@ import net.minecraftforge.common.util.Constants.NBT; import com.darkona.adventurebackpack.config.ConfigHandler; +import com.darkona.adventurebackpack.reference.LoadedMods; /** - * Created by Ugachaga on 24.03.2017. + * Created on 24.03.2017 + * + * @author Ugachaga */ - -public class EnchUtils +public final class EnchUtils { - static - { - setSoulBoundID(); - } - // -3 - disabled by config // -2 - EnderIO not found // -1 - enchantment not found - private static int soulBoundID; + private static final int SOUL_BOUND_ID = setSoulBoundID(); - public static int getSoulBoundID() - { - return soulBoundID; - } + private EnchUtils() {} - private static void setSoulBoundID() + private static int setSoulBoundID() { if (!ConfigHandler.allowSoulBound) - { - soulBoundID = -3; - return; - } - if (!ConfigHandler.IS_ENDERIO) - { - soulBoundID = -2; - return; - } + return -3; + + if (!LoadedMods.ENDERIO) + return -2; + for (Enchantment ench : Enchantment.enchantmentsList) - { if (ench != null && ench.getName().equals("enchantment.enderio.soulBound")) - { - soulBoundID = ench.effectId; - return; - } - } - soulBoundID = -1; + return ench.effectId; + + return -1; } public static boolean isSoulBounded(ItemStack stack) { NBTTagList stackEnch = stack.getEnchantmentTagList(); - if (getSoulBoundID() >= 0 && stackEnch != null) + if (SOUL_BOUND_ID >= 0 && stackEnch != null) { for (int i = 0; i < stackEnch.tagCount(); i++) { int id = stackEnch.getCompoundTagAt(i).getInteger("id"); - if (id == getSoulBoundID()) + if (id == SOUL_BOUND_ID) return true; } } @@ -69,7 +55,7 @@ public static boolean isSoulBounded(ItemStack stack) public static boolean isSoulBook(ItemStack book) { - if (getSoulBoundID() >= 0 && book.hasTagCompound()) + if (SOUL_BOUND_ID >= 0 && book.hasTagCompound()) { NBTTagCompound bookData = book.stackTagCompound; if (bookData.hasKey("StoredEnchantments")) @@ -78,8 +64,7 @@ public static boolean isSoulBook(ItemStack book) if (!bookEnch.getCompoundTagAt(1).getBoolean("id")) // only pure soulbook allowed { int id = bookEnch.getCompoundTagAt(0).getInteger("id"); - if (id == getSoulBoundID()) - return true; + return id == SOUL_BOUND_ID; } } } diff --git a/src/main/java/com/darkona/adventurebackpack/util/GregtechUtils.java b/src/main/java/com/darkona/adventurebackpack/util/GregtechUtils.java index 93bcb183..79dae2e6 100644 --- a/src/main/java/com/darkona/adventurebackpack/util/GregtechUtils.java +++ b/src/main/java/com/darkona/adventurebackpack/util/GregtechUtils.java @@ -1,75 +1,81 @@ package com.darkona.adventurebackpack.util; +import javax.annotation.Nonnull; + import net.minecraft.item.ItemStack; import net.minecraftforge.client.IItemRenderer; -import com.darkona.adventurebackpack.config.ConfigHandler; +import com.darkona.adventurebackpack.reference.LoadedMods; /** * Created on 30.01.2018 * * @author Ugachaga */ -public class GregtechUtils +public final class GregtechUtils { private static final String CLASS_RENDERER = "gregtech.common.render.GT_MetaGenerated_Tool_Renderer"; - private static final String METHOD_RENDERER = "renderItem"; - private static final Object[] EMPTY_OBJECT = {}; private static final String TOOLS_NAME = "gt.metatool.01"; - private static final int[] ROTATED_TOOLS = {10, 14, 18, 22, 34, 150, 160}; + private static final int[] ROTATED_45_TOOLS = {16, 26, 30, 130}; + private static final int[] ROTATED_90_TOOLS = {10, 14, 18, 22, 34, 150, 160}; + private static Class toolRenderer; private static Object toolRendererInstance; private GregtechUtils() {} static { - if (ConfigHandler.IS_GREGTECH && Utils.inClient()) + if (LoadedMods.GREGTECH) + { + createToolRendererInstance(); + } + } + + private static void createToolRendererInstance() + { + if (Utils.inClient()) { try { - toolRendererInstance = Class.forName(CLASS_RENDERER).newInstance(); + toolRenderer = Class.forName(CLASS_RENDERER); + toolRendererInstance = toolRenderer.newInstance(); } catch (Exception e) { - LogHelper.error("Error getting instance of Gregtech: " + e); + LogHelper.error("Error getting instance of Gregtech Tools Renderer: " + e); } } } - public static boolean isTool(ItemStack stack) + public static boolean isTool(@Nonnull ItemStack stack) { - return ConfigHandler.IS_GREGTECH && stack.getItem().getUnlocalizedName().equals(TOOLS_NAME); + return LoadedMods.GREGTECH && stack.getItem().getUnlocalizedName().equals(TOOLS_NAME); } public static boolean isTool(String itemName) { - return ConfigHandler.IS_GREGTECH && itemName.equals(TOOLS_NAME); + return LoadedMods.GREGTECH && itemName.equals(TOOLS_NAME); } public static float getToolRotationAngle(ItemStack stack, boolean isLowerSlot) { int meta = stack.getItemDamage(); - for (int rotatedTool : ROTATED_TOOLS) - { - if (meta == rotatedTool) + + for (int rotated45 : ROTATED_45_TOOLS) + if (meta == rotated45) + return isLowerSlot ? 0F : 90F; + + for (int rotated90 : ROTATED_90_TOOLS) + if (meta == rotated90) return isLowerSlot ? 45F : 135F; - } + return isLowerSlot ? -45F : 45F; } public static void renderTool(ItemStack stack, IItemRenderer.ItemRenderType renderType) { - try - { - Class.forName(CLASS_RENDERER) - .getMethod(METHOD_RENDERER, IItemRenderer.ItemRenderType.class, ItemStack.class, Object[].class) - .invoke(toolRendererInstance, renderType, stack, EMPTY_OBJECT); - } - catch (Exception e) - { - //e.printStackTrace(); - } + ToolRenderHelper.render(stack, renderType, toolRenderer, toolRendererInstance); } } diff --git a/src/main/java/com/darkona/adventurebackpack/util/ThaumcraftUtils.java b/src/main/java/com/darkona/adventurebackpack/util/ThaumcraftUtils.java index 17eafb5d..f6d49d5a 100644 --- a/src/main/java/com/darkona/adventurebackpack/util/ThaumcraftUtils.java +++ b/src/main/java/com/darkona/adventurebackpack/util/ThaumcraftUtils.java @@ -3,48 +3,74 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.client.IItemRenderer; -import com.darkona.adventurebackpack.config.ConfigHandler; +import com.darkona.adventurebackpack.reference.LoadedMods; /** * Created on 06.02.2018 * * @author Ugachaga */ -public class ThaumcraftUtils +public final class ThaumcraftUtils { - private static final String CLASS_RENDERER = "thaumcraft.client.renderers.item.ItemWandRenderer"; - private static final String METHOD_RENDERER = "renderItem"; - private static final Object[] EMPTY_OBJECT = {}; + public static final boolean DIAL_BOTTOM = setDialBottom(); + private static final String CLASS_RENDERER = "thaumcraft.client.renderers.item.ItemWandRenderer"; + private static final String CLASS_CONFIG = "thaumcraft.common.config.Config"; private static final String CLASS_WANDS = "thaumcraft.common.items.wands.ItemWandCasting"; + private static final String FIELD_DIAL_BOTTOM = "dialBottom"; + private static Class toolRenderer; private static Object toolRendererInstance; private ThaumcraftUtils() {} static { - if (ConfigHandler.IS_THAUMCRAFT && Utils.inClient()) + if (LoadedMods.THAUMCRAFT) + { + createToolRendererInstance(); + } + } + + private static void createToolRendererInstance() + { + if (Utils.inClient()) { try { - toolRendererInstance = Class.forName(CLASS_RENDERER).newInstance(); + toolRenderer = Class.forName(CLASS_RENDERER); + toolRendererInstance = toolRenderer.newInstance(); } catch (Exception e) { - LogHelper.error("Error getting Thaumcraft Wands Renderer instance: " + e); + LogHelper.error("Error getting instance of Thaumcraft Wands Renderer: " + e); } } } + private static boolean setDialBottom() + { + if (!LoadedMods.THAUMCRAFT || Utils.inServer()) + return false; + + try + { + return Class.forName(CLASS_CONFIG).getField(FIELD_DIAL_BOTTOM).getBoolean(null); + } + catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) + { + return false; + } + } + public static boolean isTool(ItemStack stack) { - if (!ConfigHandler.IS_THAUMCRAFT || stack == null) + if (!LoadedMods.THAUMCRAFT || stack == null) return false; try { - return java.lang.Class.forName(CLASS_WANDS).isInstance(stack.getItem()); + return Class.forName(CLASS_WANDS).isInstance(stack.getItem()); } catch (ClassNotFoundException e) { @@ -59,15 +85,6 @@ public static float getToolRotationAngle(ItemStack stack, boolean isLowerSlot) public static void renderTool(ItemStack stack, IItemRenderer.ItemRenderType renderType) { - try - { - Class.forName(CLASS_RENDERER) - .getMethod(METHOD_RENDERER, IItemRenderer.ItemRenderType.class, ItemStack.class, Object[].class) - .invoke(toolRendererInstance, renderType, stack, EMPTY_OBJECT); - } - catch (Exception e) - { - //e.printStackTrace(); - } + ToolRenderHelper.render(stack, renderType, toolRenderer, toolRendererInstance); } } diff --git a/src/main/java/com/darkona/adventurebackpack/util/TinkersUtils.java b/src/main/java/com/darkona/adventurebackpack/util/TinkersUtils.java index 2065edcf..0fc174ec 100644 --- a/src/main/java/com/darkona/adventurebackpack/util/TinkersUtils.java +++ b/src/main/java/com/darkona/adventurebackpack/util/TinkersUtils.java @@ -1,5 +1,6 @@ package com.darkona.adventurebackpack.util; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.UUID; @@ -15,101 +16,126 @@ import com.mojang.authlib.GameProfile; import cpw.mods.fml.common.FMLCommonHandler; -import com.darkona.adventurebackpack.config.ConfigHandler; +import com.darkona.adventurebackpack.reference.LoadedMods; /** * Created on 03.02.2018 * * @author Ugachaga */ -public class TinkersUtils +public final class TinkersUtils { + public static final ResourceLocation GUI_ICONS = new ResourceLocation("tinker", "textures/gui/icons.png"); + private static final String CLASS_CRAFTING_LOGIC = "tconstruct.tools.logic.CraftingStationLogic"; private static final String CLASS_CRAFTING_STATION = "tconstruct.tools.inventory.CraftingStationContainer"; - private static final String METHOD_ON_CRAFT_CHANGED = ConfigHandler.IS_DEVENV ? "onCraftMatrixChanged" : "func_75130_a"; + private static final String METHOD_ON_CRAFT_CHANGED = LoadedMods.DEV_ENV ? "onCraftMatrixChanged" : "func_75130_a"; private static final String FIELD_CRAFT_MATRIX = "craftMatrix"; private static final String FIELD_CRAFT_RESULT = "craftResult"; private static final String CLASS_RENDERER = "tconstruct.client.FlexibleToolRenderer"; - private static final String METHOD_RENDERER = "renderItem"; - private static final Object[] EMPTY_OBJECT = {}; - private static final String PACKAGE_INFI_TOOLS = "tconstruct.items.tools"; + private static final String PACKAGE_TCONSTRUCT = "tconstruct"; + private static final String PACKAGE_TOOLS = "tconstruct.items.tools"; + private static final String PACKAGE_AMMO = "tconstruct.weaponry.ammo"; // arrows and bolts + private static final String PACKAGE_WEAPONS = "tconstruct.weaponry.weapons"; // bows, crossbows, throwing weapons private static Class craftingStation; private static Object craftingStationInstance; + + private static Class toolRenderer; private static Object toolRendererInstance; private TinkersUtils() {} static { - if (ConfigHandler.IS_TCONSTRUCT) + if (LoadedMods.TCONSTRUCT) { - getCraftingStationInstance(); - - if (Utils.inClient()) - { - try - { - toolRendererInstance = Class.forName(CLASS_RENDERER).newInstance(); - } - catch (Exception e) - { - LogHelper.error("Error getting Tinkers Tool Renderer instance: " + e); - } - } + createCraftingStationInstance(); + createToolRendererInstance(); } } - private static void getCraftingStationInstance() + private static void createCraftingStationInstance() { try { Class craftingLogic = Class.forName(CLASS_CRAFTING_LOGIC); Object craftingLogicInstance = craftingLogic.newInstance(); - InventoryPlayer invPlayer; - - if (Utils.inServer()) - { - WorldServer world = FMLCommonHandler.instance().getMinecraftServerInstance().worldServers[0]; - UUID fakeUuid = UUID.fromString("521e749d-2ac0-3459-af7a-160b4be5c62b"); - GameProfile fakeProfile = new GameProfile(fakeUuid, "[Adventurer]"); - invPlayer = new InventoryPlayer(new FakePlayer(world, fakeProfile)); - } - else - { - invPlayer = Minecraft.getMinecraft().thePlayer.inventory; - } + InventoryPlayer invPlayer = getInventoryPlayer(); craftingStation = Class.forName(CLASS_CRAFTING_STATION); craftingStationInstance = craftingStation .getConstructor(InventoryPlayer.class, craftingLogic, int.class, int.class, int.class) .newInstance(invPlayer, craftingLogicInstance, 0, 0, 0); - - LogHelper.info("Tinkers Crafting Station instance created"); } catch (Exception e) { - LogHelper.error("Error getting Tinkers Crafting Station instance: " + e); - //e.printStackTrace(); + LogHelper.error("Error getting instance of Tinkers Crafting Station: " + e); } } - public static boolean isTool(ItemStack stack) + private static InventoryPlayer getInventoryPlayer() { - return ConfigHandler.IS_TCONSTRUCT - && stack != null && stack.getItem().getClass().getName().startsWith(PACKAGE_INFI_TOOLS); + InventoryPlayer invPlayer; + if (Utils.inServer()) + { + WorldServer world = FMLCommonHandler.instance().getMinecraftServerInstance().worldServers[0]; + UUID fakeUuid = UUID.fromString("521e749d-2ac0-3459-af7a-160b4be5c62b"); + GameProfile fakeProfile = new GameProfile(fakeUuid, "[Adventurer]"); + invPlayer = new InventoryPlayer(new FakePlayer(world, fakeProfile)); + } + else + { + invPlayer = Minecraft.getMinecraft().thePlayer.inventory; + } + return invPlayer; + } + + private static void createToolRendererInstance() + { + if (Utils.inClient()) + { + try + { + toolRenderer = Class.forName(CLASS_RENDERER); + toolRendererInstance = toolRenderer.newInstance(); + } + catch (Exception e) + { + LogHelper.error("Error getting instance of Tinkers Tool Renderer: " + e); + } + } + } + + public static boolean isToolOrWeapon(@Nullable ItemStack stack) + { + if (stack == null) + return false; + + String cn = stack.getItem().getClass().getName(); + return cn.startsWith(PACKAGE_TCONSTRUCT) + && (cn.startsWith(PACKAGE_TOOLS) || cn.startsWith(PACKAGE_WEAPONS) || cn.startsWith(PACKAGE_AMMO)); + + } + + public static boolean isTool(@Nonnull ItemStack stack) + { + return LoadedMods.TCONSTRUCT && stack.getItem().getClass().getName().startsWith(PACKAGE_TOOLS); } public static boolean isTool(String clazzName) { - return ConfigHandler.IS_TCONSTRUCT && clazzName.startsWith(PACKAGE_INFI_TOOLS); + return LoadedMods.TCONSTRUCT && clazzName.startsWith(PACKAGE_TOOLS); } @Nullable public static ItemStack getTinkersRecipe(InventoryCrafting craftMatrix) { + if (craftingStationInstance == null) + return null; + try { craftingStation @@ -139,20 +165,6 @@ public static float getToolRotationAngle(ItemStack stack, boolean isLowerSlot) public static void renderTool(ItemStack stack, IItemRenderer.ItemRenderType renderType) { - try - { - Class.forName(CLASS_RENDERER) - .getMethod(METHOD_RENDERER, IItemRenderer.ItemRenderType.class, ItemStack.class, Object[].class) - .invoke(toolRendererInstance, renderType, stack, EMPTY_OBJECT); - } - catch (Exception e) - { - //e.printStackTrace(); - } - } - - public static ResourceLocation getTinkersIcons() - { - return new ResourceLocation("tinker", "textures/gui/icons.png"); + ToolRenderHelper.render(stack, renderType, toolRenderer, toolRendererInstance); } } diff --git a/src/main/java/com/darkona/adventurebackpack/util/ToolRenderHelper.java b/src/main/java/com/darkona/adventurebackpack/util/ToolRenderHelper.java new file mode 100644 index 00000000..4bcc22ee --- /dev/null +++ b/src/main/java/com/darkona/adventurebackpack/util/ToolRenderHelper.java @@ -0,0 +1,32 @@ +package com.darkona.adventurebackpack.util; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer.ItemRenderType; + +/** + * Created on 25.02.2018 + * + * @author Ugachaga + */ +public final class ToolRenderHelper +{ + private static final String METHOD_RENDERER = "renderItem"; + private static final Object[] EMPTY_OBJECT = {}; + + private ToolRenderHelper() {} + + public static void render(ItemStack stack, ItemRenderType type, Class renderer, Object rendererInstance) + { + if (rendererInstance == null) + return; + + try + { + renderer + .getMethod(METHOD_RENDERER, ItemRenderType.class, ItemStack.class, Object[].class) + .invoke(rendererInstance, type, stack, EMPTY_OBJECT); + } + catch (Exception e) + { /* */ } + } +} diff --git a/src/main/resources/META-INF/adventurebackpack_at.cfg b/src/main/resources/META-INF/adventurebackpack_at.cfg index 4b3e57ad..a9371e12 100644 --- a/src/main/resources/META-INF/adventurebackpack_at.cfg +++ b/src/main/resources/META-INF/adventurebackpack_at.cfg @@ -1 +1 @@ -public net.minecraft.inventory.InventoryCrafting field_70466_a # stackList \ No newline at end of file +protected net.minecraft.inventory.InventoryCrafting field_70466_a # stackList \ No newline at end of file