From 9eb828d84211b2bbbbddd2d83aff468ff2e2ecb1 Mon Sep 17 00:00:00 2001 From: pahimar Date: Thu, 22 Nov 2012 13:01:39 -0500 Subject: [PATCH 01/31] Update Serbian translation (thanks Vladan899!) --- resources/ee3/lang/sr_RS.xml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/resources/ee3/lang/sr_RS.xml b/resources/ee3/lang/sr_RS.xml index 70e36c08..eb09c4cb 100644 --- a/resources/ee3/lang/sr_RS.xml +++ b/resources/ee3/lang/sr_RS.xml @@ -10,15 +10,21 @@ Инерт Камен Миниум Камен Философ'сКи Камен + Пепео + Minium Прашина + Зелена Прашина + Плава Пашина + Неувенљива Прашина + Преливач боја Прашина Црвена Вода (Извор) Црвена Вода (Текућа) Цалцинатор Цалцинатор Иста Размена 3 - Покретање верзије провера према Приступу удаљеним фајловима верзије ауторитета, који се налази у + Покретање верзије провера према приступу удаљеним фајловима верзије ауторитета, који се налази у Провера Верзије није успешно завршена (верзија провере није покренута правилно) - Ви тренутно користите најновију верзију за мајнкрафт - Ви тренутно користите застарелу верзију; Размотрити надоградљу на - @MOD_UPDATE_LOCATION@ + Ви тренутно користите најновију верзинју (@REMOTE_MOD_VERSION@) од Исте Замене 3 за @MINECRAFT_VERSION@ + Нова @MOD_NAME@ верзија постоји (@REMOTE_MOD_VERSION@) за @MINECRAFT_VERSION@. Узмите овде: @MOD_UPDATE_LOCATION@ Грешка у повезивању удаљене верзије ауторетета податка (Погледајте вашу конекцију?) Провера верзије је искључено, Прескочено \ No newline at end of file From ef2ed87bc94e071e3766042c9e2a7bd829d9c3ce Mon Sep 17 00:00:00 2001 From: pahimar Date: Thu, 22 Nov 2012 22:14:57 -0500 Subject: [PATCH 02/31] Moving some stuff around --- .../core/handlers/ConfigurationHandler.java | 18 ++++++---- .../core/handlers/RenderTickHandler.java | 8 ++--- .../ee3/common/lib/ConfigurationSettings.java | 36 +++++++++++-------- ee3_common/ee3/common/lib/Reference.java | 6 ---- 4 files changed, 38 insertions(+), 30 deletions(-) diff --git a/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java b/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java index 8bcd86d9..5606ce4c 100644 --- a/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java +++ b/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java @@ -26,6 +26,7 @@ import static net.minecraftforge.common.Configuration.*; public class ConfigurationHandler { private static final String CATEGORY_KEYBIND = "keybinds"; + private static final String CATEGORY_GRAPHICS = "graphics"; public static void init(File configFile) { Configuration configuration = new Configuration(configFile); @@ -35,14 +36,11 @@ public class ConfigurationHandler { /* General Configs */ ConfigurationSettings.ENABLE_VERSION_CHECK = configuration - .get(CATEGORY_GENERAL, Reference.ENABLE_VERSION_CHECK, ConfigurationSettings.ENABLE_VERSION_CHECK_DEFAULT) + .get(CATEGORY_GENERAL, ConfigurationSettings.ENABLE_VERSION_CHECK_CONFIGNAME, ConfigurationSettings.ENABLE_VERSION_CHECK_DEFAULT) .getBoolean(ConfigurationSettings.ENABLE_VERSION_CHECK_DEFAULT); ConfigurationSettings.ENABLE_SOUNDS = configuration - .get(CATEGORY_GENERAL, Reference.ENABLE_SOUNDS, ConfigurationSettings.ENABLE_SOUNDS_DEFAULT) + .get(CATEGORY_GENERAL, ConfigurationSettings.ENABLE_SOUNDS_CONFIGNAME, ConfigurationSettings.ENABLE_SOUNDS_DEFAULT) .getBoolean(ConfigurationSettings.ENABLE_SOUNDS_DEFAULT); - ConfigurationSettings.ENABLE_PARTICLE_FX = configuration - .get(CATEGORY_GENERAL, Reference.ENABLE_PARTICLE_FX, ConfigurationSettings.ENABLE_PARTICLE_FX_DEFAULT) - .getBoolean(ConfigurationSettings.ENABLE_PARTICLE_FX_DEFAULT); ConfigurationSettings.MINIUM_STONE_TRANSMUTE_COST = configuration .get(CATEGORY_GENERAL, ConfigurationSettings.MINIUM_STONE_TRANSMUTE_COST_CONFIGNAME, ConfigurationSettings.MINIUM_STONE_TRANSMUTE_COST_DEFAULT) .getInt(ConfigurationSettings.MINIUM_STONE_TRANSMUTE_COST_DEFAULT); @@ -50,9 +48,17 @@ public class ConfigurationHandler { .get(CATEGORY_GENERAL, ConfigurationSettings.MINIUM_STONE_MAX_DURABILITY_CONFIGNAME, ConfigurationSettings.MINIUM_STONE_MAX_DURABILITY_DEFAULT) .getInt(ConfigurationSettings.MINIUM_STONE_MAX_DURABILITY_DEFAULT); + /* Graphics/Rendering Configs */ + ConfigurationSettings.ENABLE_PARTICLE_FX = configuration + .get(CATEGORY_GENERAL, ConfigurationSettings.ENABLE_PARTICLE_FX_CONFIGNAME, ConfigurationSettings.ENABLE_PARTICLE_FX_DEFAULT) + .getBoolean(ConfigurationSettings.ENABLE_PARTICLE_FX_DEFAULT); + ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE = configuration + .get(CATEGORY_GENERAL, ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE_CONFIGNAME, ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE_DEFAULT) + .getBoolean(ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE_DEFAULT); + /* Block Configs */ ConfigurationSettings.AUTO_RESOLVE_BLOCK_IDS = configuration - .get(CATEGORY_BLOCK, Reference.AUTO_RESOLVE_BLOCK_IDS, ConfigurationSettings.AUTO_RESOLVE_BLOCK_IDS_DEFAULT) + .get(CATEGORY_BLOCK, ConfigurationSettings.AUTO_RESOLVE_BLOCK_IDS_CONFIGNAME, ConfigurationSettings.AUTO_RESOLVE_BLOCK_IDS_DEFAULT) .getBoolean(ConfigurationSettings.AUTO_RESOLVE_BLOCK_IDS_DEFAULT); BlockIds.CALCINATOR = configuration .getBlock(Strings.CALCINATOR_NAME, BlockIds.CALCINATOR_DEFAULT) diff --git a/ee3_common/ee3/common/core/handlers/RenderTickHandler.java b/ee3_common/ee3/common/core/handlers/RenderTickHandler.java index b58c79cd..06445703 100644 --- a/ee3_common/ee3/common/core/handlers/RenderTickHandler.java +++ b/ee3_common/ee3/common/core/handlers/RenderTickHandler.java @@ -23,7 +23,7 @@ import ee3.client.core.handlers.DrawBlockHighlightHandler; import ee3.client.core.helper.RenderUtils; import ee3.common.core.helper.TransmutationHelper; import ee3.common.core.helper.VersionHelper; -import ee3.common.item.ItemPhilosopherStone; +import ee3.common.item.ITransmutationStone; import ee3.common.lib.ConfigurationSettings; import ee3.common.lib.Reference; @@ -46,7 +46,7 @@ public class RenderTickHandler implements ITickHandler { currentItemStack = player.inventory.getCurrentItem(); } - if ((player != null) && (currentItemStack != null) && (minecraft.inGameHasFocus) && (currentItemStack.getItem() instanceof ItemPhilosopherStone) && (ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE)) { + if ((player != null) && (currentItemStack != null) && (minecraft.inGameHasFocus) && (currentItemStack.getItem() instanceof ITransmutationStone) && (ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE)) { renderStoneHUD(minecraft, player, currentItemStack, (Float) tickData[0]); } } @@ -66,9 +66,9 @@ public class RenderTickHandler implements ITickHandler { private static void renderStoneHUD(Minecraft minecraft, EntityPlayer player, ItemStack stack, float partialTicks) { - float overlayScale = 2F; + float overlayScale = 2F; // TODO config option float blockScale = overlayScale / 2; - float overlayOpacity = 1F; + float overlayOpacity = 1F; // TODO config option MovingObjectPosition rayTrace = minecraft.objectMouseOver; ItemStack currentBlock = null; diff --git a/ee3_common/ee3/common/lib/ConfigurationSettings.java b/ee3_common/ee3/common/lib/ConfigurationSettings.java index f2c9bee9..aee106eb 100644 --- a/ee3_common/ee3/common/lib/ConfigurationSettings.java +++ b/ee3_common/ee3/common/lib/ConfigurationSettings.java @@ -13,40 +13,48 @@ import ee3.common.item.ModItems; */ public class ConfigurationSettings { - /* + /* * General configuration settings */ // Whether or not automatic block id resolution for EE3 is turned on or off public static boolean AUTO_RESOLVE_BLOCK_IDS; + public static final String ENABLE_VERSION_CHECK_CONFIGNAME = "enable_version_check"; public static final boolean AUTO_RESOLVE_BLOCK_IDS_DEFAULT = false; - + // Whether or not EE3 sounds are enabled public static boolean ENABLE_SOUNDS; + public static final String ENABLE_SOUNDS_CONFIGNAME = "enable_sounds"; public static final boolean ENABLE_SOUNDS_DEFAULT = true; - - // Whether or not EE3 particle fx are enabled - public static boolean ENABLE_PARTICLE_FX; - public static final boolean ENABLE_PARTICLE_FX_DEFAULT = true; - + // Whether or not EE3 will do a version check when loaded public static boolean ENABLE_VERSION_CHECK; + public static final String AUTO_RESOLVE_BLOCK_IDS_CONFIGNAME = "auto_resolve_block_ids"; public static final boolean ENABLE_VERSION_CHECK_DEFAULT = true; - + + /* + * Render config settings + */ + // Whether or not EE3 particle fx are enabled + public static boolean ENABLE_PARTICLE_FX; + public static final String ENABLE_PARTICLE_FX_CONFIGNAME = "enable_particle_fx"; + public static final boolean ENABLE_PARTICLE_FX_DEFAULT = true; + // Whether or not the Philosopher Stone overlay is enabled - // TODO Do a proper overlay toggle that is saved between sessions - public static boolean ENABLE_OVERLAY_PHILOSOPHER_STONE = false; - - /* + public static boolean ENABLE_OVERLAY_PHILOSOPHER_STONE; + public static final String ENABLE_OVERLAY_PHILOSOPHER_STONE_CONFIGNAME = "enable_philosopher_stone_overlay"; + public static final boolean ENABLE_OVERLAY_PHILOSOPHER_STONE_DEFAULT = true; + + /* * Minium stone config settings */ // The durability cost for each transmute with the Minium Stone public static int MINIUM_STONE_TRANSMUTE_COST; public static final String MINIUM_STONE_TRANSMUTE_COST_CONFIGNAME = Strings.MINIUM_STONE_NAME + ".transmuteCost"; public static final int MINIUM_STONE_TRANSMUTE_COST_DEFAULT = 1; - + // The maximum durability for the Minium Stone public static int MINIUM_STONE_MAX_DURABILITY; public static final String MINIUM_STONE_MAX_DURABILITY_CONFIGNAME = Strings.MINIUM_STONE_NAME + ".maxDurability"; public static final int MINIUM_STONE_MAX_DURABILITY_DEFAULT = 1521; - + } diff --git a/ee3_common/ee3/common/lib/Reference.java b/ee3_common/ee3/common/lib/Reference.java index e5ef090e..a6e5c761 100644 --- a/ee3_common/ee3/common/lib/Reference.java +++ b/ee3_common/ee3/common/lib/Reference.java @@ -24,12 +24,6 @@ public class Reference { public static final String SERVER_PROXY_CLASS = "ee3.common.core.CommonProxy"; public static final String CLIENT_PROXY_CLASS = "ee3.client.core.ClientProxy"; - /* Configuration related constants */ - public static final String ENABLE_VERSION_CHECK = "enable_version_check"; - public static final String ENABLE_SOUNDS = "enable_sounds"; - public static final String ENABLE_PARTICLE_FX = "enable_particle_fx"; - public static final String AUTO_RESOLVE_BLOCK_IDS = "auto_resolve_block_ids"; - /* KeyBinding related constants */ public static final String KEYBINDING_EXTRA = "key.extra"; public static final int KEYBINDING_EXTRA_DEFAULT = 46; From dd3a3382c48b9bf9ccfe1783fd828c8fcba186f8 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 23 Nov 2012 23:28:48 -0500 Subject: [PATCH 03/31] Updated French localization Updated version.current to match the most recent English localization. --- resources/ee3/lang/fr_FR.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/ee3/lang/fr_FR.xml b/resources/ee3/lang/fr_FR.xml index 4f36f4c2..9aebbe7c 100644 --- a/resources/ee3/lang/fr_FR.xml +++ b/resources/ee3/lang/fr_FR.xml @@ -14,7 +14,7 @@ Calcinateur Lancement de la vérification de votre version par rapport à cette de reference : Le lancement de la vérification a échoué - Vous utilisez la version la plus à jour pour votre version de Minecraft + Vous utilisez la version (@REMOTE_MOD_VERSION@) la plus à jour pour votre version de Minecraft (@MINECRAFT_VERSION) Vous utilisez une verison obsolète, pensez à effecuter une mise a jour ici - @MOD_UPDATE_LOCATION@ Erreur de connexion vers la version de référence (vérifiez votre connexion internet ?) Verification de version désactiée From a30580ce8542f0ae0385aea9d1da6b3b4029c996 Mon Sep 17 00:00:00 2001 From: Tom Gallacher Date: Sat, 24 Nov 2012 14:50:35 +0000 Subject: [PATCH 04/31] Adding build targets for Mac OS X --- build.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.xml b/build.xml index c297ebd9..97c6e84c 100644 --- a/build.xml +++ b/build.xml @@ -24,6 +24,9 @@ + + + @@ -33,6 +36,9 @@ + + + From 48dce263907c82c2fdfdd24680420734e82aa570 Mon Sep 17 00:00:00 2001 From: pahimar Date: Sat, 24 Nov 2012 22:47:57 -0500 Subject: [PATCH 05/31] Unnecessary line --- ee3_common/ee3/common/core/handlers/RenderTickHandler.java | 1 - 1 file changed, 1 deletion(-) diff --git a/ee3_common/ee3/common/core/handlers/RenderTickHandler.java b/ee3_common/ee3/common/core/handlers/RenderTickHandler.java index 06445703..293cbed4 100644 --- a/ee3_common/ee3/common/core/handlers/RenderTickHandler.java +++ b/ee3_common/ee3/common/core/handlers/RenderTickHandler.java @@ -93,7 +93,6 @@ public class RenderTickHandler implements ITickHandler { GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glEnable(GL11.GL_COLOR_MATERIAL); GL11.glEnable(GL11.GL_LIGHTING); - RenderItem renderItem = new RenderItem(); RenderUtils.renderItemIntoGUI(minecraft.fontRenderer, minecraft.renderEngine, stack, (int) (sr.getScaledWidth() - (16 * overlayScale)), (int) (sr.getScaledHeight() - (16 * overlayScale)), overlayOpacity / 2, overlayScale); if ((currentBlock != null) && (currentBlock.getItem() instanceof ItemBlock)) { RenderUtils.renderRotatingBlockIntoGUI(minecraft.fontRenderer, minecraft.renderEngine, currentBlock, (int) (sr.getScaledWidth() - (16 * overlayScale) / 2 - 8), (int) (sr.getScaledHeight() - (16 * overlayScale) / 2 - 8), -90, blockScale); From ae6201a62c1d9acf487afc9c65bcf05cd8ad04fb Mon Sep 17 00:00:00 2001 From: pahimar Date: Sun, 25 Nov 2012 21:11:12 -0500 Subject: [PATCH 06/31] Some work on in world transmutation overlays for the pstone --- .../handlers/DrawBlockHighlightHandler.java | 132 +++++++++++++++++- ee3_common/ee3/common/item/IChargeable.java | 12 +- .../ee3/common/item/ItemPhilosopherStone.java | 21 +-- ee3_common/ee3/common/lib/Strings.java | 3 + resources/ee3/art/sprites/noise.png | Bin 0 -> 13121 bytes resources/ee3/art/sprites/xcf/noise.xcf | Bin 0 -> 62433 bytes 6 files changed, 152 insertions(+), 16 deletions(-) create mode 100644 resources/ee3/art/sprites/noise.png create mode 100644 resources/ee3/art/sprites/xcf/noise.xcf diff --git a/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java b/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java index 0f84211f..7995f2b6 100644 --- a/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java +++ b/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java @@ -1,17 +1,143 @@ package ee3.client.core.handlers; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import ee3.common.item.ItemPhilosopherStone; +import ee3.common.lib.Reference; +import net.minecraft.src.EnumMovingObjectType; import net.minecraft.src.RenderEngine; +import net.minecraft.src.Tessellator; import net.minecraftforge.client.event.DrawBlockHighlightEvent; +import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.event.ForgeSubscribe; public class DrawBlockHighlightHandler { - @ForgeSubscribe public void onDrawBlockHighlightEvent(DrawBlockHighlightEvent event) { - RenderEngine renderEngine = event.context.renderEngine; + + if (event.currentItem != null) { + if (event.currentItem.getItem() instanceof ItemPhilosopherStone) { + if (event.target.typeOfHit == EnumMovingObjectType.TILE) { + drawPhilosopherStoneOverlay(event); + } + } + } + } + + public void drawPhilosopherStoneOverlay(DrawBlockHighlightEvent event) { + + double x = event.target.blockX + 0.5F; + double y = event.target.blockY + 0.5F; + double z = event.target.blockZ + 0.5F; + double iPX = event.player.prevPosX + (event.player.posX - event.player.prevPosX) * event.partialTicks; + double iPY = event.player.prevPosY + (event.player.posY - event.player.prevPosY) * event.partialTicks; + double iPZ = event.player.prevPosZ + (event.player.posZ - event.player.prevPosZ) * event.partialTicks; + int texture = event.context.renderEngine.getTexture(Reference.SPRITE_SHEET_LOCATION + "noise.png"); + + int xScale = 1; + int yScale = 1; + int zScale = 1; + int chargeLevel = ((ItemPhilosopherStone)event.currentItem.getItem()).getCharge(event.currentItem); - // TODO Magic happens here + if (chargeLevel < 1) { + chargeLevel = 1; + } + + if ((event.target.sideHit == 0) || (event.target.sideHit == 1)) { + xScale = chargeLevel; + zScale = chargeLevel; + } + else if ((event.target.sideHit == 2) || (event.target.sideHit == 3)) { + xScale = chargeLevel; + yScale = chargeLevel; + } + else if ((event.target.sideHit == 4) || (event.target.sideHit == 5)) { + yScale = chargeLevel; + zScale = chargeLevel; + } + + float xShift = 0.1F; + float yShift = 0.1F; + float zShift = 0.1F; + + if (event.target.sideHit == 0) { + xShift = 0; + yShift = -yShift; + zShift = 0; + } + else if (event.target.sideHit == 1) { + xShift = 0; + zShift = 0; + } + else if (event.target.sideHit == 2) { + xShift = 0; + yShift = 0; + if (chargeLevel > 1) { + zShift = -zShift - 1; + } + else { + zShift = -zShift; + } + } + else if (event.target.sideHit == 3) { + xShift = 0; + yShift = 0; + } + else if (event.target.sideHit == 4) { + xShift = -xShift; + yShift = 0; + zShift = 0; + } + else if (event.target.sideHit == 5) { + yShift = 0; + zShift = 0; + } + + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_CULL_FACE); + + for (int i = 0; i < 6; i++) { + ForgeDirection forgeDir = ForgeDirection.getOrientation(i); + GL11.glPushMatrix(); + GL11.glTranslated(-iPX + x + xShift, -iPY + y + yShift, -iPZ + z + zShift); + GL11.glScalef(1F * xScale, 1F * yScale, 1F * zScale); + GL11.glRotatef(90, forgeDir.offsetX, forgeDir.offsetY, forgeDir.offsetZ); + GL11.glTranslated(0, 0, 0.5f); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + renderSlidingQuad(texture, 0.75F); + GL11.glPopMatrix(); + } + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDepthMask(true); + } + + public static void renderSlidingQuad(int texture, float transparency) { + + float slide = (System.currentTimeMillis() % 3000) / 3000f; + double pulse = (double) 1 + slide; + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture); + Tessellator tessellator = Tessellator.instance; + + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1, 1, 1, transparency); + + tessellator.startDrawingQuads(); + tessellator.setColorRGBA_F(1, 1, 1, transparency); + + tessellator.addVertexWithUV(-0.5D, 0.5D, 0F, 0, pulse); + tessellator.addVertexWithUV(0.5D, 0.5D, 0F, 0, pulse); + tessellator.addVertexWithUV(0.5D, -0.5D, 0F, 1, pulse); + tessellator.addVertexWithUV(-0.5D, -0.5D, 0F, 1, pulse); + + tessellator.draw(); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); } } diff --git a/ee3_common/ee3/common/item/IChargeable.java b/ee3_common/ee3/common/item/IChargeable.java index 98cdf141..58e9176c 100644 --- a/ee3_common/ee3/common/item/IChargeable.java +++ b/ee3_common/ee3/common/item/IChargeable.java @@ -3,11 +3,13 @@ package ee3.common.item; import net.minecraft.src.ItemStack; public interface IChargeable { + + public abstract short getCharge(ItemStack stack); - public abstract void setCharge(ItemStack stone, short charge); - - public abstract void increaseCharge(ItemStack stone); - - public abstract void decreaseCharge(ItemStack stone); + public abstract void setCharge(ItemStack stack, short charge); + + public abstract void increaseCharge(ItemStack stack); + + public abstract void decreaseCharge(ItemStack stack); } diff --git a/ee3_common/ee3/common/item/ItemPhilosopherStone.java b/ee3_common/ee3/common/item/ItemPhilosopherStone.java index 04ac9fbf..ff2a0d4c 100644 --- a/ee3_common/ee3/common/item/ItemPhilosopherStone.java +++ b/ee3_common/ee3/common/item/ItemPhilosopherStone.java @@ -73,25 +73,30 @@ public class ItemPhilosopherStone extends ItemEE */ PacketDispatcher.sendPacketToServer(PacketTypeHandler.populatePacket(new PacketKeyPressed(keyPressed))); } + + @Override + public short getCharge(ItemStack stack) { + return NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY); + } @Override - public void setCharge(ItemStack stone, short charge) { + public void setCharge(ItemStack stack, short charge) { if (charge <= maxChargeLevel) { - NBTHelper.setShort(stone, "chargeLevel", charge); + NBTHelper.setShort(stack, Strings.NBT_CHARGE_LEVEL_KEY, charge); } } @Override - public void increaseCharge(ItemStack stone) { - if (NBTHelper.getShort(stone, "chargeLevel") < maxChargeLevel) { - NBTHelper.setShort(stone, "chargeLevel", (short)(NBTHelper.getShort(stone, "chargeLevel") + 1)); + public void increaseCharge(ItemStack stack) { + if (NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY) < maxChargeLevel) { + NBTHelper.setShort(stack, Strings.NBT_CHARGE_LEVEL_KEY, (short)(NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY) + 1)); } } @Override - public void decreaseCharge(ItemStack stone) { - if (NBTHelper.getShort(stone, "chargeLevel") > 0) { - NBTHelper.setShort(stone, "chargeLevel", (short)(NBTHelper.getShort(stone, "chargeLevel") - 1)); + public void decreaseCharge(ItemStack stack) { + if (NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY) > 0) { + NBTHelper.setShort(stack, Strings.NBT_CHARGE_LEVEL_KEY, (short)(NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY) - 1)); } } diff --git a/ee3_common/ee3/common/lib/Strings.java b/ee3_common/ee3/common/lib/Strings.java index 9eb60933..194ba426 100644 --- a/ee3_common/ee3/common/lib/Strings.java +++ b/ee3_common/ee3/common/lib/Strings.java @@ -14,6 +14,9 @@ public class Strings { /* Gui related constants */ public static final String GUI_CALCINATOR_NAME = "gui.calcinator.name"; + + /* NBT related constants */ + public static final String NBT_CHARGE_LEVEL_KEY = "chargeLevel"; /* Block name constants */ public static final String CALCINATOR_NAME = "calcinator"; diff --git a/resources/ee3/art/sprites/noise.png b/resources/ee3/art/sprites/noise.png new file mode 100644 index 0000000000000000000000000000000000000000..03f06c76aeab3c5b8e96f59b846da221879e48af GIT binary patch literal 13121 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 Date: Sun, 25 Nov 2012 21:51:05 -0500 Subject: [PATCH 07/31] Prep for pre1c release --- ee3_common/ee3/common/item/IKeyBound.java | 7 +++++++ version.xml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 ee3_common/ee3/common/item/IKeyBound.java diff --git a/ee3_common/ee3/common/item/IKeyBound.java b/ee3_common/ee3/common/item/IKeyBound.java new file mode 100644 index 00000000..7d633f9c --- /dev/null +++ b/ee3_common/ee3/common/item/IKeyBound.java @@ -0,0 +1,7 @@ +package ee3.common.item; + +public interface IKeyBound { + + public abstract void doKeyBindingAction(String keyBinding, boolean isSneaking); + +} diff --git a/version.xml b/version.xml index ad091f0c..2990a498 100644 --- a/version.xml +++ b/version.xml @@ -4,5 +4,5 @@ Version lookup for Equivalent Exchange 3. Format is "Current Version Number|URL to update page" pre1a|http://goo.gl/Ria2V pre1b|http://goo.gl/Ria2V - pre2|http://goo.gl/Ria2V + pre1c|http://goo.gl/Ria2V \ No newline at end of file From 0b8413ec675f11e97d265b89de73011b56491d8d Mon Sep 17 00:00:00 2001 From: pahimar Date: Mon, 26 Nov 2012 09:31:47 -0500 Subject: [PATCH 08/31] Bugfix for pre1c, new version pre1d --- ee3_client/ee3/client/core/ClientProxy.java | 8 ++++++++ .../ee3/client/core/handlers/KeyBindingHandler.java | 1 - ee3_common/ee3/common/EquivalentExchange3.java | 2 +- ee3_common/ee3/common/core/CommonProxy.java | 2 ++ ee3_common/ee3/common/item/ItemMiniumStone.java | 1 - ee3_common/ee3/common/item/ItemPhilosopherStone.java | 1 - version.xml | 2 +- 7 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ee3_client/ee3/client/core/ClientProxy.java b/ee3_client/ee3/client/core/ClientProxy.java index c974814f..0c79072e 100644 --- a/ee3_client/ee3/client/core/ClientProxy.java +++ b/ee3_client/ee3/client/core/ClientProxy.java @@ -8,7 +8,9 @@ import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.KeyBindingRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.Side; import cpw.mods.fml.common.registry.LanguageRegistry; +import cpw.mods.fml.common.registry.TickRegistry; import ee3.client.core.handlers.DrawBlockHighlightHandler; import ee3.client.core.handlers.KeyBindingHandler; import ee3.client.core.handlers.SoundHandler; @@ -18,6 +20,7 @@ import ee3.client.render.RenderItemCalcinator; import ee3.client.render.TextureRedWaterFX; import ee3.client.render.TextureRedWaterFlowFX; import ee3.common.core.CommonProxy; +import ee3.common.core.handlers.RenderTickHandler; import ee3.common.lib.BlockIds; import ee3.common.lib.Reference; import ee3.common.lib.RenderIds; @@ -40,6 +43,11 @@ public class ClientProxy extends CommonProxy { KeyBindingRegistry.registerKeyBinding(new KeyBindingHandler()); } + @Override + public void registerRenderTickHandler() { + TickRegistry.registerTickHandler(new RenderTickHandler(), Side.CLIENT); + } + @Override public void registerDrawBlockHighlightHandler() { MinecraftForge.EVENT_BUS.register(new DrawBlockHighlightHandler()); diff --git a/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java b/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java index 7552f1be..20670560 100644 --- a/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java +++ b/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java @@ -3,7 +3,6 @@ package ee3.client.core.handlers; import java.util.EnumSet; import java.util.logging.Level; -import net.minecraft.src.EntityClientPlayerMP; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.KeyBinding; diff --git a/ee3_common/ee3/common/EquivalentExchange3.java b/ee3_common/ee3/common/EquivalentExchange3.java index b9aa4319..516e6ab4 100644 --- a/ee3_common/ee3/common/EquivalentExchange3.java +++ b/ee3_common/ee3/common/EquivalentExchange3.java @@ -80,7 +80,7 @@ public class EquivalentExchange3 { TickRegistry.registerTickHandler(new VersionCheckTickHandler(), Side.CLIENT); // Initialize the Render Tick Handler (Client only) - TickRegistry.registerTickHandler(new RenderTickHandler(), Side.CLIENT); + proxy.registerRenderTickHandler(); // Register the KeyBinding Handler (Client only) proxy.registerKeyBindingHandler(); diff --git a/ee3_common/ee3/common/core/CommonProxy.java b/ee3_common/ee3/common/core/CommonProxy.java index 232e4207..35fd2dc4 100644 --- a/ee3_common/ee3/common/core/CommonProxy.java +++ b/ee3_common/ee3/common/core/CommonProxy.java @@ -27,6 +27,8 @@ public class CommonProxy implements IGuiHandler { public void registerKeyBindingHandler() {} + public void registerRenderTickHandler() {} + public void registerDrawBlockHighlightHandler() {} public void setKeyBinding(String name, int value) {} diff --git a/ee3_common/ee3/common/item/ItemMiniumStone.java b/ee3_common/ee3/common/item/ItemMiniumStone.java index 5d20b384..2b26ff76 100644 --- a/ee3_common/ee3/common/item/ItemMiniumStone.java +++ b/ee3_common/ee3/common/item/ItemMiniumStone.java @@ -1,6 +1,5 @@ package ee3.common.item; -import net.minecraft.src.EntityClientPlayerMP; import net.minecraft.src.EntityPlayer; import net.minecraft.src.EnumRarity; import net.minecraft.src.ItemStack; diff --git a/ee3_common/ee3/common/item/ItemPhilosopherStone.java b/ee3_common/ee3/common/item/ItemPhilosopherStone.java index ff2a0d4c..f6ec07d9 100644 --- a/ee3_common/ee3/common/item/ItemPhilosopherStone.java +++ b/ee3_common/ee3/common/item/ItemPhilosopherStone.java @@ -12,7 +12,6 @@ import ee3.common.lib.GuiIds; import ee3.common.lib.Strings; import ee3.common.network.PacketKeyPressed; import ee3.common.network.PacketTypeHandler; -import net.minecraft.src.EntityClientPlayerMP; import net.minecraft.src.EntityPlayer; import net.minecraft.src.EnumRarity; import net.minecraft.src.ItemStack; diff --git a/version.xml b/version.xml index 2990a498..106688dd 100644 --- a/version.xml +++ b/version.xml @@ -4,5 +4,5 @@ Version lookup for Equivalent Exchange 3. Format is "Current Version Number|URL to update page" pre1a|http://goo.gl/Ria2V pre1b|http://goo.gl/Ria2V - pre1c|http://goo.gl/Ria2V + pre1d|http://goo.gl/Ria2V \ No newline at end of file From 0be28889524faec7310a2447a45fd1c1ad4268ba Mon Sep 17 00:00:00 2001 From: Bram Van der Sype Date: Mon, 26 Nov 2012 16:37:43 +0100 Subject: [PATCH 09/31] Updated Dutch translations --- resources/ee3/lang/nl_NL.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/ee3/lang/nl_NL.xml b/resources/ee3/lang/nl_NL.xml index e851949a..c9212884 100644 --- a/resources/ee3/lang/nl_NL.xml +++ b/resources/ee3/lang/nl_NL.xml @@ -23,8 +23,8 @@ Equivalent Exchange 3 Start versiecontrole tegen extern versiebestand, te vinden op De versiecontrole is niet geslaagd (versiecontrole niet correct gestart) - Je gebruikt momenteel de meest recente versie voor jouw Minecraft versie - Je gebruikt momenteel een verouderde versie; overweeg om up te daten - @MOD_UPDATE_LOCATION@ - Fout bij het verbinden met het extern versiecontrole bestand (controleer je internetverbinding) + Je gebruikt momenteel de meest recente versie (@REMOTE_MOD_VERSION@) van Equivalent Exchange 3 voor @MINECRAFT_VERSION@ + Een nieuwe @MOD_NAME@ versie bestaat (@REMOTE_MOD_VERSION@) voor @MINECRAFT_VERSION@. Je vindt deze hier: @MOD_UPDATE_LOCATION@ + Er deed zich een fout voor tijdens de versiecontrole Externe versiecontrole uitgeschakeld, wordt overgeslagen From aa0b4219f64b3d3dd125695e30171ae8b67aa942 Mon Sep 17 00:00:00 2001 From: pahimar Date: Mon, 26 Nov 2012 13:30:01 -0500 Subject: [PATCH 10/31] Clean up, and realizing I don't have to send custom sound packets --- ee3_client/ee3/client/core/ClientProxy.java | 35 ++++++++++++------- .../core/helper/TransmutationHelper.java | 1 - .../ee3/common/network/PacketKeyPressed.java | 1 - .../ee3/common/network/PacketTileUpdate.java | 1 - 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/ee3_client/ee3/client/core/ClientProxy.java b/ee3_client/ee3/client/core/ClientProxy.java index 0c79072e..0addd2c9 100644 --- a/ee3_client/ee3/client/core/ClientProxy.java +++ b/ee3_client/ee3/client/core/ClientProxy.java @@ -40,32 +40,38 @@ public class ClientProxy extends CommonProxy { @Override public void registerKeyBindingHandler() { + KeyBindingRegistry.registerKeyBinding(new KeyBindingHandler()); } - + @Override public void registerRenderTickHandler() { + TickRegistry.registerTickHandler(new RenderTickHandler(), Side.CLIENT); } - + @Override public void registerDrawBlockHighlightHandler() { + MinecraftForge.EVENT_BUS.register(new DrawBlockHighlightHandler()); } @Override public void setKeyBinding(String name, int value) { + KeyBindingHelper.addKeyBinding(name, value); KeyBindingHelper.addIsRepeating(false); } @Override public void registerSoundHandler() { + MinecraftForge.EVENT_BUS.register(new SoundHandler()); } @Override public void initCustomRarityTypes() { + EnumHelperClient.addRarity(JUNK, COLOR_JUNK, DISPLAY_NAME_JUNK); EnumHelperClient.addRarity(NORMAL, COLOR_NORMAL, DISPLAY_NAME_NORMAL); EnumHelperClient.addRarity(UNCOMMON, COLOR_UNCOMMON, DISPLAY_NAME_UNCOMMON); @@ -77,31 +83,34 @@ public class ClientProxy extends CommonProxy { @Override public EnumRarity getCustomRarityType(String customRarity) { + for (EnumRarity rarity : EnumRarity.class.getEnumConstants()) { if (rarity.name().equals(customRarity)) return rarity; } return EnumRarity.common; } - + @Override public void initRenderingAndTextures() { - RenderIds.calcinatorRenderId = RenderingRegistry.getNextAvailableRenderId(); - - MinecraftForgeClient.preloadTexture(Reference.SPRITE_SHEET_LOCATION + Reference.BLOCK_SPRITE_SHEET); + + RenderIds.calcinatorRenderId = RenderingRegistry.getNextAvailableRenderId(); + + MinecraftForgeClient.preloadTexture(Reference.SPRITE_SHEET_LOCATION + Reference.BLOCK_SPRITE_SHEET); MinecraftForgeClient.preloadTexture(Reference.SPRITE_SHEET_LOCATION + Reference.ITEM_SPRITE_SHEET); - + FMLClientHandler.instance().getClient().renderEngine.registerTextureFX(new TextureRedWaterFX()); FMLClientHandler.instance().getClient().renderEngine.registerTextureFX(new TextureRedWaterFlowFX()); - + MinecraftForgeClient.registerItemRenderer(BlockIds.CALCINATOR, new RenderItemCalcinator()); } - + @Override public void initTileEntities() { - super.initTileEntities(); - - ClientRegistry.bindTileEntitySpecialRenderer(TileCalcinator.class, new RenderCalcinator()); - + + super.initTileEntities(); + + ClientRegistry.bindTileEntitySpecialRenderer(TileCalcinator.class, new RenderCalcinator()); } + } diff --git a/ee3_common/ee3/common/core/helper/TransmutationHelper.java b/ee3_common/ee3/common/core/helper/TransmutationHelper.java index 4f5d022b..1de1667e 100644 --- a/ee3_common/ee3/common/core/helper/TransmutationHelper.java +++ b/ee3_common/ee3/common/core/helper/TransmutationHelper.java @@ -38,7 +38,6 @@ public class TransmutationHelper { if (nextItem != null) { if (Block.blocksList[nextItem.itemID] != null) { world.setBlockAndMetadataWithNotify(x, y, z, nextItem.itemID, nextItem.getItemDamage()); - // TODO Send the sound event to everyone around the player, and not just play the sound on the current client world.playSoundAtEntity(player, Sounds.TRANSMUTE, 0.5F, 1.0F); return true; } diff --git a/ee3_common/ee3/common/network/PacketKeyPressed.java b/ee3_common/ee3/common/network/PacketKeyPressed.java index f7978b4d..23607a27 100644 --- a/ee3_common/ee3/common/network/PacketKeyPressed.java +++ b/ee3_common/ee3/common/network/PacketKeyPressed.java @@ -38,7 +38,6 @@ public class PacketKeyPressed extends PacketEE { this.key = key; } - @Override public void writeData(DataOutputStream data) throws IOException { data.writeUTF(key); } diff --git a/ee3_common/ee3/common/network/PacketTileUpdate.java b/ee3_common/ee3/common/network/PacketTileUpdate.java index 3e8a6838..9d6b367f 100644 --- a/ee3_common/ee3/common/network/PacketTileUpdate.java +++ b/ee3_common/ee3/common/network/PacketTileUpdate.java @@ -52,7 +52,6 @@ public class PacketTileUpdate extends PacketEE { this.player = player; } - @Override public void writeData(DataOutputStream data) throws IOException { data.writeInt(x); data.writeInt(y); From 4de5c805939f046bb205d9da6405028cbc150350 Mon Sep 17 00:00:00 2001 From: pahimar Date: Mon, 26 Nov 2012 15:59:26 -0500 Subject: [PATCH 11/31] Reworking how keybindings work with items, more refactoring to be done here --- .../ee3/client/core/handlers/KeyBindingHandler.java | 2 +- ee3_common/ee3/common/item/ItemMiniumStone.java | 13 ++++++++++++- ee3_common/ee3/common/network/PacketKeyPressed.java | 7 ++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java b/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java index 20670560..c3029340 100644 --- a/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java +++ b/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java @@ -48,7 +48,7 @@ public class KeyBindingHandler extends KeyBindingRegistry.KeyHandler { // Only operate at the end of the tick if (tickEnd) { // If we are not in a GUI of any kind, continue execution - if (FMLClientHandler.instance().getClient().currentScreen == null) { + if (FMLClientHandler.instance().getClient().inGameHasFocus) { // TODO Clean this up properly if (kb.keyDescription == Reference.KEYBINDING_EXTRA) { ItemStack currentItem = FMLClientHandler.instance().getClient().thePlayer.getCurrentEquippedItem(); diff --git a/ee3_common/ee3/common/item/ItemMiniumStone.java b/ee3_common/ee3/common/item/ItemMiniumStone.java index 2b26ff76..533f949d 100644 --- a/ee3_common/ee3/common/item/ItemMiniumStone.java +++ b/ee3_common/ee3/common/item/ItemMiniumStone.java @@ -14,6 +14,7 @@ import ee3.common.lib.Colours; import ee3.common.lib.ConfigurationSettings; import ee3.common.lib.CustomItemRarity; import ee3.common.lib.GuiIds; +import ee3.common.lib.Reference; import ee3.common.lib.Strings; import ee3.common.network.PacketKeyPressed; import ee3.common.network.PacketTypeHandler; @@ -27,7 +28,8 @@ import ee3.common.network.PacketTypeHandler; * @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html) * */ -public class ItemMiniumStone extends ItemEE implements ITransmutationStone { +public class ItemMiniumStone extends ItemEE + implements ITransmutationStone, IKeyBound { public ItemMiniumStone(int id) { super(id); @@ -84,5 +86,14 @@ public class ItemMiniumStone extends ItemEE implements ITransmutationStone { */ PacketDispatcher.sendPacketToServer(PacketTypeHandler.populatePacket(new PacketKeyPressed(keyPressed))); } + + @Override + public void doKeyBindingAction(String keyBinding, boolean isSneaking) { + + if (keyBinding.equals(Reference.KEYBINDING_EXTRA)) { + System.out.println("Extra key"); + } + + } } diff --git a/ee3_common/ee3/common/network/PacketKeyPressed.java b/ee3_common/ee3/common/network/PacketKeyPressed.java index 23607a27..e500f1a3 100644 --- a/ee3_common/ee3/common/network/PacketKeyPressed.java +++ b/ee3_common/ee3/common/network/PacketKeyPressed.java @@ -7,6 +7,7 @@ import java.io.IOException; import cpw.mods.fml.common.network.Player; import cpw.mods.fml.common.registry.LanguageRegistry; import ee3.common.EquivalentExchange3; +import ee3.common.item.IKeyBound; import ee3.common.item.ITransmutationStone; import ee3.common.lib.GuiIds; import ee3.common.lib.ItemIds; @@ -52,9 +53,13 @@ public class PacketKeyPressed extends PacketEE { public void execute(INetworkManager manager, Player player) { EntityPlayer thePlayer = (EntityPlayer) player; - + /* if ((this.key.equals(Reference.KEYBINDING_EXTRA)) && (thePlayer.getCurrentEquippedItem().getItem() instanceof ITransmutationStone)) { thePlayer.openGui(EquivalentExchange3.instance, GuiIds.PORTABLE_CRAFTING, thePlayer.worldObj, (int)thePlayer.posX, (int)thePlayer.posY, (int)thePlayer.posZ); } + */ + if ((thePlayer.getCurrentEquippedItem() != null) && (thePlayer.getCurrentEquippedItem().getItem() instanceof IKeyBound)) { + ((IKeyBound) thePlayer.getCurrentEquippedItem().getItem()).doKeyBindingAction(this.key, thePlayer.isSneaking()); + } } } From ec961a79fc3b226ecf3751e87b9b60118c13f1e4 Mon Sep 17 00:00:00 2001 From: Wliu Date: Wed, 28 Nov 2012 21:45:16 -0500 Subject: [PATCH 12/31] Update build.xml Enhanced so that it downloads and setups MCP and Forge for you. --- build.xml | 173 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 138 insertions(+), 35 deletions(-) diff --git a/build.xml b/build.xml index 97c6e84c..19de2fe8 100644 --- a/build.xml +++ b/build.xml @@ -1,20 +1,139 @@ - + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + @@ -41,42 +160,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + - - - - - + + + + + - + \ No newline at end of file From ef51bcb12581c75c5cb9bb593bc182db5709fd44 Mon Sep 17 00:00:00 2001 From: Wliu Date: Wed, 28 Nov 2012 21:45:36 -0500 Subject: [PATCH 13/31] Update build.xml Typo fix. --- build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.xml b/build.xml index 19de2fe8..fca94abb 100644 --- a/build.xml +++ b/build.xml @@ -4,7 +4,7 @@ - Date: Wed, 28 Nov 2012 21:46:53 -0500 Subject: [PATCH 14/31] Update build.xml Unnecessary. --- build.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/build.xml b/build.xml index fca94abb..a8e70653 100644 --- a/build.xml +++ b/build.xml @@ -98,11 +98,6 @@ - - - - - From 610adb7e2700b33944dec097ad8726e5608cab06 Mon Sep 17 00:00:00 2001 From: Wliu Date: Wed, 28 Nov 2012 21:58:17 -0500 Subject: [PATCH 15/31] Fix build.xml Fixed massive derps. --- build.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/build.xml b/build.xml index a8e70653..c3b9401b 100644 --- a/build.xml +++ b/build.xml @@ -2,11 +2,11 @@ - + - - @@ -116,6 +116,7 @@ + @@ -175,6 +176,7 @@ - + + \ No newline at end of file From e718df4b305455006e57dfadc2e2699807842a0e Mon Sep 17 00:00:00 2001 From: Wliu Date: Wed, 28 Nov 2012 22:10:07 -0500 Subject: [PATCH 16/31] Update mcp.version 722 --> 723 --- build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.xml b/build.xml index c3b9401b..6fec9fb8 100644 --- a/build.xml +++ b/build.xml @@ -9,7 +9,7 @@ - + From 627282a52f0caf0e2e3d1baea5af00a7be59a4a6 Mon Sep 17 00:00:00 2001 From: Wliu Date: Wed, 28 Nov 2012 22:12:42 -0500 Subject: [PATCH 17/31] Fix derps More derps! :< --- build.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build.xml b/build.xml index 6fec9fb8..3123821f 100644 --- a/build.xml +++ b/build.xml @@ -133,25 +133,25 @@ - + - + - + - + - + - + From 91baaa3dcd85583275ad4f2aee203fe1dd4d8949 Mon Sep 17 00:00:00 2001 From: YoWazzup Date: Thu, 29 Nov 2012 15:43:43 +0100 Subject: [PATCH 18/31] Changed Red Water name to be more Dutch. I changed the Red Water name to "Stilstaand Rood Water", because "Rood Water (Stilstaand)" Doesn't feel Minecrafty. --- resources/ee3/lang/nl_NL.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/ee3/lang/nl_NL.xml b/resources/ee3/lang/nl_NL.xml index c9212884..cc331bf2 100644 --- a/resources/ee3/lang/nl_NL.xml +++ b/resources/ee3/lang/nl_NL.xml @@ -16,8 +16,8 @@ Azuurblauw Stof Amarant Stof Iriserend Stof - Rood Water (Stilstaand) - Rood Water (Vloeiend) + Stilstaand Rood Water + Vloeiend Rood Water Calcinator Calcinator Equivalent Exchange 3 From d2fca0a6d906fe3283377a7a47b17d28b57331d7 Mon Sep 17 00:00:00 2001 From: pahimar Date: Fri, 30 Nov 2012 10:47:18 -0500 Subject: [PATCH 19/31] Re-jigging of how keybindings are handled, now keybindings are passed to items implementing IKeyBound and the item itself determines what code is called depending on the keybinding --- .../core/handlers/KeyBindingHandler.java | 34 ++++----- ee3_common/ee3/common/item/IKeyBound.java | 4 +- .../ee3/common/item/ITransmutationStone.java | 4 +- .../ee3/common/item/ItemMiniumStone.java | 73 ++++++++++--------- .../ee3/common/item/ItemPhilosopherStone.java | 55 +++++++++----- .../ee3/common/network/PacketKeyPressed.java | 8 +- 6 files changed, 99 insertions(+), 79 deletions(-) diff --git a/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java b/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java index c3029340..b5b46b53 100644 --- a/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java +++ b/ee3_client/ee3/client/core/handlers/KeyBindingHandler.java @@ -3,6 +3,7 @@ package ee3.client.core.handlers; import java.util.EnumSet; import java.util.logging.Level; +import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.KeyBinding; @@ -14,6 +15,7 @@ import cpw.mods.fml.common.registry.LanguageRegistry; import ee3.client.core.helper.KeyBindingHelper; import ee3.common.EquivalentExchange3; import ee3.common.core.helper.LogHelper; +import ee3.common.item.IKeyBound; import ee3.common.item.ITransmutationStone; import ee3.common.item.ModItems; import ee3.common.lib.ConfigurationSettings; @@ -35,36 +37,30 @@ import ee3.common.network.PacketTypeHandler; public class KeyBindingHandler extends KeyBindingRegistry.KeyHandler { public KeyBindingHandler() { + super(KeyBindingHelper.gatherKeyBindings(), KeyBindingHelper.gatherIsRepeating()); } @Override public String getLabel() { - return Reference.MOD_NAME + ": " + this.getClass().getSimpleName(); + + return Reference.MOD_NAME + ": " + this.getClass().getSimpleName(); } @Override public void keyDown(EnumSet types, KeyBinding kb, boolean tickEnd, boolean isRepeat) { + // Only operate at the end of the tick if (tickEnd) { // If we are not in a GUI of any kind, continue execution if (FMLClientHandler.instance().getClient().inGameHasFocus) { - // TODO Clean this up properly - if (kb.keyDescription == Reference.KEYBINDING_EXTRA) { + EntityPlayer player = FMLClientHandler.instance().getClient().thePlayer; + if (player != null) { ItemStack currentItem = FMLClientHandler.instance().getClient().thePlayer.getCurrentEquippedItem(); - + if (currentItem != null) { - if (currentItem.getItem() instanceof ITransmutationStone) { - ((ITransmutationStone)currentItem.getItem()).openPortableCrafting(kb.keyDescription); - } - } - } - else if (kb.keyDescription == Reference.KEYBINDING_TOGGLE) { - ItemStack currentItem = FMLClientHandler.instance().getClient().thePlayer.getCurrentEquippedItem(); - - if (currentItem != null) { - if (currentItem.getItem() instanceof ITransmutationStone) { - ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE = !ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE; + if (currentItem.getItem() instanceof IKeyBound) { + PacketDispatcher.sendPacketToServer(PacketTypeHandler.populatePacket(new PacketKeyPressed(kb.keyDescription))); } } } @@ -74,14 +70,18 @@ public class KeyBindingHandler extends KeyBindingRegistry.KeyHandler { } @Override - public void keyUp(EnumSet types, KeyBinding kb, boolean tickEnd) {} + public void keyUp(EnumSet types, KeyBinding kb, boolean tickEnd) { + + } @Override public EnumSet ticks() { + return EnumSet.of(TickType.CLIENT); } private static String getLocalizedKey(String key) { - return LanguageRegistry.instance().getStringLocalization(key); + + return LanguageRegistry.instance().getStringLocalization(key); } } diff --git a/ee3_common/ee3/common/item/IKeyBound.java b/ee3_common/ee3/common/item/IKeyBound.java index 7d633f9c..400f991d 100644 --- a/ee3_common/ee3/common/item/IKeyBound.java +++ b/ee3_common/ee3/common/item/IKeyBound.java @@ -1,7 +1,9 @@ package ee3.common.item; +import net.minecraft.src.EntityPlayer; + public interface IKeyBound { - public abstract void doKeyBindingAction(String keyBinding, boolean isSneaking); + public abstract void doKeyBindingAction(EntityPlayer thePlayer, String keyBinding); } diff --git a/ee3_common/ee3/common/item/ITransmutationStone.java b/ee3_common/ee3/common/item/ITransmutationStone.java index 33507881..fd6cd504 100644 --- a/ee3_common/ee3/common/item/ITransmutationStone.java +++ b/ee3_common/ee3/common/item/ITransmutationStone.java @@ -1,5 +1,7 @@ package ee3.common.item; +import net.minecraft.src.EntityPlayer; + /** * ITransmutationStone * @@ -11,6 +13,6 @@ package ee3.common.item; */ public interface ITransmutationStone { - public abstract void openPortableCrafting(String keyPressed); + public abstract void openPortableCrafting(EntityPlayer thePlayer); } diff --git a/ee3_common/ee3/common/item/ItemMiniumStone.java b/ee3_common/ee3/common/item/ItemMiniumStone.java index 533f949d..48f23c1d 100644 --- a/ee3_common/ee3/common/item/ItemMiniumStone.java +++ b/ee3_common/ee3/common/item/ItemMiniumStone.java @@ -28,10 +28,11 @@ import ee3.common.network.PacketTypeHandler; * @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html) * */ -public class ItemMiniumStone extends ItemEE - implements ITransmutationStone, IKeyBound { - +public class ItemMiniumStone extends ItemEE implements ITransmutationStone, + IKeyBound { + public ItemMiniumStone(int id) { + super(id); this.setIconCoord(1, 0); this.setItemName(Strings.MINIUM_STONE_NAME); @@ -41,59 +42,61 @@ public class ItemMiniumStone extends ItemEE @SideOnly(Side.CLIENT) public EnumRarity getRarity(ItemStack stack) { + return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.MAGICAL); } - + @Override public boolean doesContainerItemLeaveCraftingGrid(ItemStack itemStack) { - return false; + + return false; } - + @Override public boolean getShareTag() { - return true; + + return true; } - + @Override public ItemStack getContainerItemStack(ItemStack itemStack) { - itemStack.setItemDamage(itemStack.getItemDamage() + 1); - - return itemStack; + + itemStack.setItemDamage(itemStack.getItemDamage() + 1); + + return itemStack; } - - @Override - public boolean onItemUse(ItemStack itemStack, EntityPlayer entityPlayer, World world, int x, int y, int z, int l, float f1, float f2, float f3) { - boolean result = TransmutationHelper.transmuteInWorld(world, entityPlayer, itemStack, x, y, z); - - if (result) { - itemStack.damageItem(1, entityPlayer); - } - - return result; + + @Override + public boolean onItemUse(ItemStack itemStack, EntityPlayer entityPlayer, World world, int x, int y, int z, int l, float f1, float f2, float f3) { + + boolean result = TransmutationHelper.transmuteInWorld(world, entityPlayer, itemStack, x, y, z); + + if (result) { + itemStack.damageItem(1, entityPlayer); + } + + return result; } - - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack par1ItemStack, int par2) - { + + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack par1ItemStack, int par2) { + return Integer.parseInt(Colours.PURE_RED, 16); } @Override - public void openPortableCrafting(String keyPressed) { - /* - * Notify the Server that we opened the GUI. When the server receives the packet, it will open the Gui - * server side, and notify the client to open the Gui client side on its own. Magic! - */ - PacketDispatcher.sendPacketToServer(PacketTypeHandler.populatePacket(new PacketKeyPressed(keyPressed))); + public void openPortableCrafting(EntityPlayer thePlayer) { + + thePlayer.openGui(EquivalentExchange3.instance, GuiIds.PORTABLE_CRAFTING, thePlayer.worldObj, (int) thePlayer.posX, (int) thePlayer.posY, (int) thePlayer.posZ); } @Override - public void doKeyBindingAction(String keyBinding, boolean isSneaking) { + public void doKeyBindingAction(EntityPlayer thePlayer, String keyBinding) { if (keyBinding.equals(Reference.KEYBINDING_EXTRA)) { - System.out.println("Extra key"); + openPortableCrafting(thePlayer); } - + } - + } diff --git a/ee3_common/ee3/common/item/ItemPhilosopherStone.java b/ee3_common/ee3/common/item/ItemPhilosopherStone.java index f6ec07d9..ed37278c 100644 --- a/ee3_common/ee3/common/item/ItemPhilosopherStone.java +++ b/ee3_common/ee3/common/item/ItemPhilosopherStone.java @@ -9,6 +9,7 @@ import ee3.common.core.helper.NBTHelper; import ee3.common.core.helper.TransmutationHelper; import ee3.common.lib.CustomItemRarity; import ee3.common.lib.GuiIds; +import ee3.common.lib.Reference; import ee3.common.lib.Strings; import ee3.common.network.PacketKeyPressed; import ee3.common.network.PacketTypeHandler; @@ -26,12 +27,13 @@ import net.minecraft.src.World; * @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html) * */ -public class ItemPhilosopherStone extends ItemEE - implements ITransmutationStone, IChargeable { +public class ItemPhilosopherStone extends ItemEE implements + ITransmutationStone, IChargeable, IKeyBound { private int maxChargeLevel; - + public ItemPhilosopherStone(int id) { + super(id); this.setIconCoord(2, 0); this.setItemName(Strings.PHILOSOPHER_STONE_NAME); @@ -41,62 +43,77 @@ public class ItemPhilosopherStone extends ItemEE @SideOnly(Side.CLIENT) public boolean hasEffect(ItemStack stack) { + return true; } @SideOnly(Side.CLIENT) public EnumRarity getRarity(ItemStack stack) { + return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.RARE); } - + @Override public boolean doesContainerItemLeaveCraftingGrid(ItemStack itemStack) { - return false; + + return false; } - + @Override public boolean getShareTag() { - return true; + + return true; } - + @Override public boolean onItemUse(ItemStack itemStack, EntityPlayer entityPlayer, World world, int x, int y, int z, int l, float f1, float f2, float f3) { + return TransmutationHelper.transmuteInWorld(world, entityPlayer, itemStack, x, y, z); } - + @Override - public void openPortableCrafting(String keyPressed) { - /* - * Notify the Server that we opened the GUI. When the server receives the packet, it will open the Gui - * server side, and notify the client to open the Gui client side on its own. Magic! - */ - PacketDispatcher.sendPacketToServer(PacketTypeHandler.populatePacket(new PacketKeyPressed(keyPressed))); + public void openPortableCrafting(EntityPlayer thePlayer) { + + thePlayer.openGui(EquivalentExchange3.instance, GuiIds.PORTABLE_CRAFTING, thePlayer.worldObj, (int) thePlayer.posX, (int) thePlayer.posY, (int) thePlayer.posZ); } - + @Override public short getCharge(ItemStack stack) { + return NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY); } @Override public void setCharge(ItemStack stack, short charge) { + if (charge <= maxChargeLevel) { NBTHelper.setShort(stack, Strings.NBT_CHARGE_LEVEL_KEY, charge); } } - + @Override public void increaseCharge(ItemStack stack) { + if (NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY) < maxChargeLevel) { - NBTHelper.setShort(stack, Strings.NBT_CHARGE_LEVEL_KEY, (short)(NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY) + 1)); + NBTHelper.setShort(stack, Strings.NBT_CHARGE_LEVEL_KEY, (short) (NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY) + 1)); } } @Override public void decreaseCharge(ItemStack stack) { + if (NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY) > 0) { - NBTHelper.setShort(stack, Strings.NBT_CHARGE_LEVEL_KEY, (short)(NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY) - 1)); + NBTHelper.setShort(stack, Strings.NBT_CHARGE_LEVEL_KEY, (short) (NBTHelper.getShort(stack, Strings.NBT_CHARGE_LEVEL_KEY) - 1)); } } + @Override + public void doKeyBindingAction(EntityPlayer thePlayer, String keyBinding) { + + if (keyBinding.equals(Reference.KEYBINDING_EXTRA)) { + openPortableCrafting(thePlayer); + } + + } + } diff --git a/ee3_common/ee3/common/network/PacketKeyPressed.java b/ee3_common/ee3/common/network/PacketKeyPressed.java index e500f1a3..e4260401 100644 --- a/ee3_common/ee3/common/network/PacketKeyPressed.java +++ b/ee3_common/ee3/common/network/PacketKeyPressed.java @@ -53,13 +53,9 @@ public class PacketKeyPressed extends PacketEE { public void execute(INetworkManager manager, Player player) { EntityPlayer thePlayer = (EntityPlayer) player; - /* - if ((this.key.equals(Reference.KEYBINDING_EXTRA)) && (thePlayer.getCurrentEquippedItem().getItem() instanceof ITransmutationStone)) { - thePlayer.openGui(EquivalentExchange3.instance, GuiIds.PORTABLE_CRAFTING, thePlayer.worldObj, (int)thePlayer.posX, (int)thePlayer.posY, (int)thePlayer.posZ); - } - */ + if ((thePlayer.getCurrentEquippedItem() != null) && (thePlayer.getCurrentEquippedItem().getItem() instanceof IKeyBound)) { - ((IKeyBound) thePlayer.getCurrentEquippedItem().getItem()).doKeyBindingAction(this.key, thePlayer.isSneaking()); + ((IKeyBound) thePlayer.getCurrentEquippedItem().getItem()).doKeyBindingAction(thePlayer, this.key); } } } From fa1271f5c5499c00455e2595bd299fb9e2de0443 Mon Sep 17 00:00:00 2001 From: pahimar Date: Fri, 30 Nov 2012 14:03:36 -0500 Subject: [PATCH 20/31] In world transmutation overlay works for all transmutation stones, P Stone now is chargeable and has sounds, sounds renamed to be more intuitive --- .../handlers/DrawBlockHighlightHandler.java | 21 ++++++++++++------ .../core/handlers/ConfigurationHandler.java | 8 +++---- .../core/handlers/RenderTickHandler.java | 10 ++++----- ee3_common/ee3/common/item/IKeyBound.java | 3 ++- .../ee3/common/item/ItemMiniumStone.java | 2 +- .../ee3/common/item/ItemPhilosopherStone.java | 17 +++++++++++--- .../ee3/common/lib/ConfigurationSettings.java | 8 +++---- ee3_common/ee3/common/lib/Sounds.java | 10 ++++----- .../ee3/common/network/PacketKeyPressed.java | 2 +- .../ee3/sound/{break.ogg => chargeDown.ogg} | Bin .../ee3/sound/{flash.ogg => chargeUp.ogg} | Bin resources/ee3/sound/chargetick.ogg | Bin 4465 -> 0 bytes 12 files changed, 49 insertions(+), 32 deletions(-) rename resources/ee3/sound/{break.ogg => chargeDown.ogg} (100%) rename resources/ee3/sound/{flash.ogg => chargeUp.ogg} (100%) delete mode 100644 resources/ee3/sound/chargetick.ogg diff --git a/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java b/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java index 7995f2b6..1d71ec51 100644 --- a/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java +++ b/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java @@ -3,7 +3,9 @@ package ee3.client.core.handlers; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; -import ee3.common.item.ItemPhilosopherStone; +import ee3.common.item.ITransmutationStone; +import ee3.common.item.IChargeable; +import ee3.common.lib.ConfigurationSettings; import ee3.common.lib.Reference; import net.minecraft.src.EnumMovingObjectType; import net.minecraft.src.RenderEngine; @@ -18,15 +20,17 @@ public class DrawBlockHighlightHandler { public void onDrawBlockHighlightEvent(DrawBlockHighlightEvent event) { if (event.currentItem != null) { - if (event.currentItem.getItem() instanceof ItemPhilosopherStone) { + if (event.currentItem.getItem() instanceof ITransmutationStone) { if (event.target.typeOfHit == EnumMovingObjectType.TILE) { - drawPhilosopherStoneOverlay(event); + if (ConfigurationSettings.ENABLE_OVERLAY_WORLD_TRANSMUTATION) { + drawInWorldTransmutationOverlay(event); + } } } } } - public void drawPhilosopherStoneOverlay(DrawBlockHighlightEvent event) { + public void drawInWorldTransmutationOverlay(DrawBlockHighlightEvent event) { double x = event.target.blockX + 0.5F; double y = event.target.blockY + 0.5F; @@ -39,11 +43,14 @@ public class DrawBlockHighlightHandler { int xScale = 1; int yScale = 1; int zScale = 1; - int chargeLevel = ((ItemPhilosopherStone)event.currentItem.getItem()).getCharge(event.currentItem); + int chargeLevel; + int itemChargeLevel = 0; - if (chargeLevel < 1) { - chargeLevel = 1; + if (event.currentItem.getItem() instanceof IChargeable) { + itemChargeLevel = ((IChargeable)event.currentItem.getItem()).getCharge(event.currentItem); } + + chargeLevel = 1 + itemChargeLevel * 2; if ((event.target.sideHit == 0) || (event.target.sideHit == 1)) { xScale = chargeLevel; diff --git a/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java b/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java index 5606ce4c..294d66cc 100644 --- a/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java +++ b/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java @@ -50,11 +50,11 @@ public class ConfigurationHandler { /* Graphics/Rendering Configs */ ConfigurationSettings.ENABLE_PARTICLE_FX = configuration - .get(CATEGORY_GENERAL, ConfigurationSettings.ENABLE_PARTICLE_FX_CONFIGNAME, ConfigurationSettings.ENABLE_PARTICLE_FX_DEFAULT) + .get(CATEGORY_GRAPHICS, ConfigurationSettings.ENABLE_PARTICLE_FX_CONFIGNAME, ConfigurationSettings.ENABLE_PARTICLE_FX_DEFAULT) .getBoolean(ConfigurationSettings.ENABLE_PARTICLE_FX_DEFAULT); - ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE = configuration - .get(CATEGORY_GENERAL, ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE_CONFIGNAME, ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE_DEFAULT) - .getBoolean(ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE_DEFAULT); + ConfigurationSettings.ENABLE_OVERLAY_WORLD_TRANSMUTATION = configuration + .get(CATEGORY_GRAPHICS, ConfigurationSettings.ENABLE_OVERLAY_WORLD_TRANSMUTATION_CONFIGNAME, ConfigurationSettings.ENABLE_OVERLAY_WORLD_TRANSMUTATION_DEFAULT) + .getBoolean(ConfigurationSettings.ENABLE_OVERLAY_WORLD_TRANSMUTATION_DEFAULT); /* Block Configs */ ConfigurationSettings.AUTO_RESOLVE_BLOCK_IDS = configuration diff --git a/ee3_common/ee3/common/core/handlers/RenderTickHandler.java b/ee3_common/ee3/common/core/handlers/RenderTickHandler.java index 293cbed4..ba1b1884 100644 --- a/ee3_common/ee3/common/core/handlers/RenderTickHandler.java +++ b/ee3_common/ee3/common/core/handlers/RenderTickHandler.java @@ -44,10 +44,10 @@ public class RenderTickHandler implements ITickHandler { if (type.contains(TickType.RENDER)) { if (player != null) { currentItemStack = player.inventory.getCurrentItem(); - } - - if ((player != null) && (currentItemStack != null) && (minecraft.inGameHasFocus) && (currentItemStack.getItem() instanceof ITransmutationStone) && (ConfigurationSettings.ENABLE_OVERLAY_PHILOSOPHER_STONE)) { - renderStoneHUD(minecraft, player, currentItemStack, (Float) tickData[0]); + + if ((currentItemStack != null) && (minecraft.inGameHasFocus) && (currentItemStack.getItem() instanceof ITransmutationStone) && (ConfigurationSettings.ENABLE_OVERLAY_WORLD_TRANSMUTATION)) { + renderStoneHUD(minecraft, player, currentItemStack, (Float) tickData[0]); + } } } } @@ -74,7 +74,7 @@ public class RenderTickHandler implements ITickHandler { ItemStack currentBlock = null; if ((player.worldObj != null) && (rayTrace != null)) { - currentBlock = TransmutationHelper.getNextBlock(player.worldObj.getBlockId(rayTrace.blockX, rayTrace.blockY, rayTrace.blockZ), player.worldObj.getBlockMetadata(rayTrace.blockX, rayTrace.blockY, rayTrace.blockZ), true); + currentBlock = TransmutationHelper.getNextBlock(player.worldObj.getBlockId(rayTrace.blockX, rayTrace.blockY, rayTrace.blockZ), player.worldObj.getBlockMetadata(rayTrace.blockX, rayTrace.blockY, rayTrace.blockZ), player.isSneaking()); } GL11.glPushMatrix(); diff --git a/ee3_common/ee3/common/item/IKeyBound.java b/ee3_common/ee3/common/item/IKeyBound.java index 400f991d..bfdb53a0 100644 --- a/ee3_common/ee3/common/item/IKeyBound.java +++ b/ee3_common/ee3/common/item/IKeyBound.java @@ -1,9 +1,10 @@ package ee3.common.item; import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; public interface IKeyBound { - public abstract void doKeyBindingAction(EntityPlayer thePlayer, String keyBinding); + public abstract void doKeyBindingAction(EntityPlayer thePlayer, ItemStack itemStack, String keyBinding); } diff --git a/ee3_common/ee3/common/item/ItemMiniumStone.java b/ee3_common/ee3/common/item/ItemMiniumStone.java index 48f23c1d..f9d432ec 100644 --- a/ee3_common/ee3/common/item/ItemMiniumStone.java +++ b/ee3_common/ee3/common/item/ItemMiniumStone.java @@ -91,7 +91,7 @@ public class ItemMiniumStone extends ItemEE implements ITransmutationStone, } @Override - public void doKeyBindingAction(EntityPlayer thePlayer, String keyBinding) { + public void doKeyBindingAction(EntityPlayer thePlayer, ItemStack itemStack, String keyBinding) { if (keyBinding.equals(Reference.KEYBINDING_EXTRA)) { openPortableCrafting(thePlayer); diff --git a/ee3_common/ee3/common/item/ItemPhilosopherStone.java b/ee3_common/ee3/common/item/ItemPhilosopherStone.java index ed37278c..c0ada593 100644 --- a/ee3_common/ee3/common/item/ItemPhilosopherStone.java +++ b/ee3_common/ee3/common/item/ItemPhilosopherStone.java @@ -10,6 +10,7 @@ import ee3.common.core.helper.TransmutationHelper; import ee3.common.lib.CustomItemRarity; import ee3.common.lib.GuiIds; import ee3.common.lib.Reference; +import ee3.common.lib.Sounds; import ee3.common.lib.Strings; import ee3.common.network.PacketKeyPressed; import ee3.common.network.PacketTypeHandler; @@ -38,7 +39,7 @@ public class ItemPhilosopherStone extends ItemEE implements this.setIconCoord(2, 0); this.setItemName(Strings.PHILOSOPHER_STONE_NAME); this.setCreativeTab(EquivalentExchange3.tabsEE3); - this.maxChargeLevel = 4; + this.maxChargeLevel = 3; } @SideOnly(Side.CLIENT) @@ -108,12 +109,22 @@ public class ItemPhilosopherStone extends ItemEE implements } @Override - public void doKeyBindingAction(EntityPlayer thePlayer, String keyBinding) { + public void doKeyBindingAction(EntityPlayer thePlayer, ItemStack itemStack, String keyBinding) { if (keyBinding.equals(Reference.KEYBINDING_EXTRA)) { openPortableCrafting(thePlayer); } - + else if (keyBinding.equals(Reference.KEYBINDING_CHARGE)) { + if (!thePlayer.isSneaking()) { + increaseCharge(itemStack); + thePlayer.worldObj.playSoundAtEntity(thePlayer, Sounds.CHARGE_UP, 0.5F, 0.5F + (0.5F * (getCharge(itemStack) * 1.0F / maxChargeLevel))); + } + else { + decreaseCharge(itemStack); + thePlayer.worldObj.playSoundAtEntity(thePlayer, Sounds.CHARGE_DOWN, 0.5F, 1.0F - (0.5F - (0.5F * (getCharge(itemStack) * 1.0F / maxChargeLevel)))); + } + } + } } diff --git a/ee3_common/ee3/common/lib/ConfigurationSettings.java b/ee3_common/ee3/common/lib/ConfigurationSettings.java index aee106eb..0cbe5b13 100644 --- a/ee3_common/ee3/common/lib/ConfigurationSettings.java +++ b/ee3_common/ee3/common/lib/ConfigurationSettings.java @@ -39,10 +39,10 @@ public class ConfigurationSettings { public static final String ENABLE_PARTICLE_FX_CONFIGNAME = "enable_particle_fx"; public static final boolean ENABLE_PARTICLE_FX_DEFAULT = true; - // Whether or not the Philosopher Stone overlay is enabled - public static boolean ENABLE_OVERLAY_PHILOSOPHER_STONE; - public static final String ENABLE_OVERLAY_PHILOSOPHER_STONE_CONFIGNAME = "enable_philosopher_stone_overlay"; - public static final boolean ENABLE_OVERLAY_PHILOSOPHER_STONE_DEFAULT = true; + // Whether or not the in world transmutation overlay is enabled + public static boolean ENABLE_OVERLAY_WORLD_TRANSMUTATION; + public static final String ENABLE_OVERLAY_WORLD_TRANSMUTATION_CONFIGNAME = "enable_world_transmutation_overlay"; + public static final boolean ENABLE_OVERLAY_WORLD_TRANSMUTATION_DEFAULT = true; /* * Minium stone config settings diff --git a/ee3_common/ee3/common/lib/Sounds.java b/ee3_common/ee3/common/lib/Sounds.java index 145cdd76..0357bbe3 100644 --- a/ee3_common/ee3/common/lib/Sounds.java +++ b/ee3_common/ee3/common/lib/Sounds.java @@ -15,10 +15,9 @@ public class Sounds { private static final String SOUND_PREFIX = "ee3.sound."; public static String[] soundFiles = { - SOUND_RESOURCE_LOCATION + "break.ogg", - SOUND_RESOURCE_LOCATION + "chargetick.ogg", + SOUND_RESOURCE_LOCATION + "chargeDown.ogg", + SOUND_RESOURCE_LOCATION + "chargeUp.ogg", SOUND_RESOURCE_LOCATION + "destruct.ogg", - SOUND_RESOURCE_LOCATION + "flash.ogg", SOUND_RESOURCE_LOCATION + "gust.ogg", SOUND_RESOURCE_LOCATION + "heal.ogg", SOUND_RESOURCE_LOCATION + "kinesis.ogg", @@ -31,10 +30,9 @@ public class Sounds { SOUND_RESOURCE_LOCATION + "waterball.ogg", SOUND_RESOURCE_LOCATION + "wind.ogg" }; - public static final String BREAK = SOUND_PREFIX + "break"; - public static final String CHARGE_TICK = SOUND_PREFIX + "chargetick"; + public static final String CHARGE_DOWN = SOUND_PREFIX + "chargeDown"; + public static final String CHARGE_UP = SOUND_PREFIX + "chargeUp"; public static final String DESTRUCTION = SOUND_PREFIX + "destruct"; - public static final String FLASH = SOUND_PREFIX + "flash"; public static final String GUST = SOUND_PREFIX + "gust"; public static final String HEAL = SOUND_PREFIX + "heal"; public static final String KINESIS = SOUND_PREFIX + "kinesis"; diff --git a/ee3_common/ee3/common/network/PacketKeyPressed.java b/ee3_common/ee3/common/network/PacketKeyPressed.java index e4260401..c24aa1a4 100644 --- a/ee3_common/ee3/common/network/PacketKeyPressed.java +++ b/ee3_common/ee3/common/network/PacketKeyPressed.java @@ -55,7 +55,7 @@ public class PacketKeyPressed extends PacketEE { EntityPlayer thePlayer = (EntityPlayer) player; if ((thePlayer.getCurrentEquippedItem() != null) && (thePlayer.getCurrentEquippedItem().getItem() instanceof IKeyBound)) { - ((IKeyBound) thePlayer.getCurrentEquippedItem().getItem()).doKeyBindingAction(thePlayer, this.key); + ((IKeyBound) thePlayer.getCurrentEquippedItem().getItem()).doKeyBindingAction(thePlayer, thePlayer.getCurrentEquippedItem(), this.key); } } } diff --git a/resources/ee3/sound/break.ogg b/resources/ee3/sound/chargeDown.ogg similarity index 100% rename from resources/ee3/sound/break.ogg rename to resources/ee3/sound/chargeDown.ogg diff --git a/resources/ee3/sound/flash.ogg b/resources/ee3/sound/chargeUp.ogg similarity index 100% rename from resources/ee3/sound/flash.ogg rename to resources/ee3/sound/chargeUp.ogg diff --git a/resources/ee3/sound/chargetick.ogg b/resources/ee3/sound/chargetick.ogg deleted file mode 100644 index e2c7c1f61c31523e40befa9e090318f598b6361f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4465 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 From 0ecca70ffea917e1628e8e4108451183ed84033e Mon Sep 17 00:00:00 2001 From: pahimar Date: Fri, 30 Nov 2012 15:28:42 -0500 Subject: [PATCH 21/31] Move art/sprite related constants out of the general Reference class into their out Sprites lib class, move the RenderTickHandler into the client package (where it belongs), --- ee3_client/ee3/client/core/ClientProxy.java | 8 +- .../handlers/DrawBlockHighlightHandler.java | 22 +- .../core/handlers/RenderTickHandler.java | 57 +++-- ee3_client/ee3/client/gui/GuiCalcinator.java | 4 +- .../ee3/client/render/ModelCalcinator.java | 4 +- .../client/render/RenderItemCalcinator.java | 3 +- .../ee3/client/render/TextureRedWaterFX.java | 4 +- .../client/render/TextureRedWaterFlowFX.java | 4 +- .../ee3/common/EquivalentExchange3.java | 2 +- .../common/block/BlockRedWaterFlowing.java | 6 +- .../ee3/common/block/BlockRedWaterStill.java | 7 +- .../core/handlers/EquivalencyHandler.java | 206 ++++++++++-------- .../core/helper/TransmutationHelper.java | 87 ++++---- ee3_common/ee3/common/item/ItemEE.java | 3 +- ee3_common/ee3/common/lib/Reference.java | 8 - ee3_common/ee3/common/lib/Sprites.java | 15 ++ ee3_common/ee3/common/lib/Strings.java | 1 + resources/ee3/art/sprites/test-circle.png | Bin 0 -> 19370 bytes 18 files changed, 238 insertions(+), 203 deletions(-) rename {ee3_common/ee3/common => ee3_client/ee3/client}/core/handlers/RenderTickHandler.java (60%) create mode 100644 ee3_common/ee3/common/lib/Sprites.java create mode 100644 resources/ee3/art/sprites/test-circle.png diff --git a/ee3_client/ee3/client/core/ClientProxy.java b/ee3_client/ee3/client/core/ClientProxy.java index 0addd2c9..5185012f 100644 --- a/ee3_client/ee3/client/core/ClientProxy.java +++ b/ee3_client/ee3/client/core/ClientProxy.java @@ -13,6 +13,7 @@ import cpw.mods.fml.common.registry.LanguageRegistry; import cpw.mods.fml.common.registry.TickRegistry; import ee3.client.core.handlers.DrawBlockHighlightHandler; import ee3.client.core.handlers.KeyBindingHandler; +import ee3.client.core.handlers.RenderTickHandler; import ee3.client.core.handlers.SoundHandler; import ee3.client.core.helper.KeyBindingHelper; import ee3.client.render.RenderCalcinator; @@ -20,10 +21,9 @@ import ee3.client.render.RenderItemCalcinator; import ee3.client.render.TextureRedWaterFX; import ee3.client.render.TextureRedWaterFlowFX; import ee3.common.core.CommonProxy; -import ee3.common.core.handlers.RenderTickHandler; import ee3.common.lib.BlockIds; -import ee3.common.lib.Reference; import ee3.common.lib.RenderIds; +import ee3.common.lib.Sprites; import ee3.common.tile.TileCalcinator; import static ee3.common.lib.CustomItemRarity.*; @@ -96,8 +96,8 @@ public class ClientProxy extends CommonProxy { RenderIds.calcinatorRenderId = RenderingRegistry.getNextAvailableRenderId(); - MinecraftForgeClient.preloadTexture(Reference.SPRITE_SHEET_LOCATION + Reference.BLOCK_SPRITE_SHEET); - MinecraftForgeClient.preloadTexture(Reference.SPRITE_SHEET_LOCATION + Reference.ITEM_SPRITE_SHEET); + MinecraftForgeClient.preloadTexture(Sprites.SPRITE_SHEET_LOCATION + Sprites.BLOCK_SPRITE_SHEET); + MinecraftForgeClient.preloadTexture(Sprites.SPRITE_SHEET_LOCATION + Sprites.ITEM_SPRITE_SHEET); FMLClientHandler.instance().getClient().renderEngine.registerTextureFX(new TextureRedWaterFX()); FMLClientHandler.instance().getClient().renderEngine.registerTextureFX(new TextureRedWaterFlowFX()); diff --git a/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java b/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java index 1d71ec51..e0ce6d0b 100644 --- a/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java +++ b/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java @@ -6,7 +6,7 @@ import org.lwjgl.opengl.GL12; import ee3.common.item.ITransmutationStone; import ee3.common.item.IChargeable; import ee3.common.lib.ConfigurationSettings; -import ee3.common.lib.Reference; +import ee3.common.lib.Sprites; import net.minecraft.src.EnumMovingObjectType; import net.minecraft.src.RenderEngine; import net.minecraft.src.Tessellator; @@ -38,18 +38,18 @@ public class DrawBlockHighlightHandler { double iPX = event.player.prevPosX + (event.player.posX - event.player.prevPosX) * event.partialTicks; double iPY = event.player.prevPosY + (event.player.posY - event.player.prevPosY) * event.partialTicks; double iPZ = event.player.prevPosZ + (event.player.posZ - event.player.prevPosZ) * event.partialTicks; - int texture = event.context.renderEngine.getTexture(Reference.SPRITE_SHEET_LOCATION + "noise.png"); + int texture = event.context.renderEngine.getTexture(Sprites.SPRITE_SHEET_LOCATION + Sprites.WORLD_TRANSMUTATION_TEXTURE); int xScale = 1; int yScale = 1; int zScale = 1; int chargeLevel; int itemChargeLevel = 0; - + if (event.currentItem.getItem() instanceof IChargeable) { - itemChargeLevel = ((IChargeable)event.currentItem.getItem()).getCharge(event.currentItem); + itemChargeLevel = ((IChargeable) event.currentItem.getItem()).getCharge(event.currentItem); } - + chargeLevel = 1 + itemChargeLevel * 2; if ((event.target.sideHit == 0) || (event.target.sideHit == 1)) { @@ -132,15 +132,15 @@ public class DrawBlockHighlightHandler { GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glColor4f(1, 1, 1, transparency); + GL11.glColor4f(1, 1, 1, slide); tessellator.startDrawingQuads(); - tessellator.setColorRGBA_F(1, 1, 1, transparency); + tessellator.setColorRGBA_F(1, 1, 1, slide); - tessellator.addVertexWithUV(-0.5D, 0.5D, 0F, 0, pulse); - tessellator.addVertexWithUV(0.5D, 0.5D, 0F, 0, pulse); - tessellator.addVertexWithUV(0.5D, -0.5D, 0F, 1, pulse); - tessellator.addVertexWithUV(-0.5D, -0.5D, 0F, 1, pulse); + tessellator.addVertexWithUV(-0.5D, 0.5D, 0F, 0, 1); + tessellator.addVertexWithUV(0.5D, 0.5D, 0F, 1, 1); + tessellator.addVertexWithUV(0.5D, -0.5D, 0F, 1, 0); + tessellator.addVertexWithUV(-0.5D, -0.5D, 0F, 0, 0); tessellator.draw(); GL11.glDisable(GL11.GL_BLEND); diff --git a/ee3_common/ee3/common/core/handlers/RenderTickHandler.java b/ee3_client/ee3/client/core/handlers/RenderTickHandler.java similarity index 60% rename from ee3_common/ee3/common/core/handlers/RenderTickHandler.java rename to ee3_client/ee3/client/core/handlers/RenderTickHandler.java index ba1b1884..6baee069 100644 --- a/ee3_common/ee3/common/core/handlers/RenderTickHandler.java +++ b/ee3_client/ee3/client/core/handlers/RenderTickHandler.java @@ -1,4 +1,4 @@ -package ee3.common.core.handlers; +package ee3.client.core.handlers; import java.util.EnumSet; @@ -19,7 +19,6 @@ import net.minecraft.src.ScaledResolution; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.ITickHandler; import cpw.mods.fml.common.TickType; -import ee3.client.core.handlers.DrawBlockHighlightHandler; import ee3.client.core.helper.RenderUtils; import ee3.common.core.helper.TransmutationHelper; import ee3.common.core.helper.VersionHelper; @@ -44,7 +43,7 @@ public class RenderTickHandler implements ITickHandler { if (type.contains(TickType.RENDER)) { if (player != null) { currentItemStack = player.inventory.getCurrentItem(); - + if ((currentItemStack != null) && (minecraft.inGameHasFocus) && (currentItemStack.getItem() instanceof ITransmutationStone) && (ConfigurationSettings.ENABLE_OVERLAY_WORLD_TRANSMUTATION)) { renderStoneHUD(minecraft, player, currentItemStack, (Float) tickData[0]); } @@ -66,39 +65,39 @@ public class RenderTickHandler implements ITickHandler { private static void renderStoneHUD(Minecraft minecraft, EntityPlayer player, ItemStack stack, float partialTicks) { - float overlayScale = 2F; // TODO config option + float overlayScale = 2F; // TODO config option float blockScale = overlayScale / 2; - float overlayOpacity = 1F; // TODO config option - + float overlayOpacity = 1F; // TODO config option + MovingObjectPosition rayTrace = minecraft.objectMouseOver; ItemStack currentBlock = null; - + if ((player.worldObj != null) && (rayTrace != null)) { currentBlock = TransmutationHelper.getNextBlock(player.worldObj.getBlockId(rayTrace.blockX, rayTrace.blockY, rayTrace.blockZ), player.worldObj.getBlockMetadata(rayTrace.blockX, rayTrace.blockY, rayTrace.blockZ), player.isSneaking()); } - + GL11.glPushMatrix(); - ScaledResolution sr = new ScaledResolution(minecraft.gameSettings, minecraft.displayWidth, minecraft.displayHeight); - GL11.glClear(256); - GL11.glMatrixMode(GL11.GL_PROJECTION); - GL11.glLoadIdentity(); - GL11.glOrtho(0.0D, sr.getScaledWidth_double(), sr.getScaledHeight_double(), 0.0D, 1000.0D, 3000.0D); - GL11.glMatrixMode(GL11.GL_MODELVIEW); - GL11.glLoadIdentity(); - GL11.glTranslatef(0.0F, 0.0F, -2000.0F); - - GL11.glPushMatrix(); - RenderHelper.enableGUIStandardItemLighting(); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glEnable(GL11.GL_COLOR_MATERIAL); - GL11.glEnable(GL11.GL_LIGHTING); - RenderUtils.renderItemIntoGUI(minecraft.fontRenderer, minecraft.renderEngine, stack, (int) (sr.getScaledWidth() - (16 * overlayScale)), (int) (sr.getScaledHeight() - (16 * overlayScale)), overlayOpacity / 2, overlayScale); - if ((currentBlock != null) && (currentBlock.getItem() instanceof ItemBlock)) { - RenderUtils.renderRotatingBlockIntoGUI(minecraft.fontRenderer, minecraft.renderEngine, currentBlock, (int) (sr.getScaledWidth() - (16 * overlayScale) / 2 - 8), (int) (sr.getScaledHeight() - (16 * overlayScale) / 2 - 8), -90, blockScale); - } - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glPopMatrix(); + ScaledResolution sr = new ScaledResolution(minecraft.gameSettings, minecraft.displayWidth, minecraft.displayHeight); + GL11.glClear(256); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, sr.getScaledWidth_double(), sr.getScaledHeight_double(), 0.0D, 1000.0D, 3000.0D); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -2000.0F); + + GL11.glPushMatrix(); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glEnable(GL11.GL_LIGHTING); + RenderUtils.renderItemIntoGUI(minecraft.fontRenderer, minecraft.renderEngine, stack, (int) (sr.getScaledWidth() - (16 * overlayScale)), (int) (sr.getScaledHeight() - (16 * overlayScale)), overlayOpacity / 2, overlayScale); + if ((currentBlock != null) && (currentBlock.getItem() instanceof ItemBlock)) { + RenderUtils.renderRotatingBlockIntoGUI(minecraft.fontRenderer, minecraft.renderEngine, currentBlock, (int) (sr.getScaledWidth() - (16 * overlayScale) / 2 - 8), (int) (sr.getScaledHeight() - (16 * overlayScale) / 2 - 8), -90, blockScale); + } + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); GL11.glPopMatrix(); } diff --git a/ee3_client/ee3/client/gui/GuiCalcinator.java b/ee3_client/ee3/client/gui/GuiCalcinator.java index 8b3e2619..6132db65 100644 --- a/ee3_client/ee3/client/gui/GuiCalcinator.java +++ b/ee3_client/ee3/client/gui/GuiCalcinator.java @@ -6,7 +6,7 @@ import cpw.mods.fml.common.Side; import cpw.mods.fml.common.asm.SideOnly; import cpw.mods.fml.common.registry.LanguageRegistry; import ee3.common.container.ContainerCalcinator; -import ee3.common.lib.Reference; +import ee3.common.lib.Sprites; import ee3.common.lib.Strings; import ee3.common.tile.TileCalcinator; import net.minecraft.src.Container; @@ -42,7 +42,7 @@ public class GuiCalcinator extends GuiContainer { protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { - int var4 = this.mc.renderEngine.getTexture(Reference.GUI_SHEET_LOCATION + "calcinator.png"); + int var4 = this.mc.renderEngine.getTexture(Sprites.GUI_SHEET_LOCATION + Sprites.CALCINATOR_MODEL_TEXTURE); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture(var4); int var5 = (this.width - this.xSize) / 2; diff --git a/ee3_client/ee3/client/render/ModelCalcinator.java b/ee3_client/ee3/client/render/ModelCalcinator.java index fb3c61a1..de21b265 100644 --- a/ee3_client/ee3/client/render/ModelCalcinator.java +++ b/ee3_client/ee3/client/render/ModelCalcinator.java @@ -2,7 +2,7 @@ package ee3.client.render; import org.lwjgl.opengl.GL11; -import ee3.common.lib.Reference; +import ee3.common.lib.Sprites; import ee3.common.tile.TileCalcinator; import net.minecraft.src.ModelBase; import net.minecraft.src.ModelRenderer; @@ -130,7 +130,7 @@ public class ModelCalcinator extends ModelBase { GL11.glDisable(GL11.GL_LIGHTING); GL11.glTranslated(x, y, z); - ForgeHooksClient.bindTexture(Reference.SPRITE_SHEET_LOCATION + Reference.CALCINATOR_TEXTURE_SHEET, 0); + ForgeHooksClient.bindTexture(Sprites.SPRITE_SHEET_LOCATION + Sprites.CALCINATOR_MODEL_TEXTURE, 0); firePotBottom.render(scale); bowlBottom.render(scale); diff --git a/ee3_client/ee3/client/render/RenderItemCalcinator.java b/ee3_client/ee3/client/render/RenderItemCalcinator.java index 3ede590f..8432d6a5 100644 --- a/ee3_client/ee3/client/render/RenderItemCalcinator.java +++ b/ee3_client/ee3/client/render/RenderItemCalcinator.java @@ -3,6 +3,7 @@ package ee3.client.render; import org.lwjgl.opengl.GL11; import ee3.common.lib.Reference; +import ee3.common.lib.Sprites; import net.minecraft.src.ItemStack; import net.minecraft.src.Tessellator; import net.minecraftforge.client.ForgeHooksClient; @@ -48,7 +49,7 @@ public class RenderItemCalcinator implements IItemRenderer { private void renderCalcinator(float x, float y, float z) { Tessellator tesselator = Tessellator.instance; - ForgeHooksClient.bindTexture(Reference.SPRITE_SHEET_LOCATION + "calcinator.png", 0); + ForgeHooksClient.bindTexture(Sprites.SPRITE_SHEET_LOCATION + Sprites.CALCINATOR_MODEL_TEXTURE, 0); GL11.glPushMatrix(); //start GL11.glTranslatef(x, y, z); //size calcinatorModel.render(0.0625F); diff --git a/ee3_client/ee3/client/render/TextureRedWaterFX.java b/ee3_client/ee3/client/render/TextureRedWaterFX.java index 98d4ade7..adee7bc9 100644 --- a/ee3_client/ee3/client/render/TextureRedWaterFX.java +++ b/ee3_client/ee3/client/render/TextureRedWaterFX.java @@ -6,7 +6,7 @@ import net.minecraft.src.RenderEngine; import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.FMLTextureFX; import ee3.common.block.ModBlocks; -import ee3.common.lib.Reference; +import ee3.common.lib.Sprites; /** * TextureRedWaterFX @@ -42,7 +42,7 @@ public class TextureRedWaterFX extends FMLTextureFX { @Override public void bindImage(RenderEngine renderEngine) { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, renderEngine.getTexture(Reference.SPRITE_SHEET_LOCATION + Reference.BLOCK_SPRITE_SHEET)); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, renderEngine.getTexture(Sprites.SPRITE_SHEET_LOCATION + Sprites.BLOCK_SPRITE_SHEET)); } public void onTick() { diff --git a/ee3_client/ee3/client/render/TextureRedWaterFlowFX.java b/ee3_client/ee3/client/render/TextureRedWaterFlowFX.java index 5a70ad8e..f09b2971 100644 --- a/ee3_client/ee3/client/render/TextureRedWaterFlowFX.java +++ b/ee3_client/ee3/client/render/TextureRedWaterFlowFX.java @@ -6,7 +6,7 @@ import org.lwjgl.opengl.GL11; import cpw.mods.fml.client.FMLTextureFX; import ee3.common.block.ModBlocks; -import ee3.common.lib.Reference; +import ee3.common.lib.Sprites; /** * TextureRedWaterFlowFX @@ -43,7 +43,7 @@ public class TextureRedWaterFlowFX extends FMLTextureFX { @Override public void bindImage(RenderEngine renderEngine) { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, renderEngine.getTexture(Reference.SPRITE_SHEET_LOCATION + Reference.BLOCK_SPRITE_SHEET)); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, renderEngine.getTexture(Sprites.SPRITE_SHEET_LOCATION + Sprites.BLOCK_SPRITE_SHEET)); } public void onTick() { diff --git a/ee3_common/ee3/common/EquivalentExchange3.java b/ee3_common/ee3/common/EquivalentExchange3.java index 516e6ab4..51db7eb8 100644 --- a/ee3_common/ee3/common/EquivalentExchange3.java +++ b/ee3_common/ee3/common/EquivalentExchange3.java @@ -17,6 +17,7 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.TickRegistry; +import ee3.client.core.handlers.RenderTickHandler; import ee3.common.block.ModBlocks; import ee3.common.core.CommonProxy; import ee3.common.core.CreativeTabEE3; @@ -28,7 +29,6 @@ import ee3.common.core.handlers.ItemPickupHandler; import ee3.common.core.handlers.LocalizationHandler; import ee3.common.core.handlers.PacketHandler; import ee3.common.core.handlers.PlayerDestroyItemHandler; -import ee3.common.core.handlers.RenderTickHandler; import ee3.common.core.handlers.VersionCheckTickHandler; import ee3.common.core.helper.LogHelper; import ee3.common.core.helper.VersionHelper; diff --git a/ee3_common/ee3/common/block/BlockRedWaterFlowing.java b/ee3_common/ee3/common/block/BlockRedWaterFlowing.java index c4633a07..435704d4 100644 --- a/ee3_common/ee3/common/block/BlockRedWaterFlowing.java +++ b/ee3_common/ee3/common/block/BlockRedWaterFlowing.java @@ -2,6 +2,8 @@ package ee3.common.block; import ee3.common.EquivalentExchange3; import ee3.common.lib.Reference; +import ee3.common.lib.Sprites; +import ee3.common.lib.Strings; import net.minecraft.src.BlockFlowing; import net.minecraft.src.CreativeTabs; import net.minecraft.src.Material; @@ -22,12 +24,12 @@ public class BlockRedWaterFlowing extends BlockFlowing { this.blockHardness = 100F; this.setLightOpacity(3); this.setCreativeTab(EquivalentExchange3.tabsEE3); - this.setBlockName("redWaterFlowing"); + this.setBlockName(Strings.RED_WATER_FLOWING_NAME); } @Override public String getTextureFile() { - return Reference.SPRITE_SHEET_LOCATION + Reference.BLOCK_SPRITE_SHEET; + return Sprites.SPRITE_SHEET_LOCATION + Sprites.BLOCK_SPRITE_SHEET; } } diff --git a/ee3_common/ee3/common/block/BlockRedWaterStill.java b/ee3_common/ee3/common/block/BlockRedWaterStill.java index 8c8b89fe..e9081d22 100644 --- a/ee3_common/ee3/common/block/BlockRedWaterStill.java +++ b/ee3_common/ee3/common/block/BlockRedWaterStill.java @@ -1,7 +1,8 @@ package ee3.common.block; import ee3.common.EquivalentExchange3; -import ee3.common.lib.Reference; +import ee3.common.lib.Sprites; +import ee3.common.lib.Strings; import net.minecraft.src.BlockStationary; import net.minecraft.src.Material; @@ -20,7 +21,7 @@ public class BlockRedWaterStill extends BlockStationary { super(id, Material.water); this.blockHardness = 100F; this.setLightOpacity(3); - this.setBlockName("redWaterStill"); + this.setBlockName(Strings.RED_WATER_STILL_NAME); this.setCreativeTab(EquivalentExchange3.tabsEE3); this.disableStats(); this.setRequiresSelfNotify(); @@ -28,7 +29,7 @@ public class BlockRedWaterStill extends BlockStationary { @Override public String getTextureFile() { - return Reference.SPRITE_SHEET_LOCATION + Reference.BLOCK_SPRITE_SHEET; + return Sprites.SPRITE_SHEET_LOCATION + Sprites.BLOCK_SPRITE_SHEET; } } diff --git a/ee3_common/ee3/common/core/handlers/EquivalencyHandler.java b/ee3_common/ee3/common/core/handlers/EquivalencyHandler.java index cd02a3c6..c1f623c5 100644 --- a/ee3_common/ee3/common/core/handlers/EquivalencyHandler.java +++ b/ee3_common/ee3/common/core/handlers/EquivalencyHandler.java @@ -16,19 +16,22 @@ import net.minecraft.src.ItemStack; */ public class EquivalencyHandler { - private static final EquivalencyHandler instance = new EquivalencyHandler(); - + private static final EquivalencyHandler instance = new EquivalencyHandler(); + private static ArrayList> equivalencyList = new ArrayList>(); - + public static EquivalencyHandler instance() { - return instance; + + return instance; } - + public ArrayList> getAllLists() { - return equivalencyList; + + return equivalencyList; } public void addObjects(Object obj1, Object obj2) { + ItemStack stack1 = GeneralHelper.convertObjectToItemStack(obj1); ItemStack stack2 = GeneralHelper.convertObjectToItemStack(obj2); @@ -39,7 +42,7 @@ public class EquivalencyHandler { if ((stack1Index != null) && (stack2Index != null)) { return; - } + } else if ((stack1Index != null) && (stack2Index == null)) { currentList = equivalencyList.get(stack1Index.intValue()); currentList.add(stack2); @@ -58,6 +61,7 @@ public class EquivalencyHandler { } public void addObjects(Object... objList) { + if (objList.length < 2) return; @@ -67,6 +71,7 @@ public class EquivalencyHandler { } public Integer getIndexInList(Object obj) { + ItemStack checkStack = GeneralHelper.convertObjectToItemStack(obj); ArrayList currentList; int i = 0; @@ -83,25 +88,27 @@ public class EquivalencyHandler { return null; } - - public Integer getIndexinList(int id, int meta) { - ArrayList currentList; - int i = 0; - while (i < equivalencyList.size()) { - currentList = equivalencyList.get(i); - for (ItemStack currentStack : currentList) { - if ((id == currentStack.itemID) && (meta == currentStack.getItemDamage())) { - return new Integer(i); - } - } - ++i; - } + public Integer getIndexInList(int id, int meta) { - return null; + ArrayList currentList; + int i = 0; + + while (i < equivalencyList.size()) { + currentList = equivalencyList.get(i); + for (ItemStack currentStack : currentList) { + if ((id == currentStack.itemID) && (meta == currentStack.getItemDamage())) { + return new Integer(i); + } + } + ++i; + } + + return null; } public ArrayList getEquivalencyList(Object obj) { + ItemStack checkStack = GeneralHelper.convertObjectToItemStack(obj); if (checkStack == null) @@ -117,95 +124,106 @@ public class EquivalencyHandler { return null; } - + public ArrayList getEquivalencyList(int id, int meta) { - for (ArrayList list : equivalencyList) { - for (ItemStack currentStack : list) { - if ((id == currentStack.itemID) && (meta == currentStack.getItemDamage())) { - return list; - } - } - } - return null; + for (ArrayList list : equivalencyList) { + for (ItemStack currentStack : list) { + if ((id == currentStack.itemID) && (meta == currentStack.getItemDamage())) { + return list; + } + } + } + + return null; } - + public ItemStack getNextInList(Object obj) { - ItemStack checkStack = GeneralHelper.convertObjectToItemStack(obj); - if (checkStack != null) { - return getNextInList(checkStack.itemID, checkStack.getItemDamage()); - } - - return null; + ItemStack checkStack = GeneralHelper.convertObjectToItemStack(obj); + + if (checkStack != null) { + return getNextInList(checkStack.itemID, checkStack.getItemDamage()); + } + + return null; } - + public ItemStack getNextInList(int id, int meta) { - ArrayList list = getEquivalencyList(id, meta); - ItemStack currentStack; - ItemStack returnStack = null; - int i = 0; + ArrayList list = getEquivalencyList(id, meta); - if (list != null) { - if (list.size() == 1) { - return list.get(i); - } - - while (i < list.size()) { - currentStack = list.get(i); - - if ((id == currentStack.itemID) && (meta == currentStack.getItemDamage())) { - returnStack = list.get((i + 1) % list.size()); - break; - } - - ++i; - } - } + ItemStack currentStack; + ItemStack returnStack = null; + int i = 0; - return returnStack; - } - - public ItemStack getPrevInList(Object obj) { - ItemStack checkStack = GeneralHelper.convertObjectToItemStack(obj); - - if (checkStack != null) { - return getPrevInList(checkStack.itemID, checkStack.getItemDamage()); - } - - return null; - } - - public ItemStack getPrevInList(int id, int meta) { - ArrayList list = getEquivalencyList(id, meta); - - ItemStack currentStack; - ItemStack returnStack = null; - int i = 0; - - if (list != null) { - if (list.size() == 1) { + if (list != null) { + if (list.size() == 1) { return list.get(i); } - - while (i < list.size()) { - currentStack = list.get(i); - - if ((id == currentStack.itemID) && (meta == currentStack.getItemDamage())) { - int index = ((i - 1) + list.size()) % list.size(); - returnStack = list.get(index); - break; - } - - ++i; - } - } - return returnStack; + while (i < list.size()) { + currentStack = list.get(i); + + if ((id == currentStack.itemID) && (meta == currentStack.getItemDamage())) { + returnStack = list.get((i + 1) % list.size()); + break; + } + + ++i; + } + } + + return returnStack; + } + + public ItemStack getPrevInList(Object obj) { + + ItemStack checkStack = GeneralHelper.convertObjectToItemStack(obj); + + if (checkStack != null) { + return getPrevInList(checkStack.itemID, checkStack.getItemDamage()); + } + + return null; + } + + public ItemStack getPrevInList(int id, int meta) { + + ArrayList list = getEquivalencyList(id, meta); + + ItemStack currentStack; + ItemStack returnStack = null; + int i = 0; + + if (list != null) { + if (list.size() == 1) { + return list.get(i); + } + + while (i < list.size()) { + currentStack = list.get(i); + + if ((id == currentStack.itemID) && (meta == currentStack.getItemDamage())) { + int index = ((i - 1) + list.size()) % list.size(); + returnStack = list.get(index); + break; + } + + ++i; + } + } + + return returnStack; + } + + public boolean areEquivalent(Object obj1, Object obj2) { + + return (getEquivalencyList(obj1).equals(getEquivalencyList(obj2))); } public void debug() { + int i = 0; for (ArrayList list : equivalencyList) { System.out.println("equivalencyList[" + i + "]: " + list.toString()); diff --git a/ee3_common/ee3/common/core/helper/TransmutationHelper.java b/ee3_common/ee3/common/core/helper/TransmutationHelper.java index 1de1667e..348eb344 100644 --- a/ee3_common/ee3/common/core/helper/TransmutationHelper.java +++ b/ee3_common/ee3/common/core/helper/TransmutationHelper.java @@ -30,7 +30,7 @@ public class TransmutationHelper { int meta = world.getBlockMetadata(x, y, z); if ((world.getBlockMaterial(x, y, z) == Material.leaves) && (Block.blocksList[id] instanceof BlockLeaves)) { - meta = meta % 4; + meta = meta % 4; } ItemStack nextItem = getNextBlock(id, meta, player.isSneaking()); @@ -42,70 +42,75 @@ public class TransmutationHelper { return true; } } - + return false; } - + public static ItemStack getNextBlock(int id, int meta, boolean allowFalling) { + ArrayList list = EquivalencyHandler.instance().getEquivalencyList(id, meta); - + ItemStack nextStack = null; - + if (list != null) { return getNextBlock(id, meta, id, meta, allowFalling); } - + return nextStack; } - + private static ItemStack getNextBlock(int id, int meta, int origId, int origMeta, boolean allowFalling) { + ArrayList list = EquivalencyHandler.instance().getEquivalencyList(id, meta); - + ItemStack nextStack = null; - + if (list != null) { nextStack = EquivalencyHandler.instance().getNextInList(id, meta); /* - * If the current item is the same as the original one we started with, then we have - * recursed through the entire list and not found a next block so return the original. - * This is the "base case" for the recursion. + * If the current item is the same as the original one we started + * with, then we have recursed through the entire list and not found + * a next block so return the original. This is the "base case" for + * the recursion. */ if ((nextStack.itemID == origId) && (nextStack.getItemDamage() == origMeta)) { - return nextStack; + return nextStack; } else { - /* - * If we are allowing any block (including falling ones) just check to see if the - * next item is a block. If it is, return it. Otherwise continue the recursion. - */ - if (allowFalling) { - if (nextStack.getItem() instanceof ItemBlock) { - return nextStack; - } - else { - return getNextBlock(nextStack.itemID, nextStack.getItemDamage(), origId, origMeta, allowFalling); - } - } - /* - * Else we need to check to make sure the next item is both a block and not an - * instance of BlockSand (which all gravity affected blocks are a subclass of. - * If the next item is a block, and is not a subclass of BlockSand return it, - * otherwise, continue the recursion. - */ - else { - if ((nextStack.getItem() instanceof ItemBlock) && (!(Block.blocksList[nextStack.itemID] instanceof BlockSand))) { - return nextStack; - } - else { - return getNextBlock(nextStack.itemID, nextStack.getItemDamage(), origId, origMeta, allowFalling); - } - } + /* + * If we are allowing any block (including falling ones) just + * check to see if the next item is a block. If it is, return + * it. Otherwise continue the recursion. + */ + if (allowFalling) { + if (nextStack.getItem() instanceof ItemBlock) { + return nextStack; + } + else { + return getNextBlock(nextStack.itemID, nextStack.getItemDamage(), origId, origMeta, allowFalling); + } + } + /* + * Else we need to check to make sure the next item is both a + * block and not an instance of BlockSand (which all gravity + * affected blocks are a subclass of. If the next item is a + * block, and is not a subclass of BlockSand return it, + * otherwise, continue the recursion. + */ + else { + if ((nextStack.getItem() instanceof ItemBlock) && (!(Block.blocksList[nextStack.itemID] instanceof BlockSand))) { + return nextStack; + } + else { + return getNextBlock(nextStack.itemID, nextStack.getItemDamage(), origId, origMeta, allowFalling); + } + } } } - + // In the event the list is null, return null return nextStack; } - + } diff --git a/ee3_common/ee3/common/item/ItemEE.java b/ee3_common/ee3/common/item/ItemEE.java index a20ae239..c2040708 100644 --- a/ee3_common/ee3/common/item/ItemEE.java +++ b/ee3_common/ee3/common/item/ItemEE.java @@ -1,6 +1,7 @@ package ee3.common.item; import ee3.common.lib.Reference; +import ee3.common.lib.Sprites; import net.minecraft.src.Item; /** @@ -17,7 +18,7 @@ public class ItemEE extends Item { public ItemEE(int id) { super(id - Reference.SHIFTED_ID_RANGE_CORRECTION); maxStackSize = 1; - setTextureFile(Reference.SPRITE_SHEET_LOCATION + Reference.ITEM_SPRITE_SHEET); + setTextureFile(Sprites.SPRITE_SHEET_LOCATION + Sprites.ITEM_SPRITE_SHEET); setNoRepair(); } diff --git a/ee3_common/ee3/common/lib/Reference.java b/ee3_common/ee3/common/lib/Reference.java index a6e5c761..cab79fef 100644 --- a/ee3_common/ee3/common/lib/Reference.java +++ b/ee3_common/ee3/common/lib/Reference.java @@ -34,14 +34,6 @@ public class Reference { public static final String KEYBINDING_CHARGE = "key.charge"; public static final int KEYBINDING_CHARGE_DEFAULT = 47; - /* Texture related constants */ - public static final String SPRITE_SHEET_LOCATION = "/ee3/art/sprites/"; - public static final String ARMOR_SHEET_LOCATION = "/ee3/art/armor/"; - public static final String GUI_SHEET_LOCATION = "/ee3/art/gui/"; - public static final String ITEM_SPRITE_SHEET = "ee3_items.png"; - public static final String BLOCK_SPRITE_SHEET = "ee3_blocks.png"; - public static final String CALCINATOR_TEXTURE_SHEET = "calcinator.png"; - /* General Tile Entity related constants */ public static final String TE_GEN_OWNER_NBT_TAG_LABEL = "owner"; public static final String TE_GEN_STATE_NBT_TAG_LABEL = "state"; diff --git a/ee3_common/ee3/common/lib/Sprites.java b/ee3_common/ee3/common/lib/Sprites.java new file mode 100644 index 00000000..fe186c50 --- /dev/null +++ b/ee3_common/ee3/common/lib/Sprites.java @@ -0,0 +1,15 @@ +package ee3.common.lib; + + +public class Sprites { + + public static final String SPRITE_SHEET_LOCATION = "/ee3/art/sprites/"; + public static final String ARMOR_SHEET_LOCATION = "/ee3/art/armor/"; + public static final String GUI_SHEET_LOCATION = "/ee3/art/gui/"; + + public static final String ITEM_SPRITE_SHEET = "ee3_items.png"; + public static final String BLOCK_SPRITE_SHEET = "ee3_blocks.png"; + public static final String CALCINATOR_MODEL_TEXTURE = "calcinator.png"; + public static final String WORLD_TRANSMUTATION_TEXTURE = "noise.png"; + +} diff --git a/ee3_common/ee3/common/lib/Strings.java b/ee3_common/ee3/common/lib/Strings.java index 194ba426..dbca0c37 100644 --- a/ee3_common/ee3/common/lib/Strings.java +++ b/ee3_common/ee3/common/lib/Strings.java @@ -21,6 +21,7 @@ public class Strings { /* Block name constants */ public static final String CALCINATOR_NAME = "calcinator"; public static final String RED_WATER_STILL_NAME = "redWaterStill"; + public static final String RED_WATER_FLOWING_NAME = "redWaterFlowing"; /* Item name constants */ public static final String MINIUM_SHARD_NAME = "miniumShard"; diff --git a/resources/ee3/art/sprites/test-circle.png b/resources/ee3/art/sprites/test-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..5005589e9938391d25f31ddf202bd666208ed761 GIT binary patch literal 19370 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 Date: Fri, 30 Nov 2012 15:40:48 -0500 Subject: [PATCH 22/31] Prepping for a true pulse effect --- .../client/core/handlers/DrawBlockHighlightHandler.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java b/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java index e0ce6d0b..4c15bcc3 100644 --- a/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java +++ b/ee3_client/ee3/client/core/handlers/DrawBlockHighlightHandler.java @@ -123,8 +123,7 @@ public class DrawBlockHighlightHandler { public static void renderSlidingQuad(int texture, float transparency) { - float slide = (System.currentTimeMillis() % 3000) / 3000f; - double pulse = (double) 1 + slide; + float pulse = (System.currentTimeMillis() % 3000) / 3000f; GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture); Tessellator tessellator = Tessellator.instance; @@ -132,10 +131,10 @@ public class DrawBlockHighlightHandler { GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glColor4f(1, 1, 1, slide); + GL11.glColor4f(1, 1, 1, pulse); tessellator.startDrawingQuads(); - tessellator.setColorRGBA_F(1, 1, 1, slide); + tessellator.setColorRGBA_F(1, 1, 1, pulse); tessellator.addVertexWithUV(-0.5D, 0.5D, 0F, 0, 1); tessellator.addVertexWithUV(0.5D, 0.5D, 0F, 1, 1); From abae80d52d3184c2a886812638e75ca809526d42 Mon Sep 17 00:00:00 2001 From: pahimar Date: Fri, 30 Nov 2012 15:45:32 -0500 Subject: [PATCH 23/31] Formatting --- ee3_common/ee3/common/item/IChargeable.java | 2 +- .../ee3/common/item/ItemAlchemyDust.java | 90 +++++++++++-------- ee3_common/ee3/common/item/ItemEE.java | 1 + .../ee3/common/item/ItemInertStone.java | 13 +-- .../ee3/common/item/ItemMiniumStone.java | 4 +- .../ee3/common/item/ItemPhilosopherStone.java | 6 +- 6 files changed, 65 insertions(+), 51 deletions(-) diff --git a/ee3_common/ee3/common/item/IChargeable.java b/ee3_common/ee3/common/item/IChargeable.java index 58e9176c..11d111ce 100644 --- a/ee3_common/ee3/common/item/IChargeable.java +++ b/ee3_common/ee3/common/item/IChargeable.java @@ -5,7 +5,7 @@ import net.minecraft.src.ItemStack; public interface IChargeable { public abstract short getCharge(ItemStack stack); - + public abstract void setCharge(ItemStack stack, short charge); public abstract void increaseCharge(ItemStack stack); diff --git a/ee3_common/ee3/common/item/ItemAlchemyDust.java b/ee3_common/ee3/common/item/ItemAlchemyDust.java index 7aaa1bbe..8df1479b 100644 --- a/ee3_common/ee3/common/item/ItemAlchemyDust.java +++ b/ee3_common/ee3/common/item/ItemAlchemyDust.java @@ -26,60 +26,72 @@ import ee3.common.lib.Strings; */ public class ItemAlchemyDust extends ItemEE { - public static final String[] alchemyDustNames = new String[] {"ash", "minium", "verdant", "azure", "amaranthine", "iridescent"}; - - public ItemAlchemyDust(int id) { - super(id); - this.setHasSubtypes(true); + public static final String[] alchemyDustNames = new String[] { "ash", "minium", "verdant", "azure", "amaranthine", "iridescent" }; + + public ItemAlchemyDust(int id) { + + super(id); + this.setHasSubtypes(true); this.setMaxDamage(0); this.setIconCoord(0, 3); this.setItemName(Strings.ALCHEMY_DUST_NAME); this.setCreativeTab(EquivalentExchange3.tabsEE3); - maxStackSize = 64; - } - - @SideOnly(Side.CLIENT) + maxStackSize = 64; + } + + @SideOnly(Side.CLIENT) public int getIconFromDamage(int meta) { + int i = MathHelper.clamp_int(meta, 0, 11); return (this.iconIndex + i); } - - public String getItemNameIS(ItemStack stack) { + + public String getItemNameIS(ItemStack stack) { + int meta = MathHelper.clamp_int(stack.getItemDamage(), 0, 5); return super.getItemName() + "." + alchemyDustNames[meta]; } - - @SideOnly(Side.CLIENT) + + @SideOnly(Side.CLIENT) public boolean hasEffect(ItemStack stack) { - int meta = MathHelper.clamp_int(stack.getItemDamage(), 0, 5); - - if (meta == 5) { - return true; - } - else { - return false; - } + + int meta = MathHelper.clamp_int(stack.getItemDamage(), 0, 5); + + if (meta == 5) { + return true; + } + else { + return false; + } } - - @SideOnly(Side.CLIENT) + + @SideOnly(Side.CLIENT) public EnumRarity getRarity(ItemStack stack) { - int meta = MathHelper.clamp_int(stack.getItemDamage(), 0, 11); - - switch(meta) { - case 0: return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.NORMAL); - case 1: return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.NORMAL); - case 2: return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.UNCOMMON); - case 3: return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.MAGICAL); - case 4: return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.EPIC); - case 5: return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.LEGENDARY); - default: return EnumRarity.common; - } - + + int meta = MathHelper.clamp_int(stack.getItemDamage(), 0, 11); + + switch (meta) { + case 0: + return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.NORMAL); + case 1: + return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.NORMAL); + case 2: + return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.UNCOMMON); + case 3: + return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.MAGICAL); + case 4: + return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.EPIC); + case 5: + return EquivalentExchange3.proxy.getCustomRarityType(CustomItemRarity.LEGENDARY); + default: + return EnumRarity.common; + } + } - - @SideOnly(Side.CLIENT) - public void getSubItems(int id, CreativeTabs creativeTab, List list) - { + + @SideOnly(Side.CLIENT) + public void getSubItems(int id, CreativeTabs creativeTab, List list) { + for (int meta = 0; meta < 6; ++meta) { list.add(new ItemStack(id, 1, meta)); } diff --git a/ee3_common/ee3/common/item/ItemEE.java b/ee3_common/ee3/common/item/ItemEE.java index c2040708..f8b0a5cd 100644 --- a/ee3_common/ee3/common/item/ItemEE.java +++ b/ee3_common/ee3/common/item/ItemEE.java @@ -16,6 +16,7 @@ import net.minecraft.src.Item; public class ItemEE extends Item { public ItemEE(int id) { + super(id - Reference.SHIFTED_ID_RANGE_CORRECTION); maxStackSize = 1; setTextureFile(Sprites.SPRITE_SHEET_LOCATION + Sprites.ITEM_SPRITE_SHEET); diff --git a/ee3_common/ee3/common/item/ItemInertStone.java b/ee3_common/ee3/common/item/ItemInertStone.java index adea27bc..682cb2cc 100644 --- a/ee3_common/ee3/common/item/ItemInertStone.java +++ b/ee3_common/ee3/common/item/ItemInertStone.java @@ -14,11 +14,12 @@ import ee3.common.lib.Strings; */ public class ItemInertStone extends ItemEE { - public ItemInertStone(int id) { - super(id); - this.setIconCoord(1, 0); - this.setItemName(Strings.INERT_STONE_NAME); - this.setCreativeTab(EquivalentExchange3.tabsEE3); - } + public ItemInertStone(int id) { + + super(id); + this.setIconCoord(1, 0); + this.setItemName(Strings.INERT_STONE_NAME); + this.setCreativeTab(EquivalentExchange3.tabsEE3); + } } diff --git a/ee3_common/ee3/common/item/ItemMiniumStone.java b/ee3_common/ee3/common/item/ItemMiniumStone.java index f9d432ec..95749376 100644 --- a/ee3_common/ee3/common/item/ItemMiniumStone.java +++ b/ee3_common/ee3/common/item/ItemMiniumStone.java @@ -28,8 +28,8 @@ import ee3.common.network.PacketTypeHandler; * @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html) * */ -public class ItemMiniumStone extends ItemEE implements ITransmutationStone, - IKeyBound { +public class ItemMiniumStone extends ItemEE + implements ITransmutationStone, IKeyBound { public ItemMiniumStone(int id) { diff --git a/ee3_common/ee3/common/item/ItemPhilosopherStone.java b/ee3_common/ee3/common/item/ItemPhilosopherStone.java index c0ada593..800a370c 100644 --- a/ee3_common/ee3/common/item/ItemPhilosopherStone.java +++ b/ee3_common/ee3/common/item/ItemPhilosopherStone.java @@ -28,8 +28,8 @@ import net.minecraft.src.World; * @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html) * */ -public class ItemPhilosopherStone extends ItemEE implements - ITransmutationStone, IChargeable, IKeyBound { +public class ItemPhilosopherStone extends ItemEE + implements ITransmutationStone, IChargeable, IKeyBound { private int maxChargeLevel; @@ -124,7 +124,7 @@ public class ItemPhilosopherStone extends ItemEE implements thePlayer.worldObj.playSoundAtEntity(thePlayer, Sounds.CHARGE_DOWN, 0.5F, 1.0F - (0.5F - (0.5F * (getCharge(itemStack) * 1.0F / maxChargeLevel)))); } } - + } } From f0cc3df80e1e7d88b0162ea4313107a988e227fc Mon Sep 17 00:00:00 2001 From: Wliu Date: Fri, 30 Nov 2012 16:49:58 -0500 Subject: [PATCH 24/31] Revert "Fix derps" This reverts commit 627282a52f0caf0e2e3d1baea5af00a7be59a4a6. --- build.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build.xml b/build.xml index 3123821f..6fec9fb8 100644 --- a/build.xml +++ b/build.xml @@ -133,25 +133,25 @@ - + - + - + - + - + - + From 9cfa4356517dcfa9e8b263ef67bf4b1430210542 Mon Sep 17 00:00:00 2001 From: Wliu Date: Fri, 30 Nov 2012 16:50:03 -0500 Subject: [PATCH 25/31] Revert "Update mcp.version" This reverts commit e718df4b305455006e57dfadc2e2699807842a0e. --- build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.xml b/build.xml index 6fec9fb8..c3b9401b 100644 --- a/build.xml +++ b/build.xml @@ -9,7 +9,7 @@ - + From 034d48ffafa07610e091033799d892c57aef4513 Mon Sep 17 00:00:00 2001 From: Wliu Date: Fri, 30 Nov 2012 16:50:08 -0500 Subject: [PATCH 26/31] Revert "Fix build.xml" This reverts commit 610adb7e2700b33944dec097ad8726e5608cab06. --- build.xml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/build.xml b/build.xml index c3b9401b..a8e70653 100644 --- a/build.xml +++ b/build.xml @@ -2,11 +2,11 @@ - + - + - + @@ -116,7 +116,6 @@ - @@ -176,7 +175,6 @@ - - + \ No newline at end of file From 2535fc9200031c057534de169bcbf232253bc5a5 Mon Sep 17 00:00:00 2001 From: Wliu Date: Fri, 30 Nov 2012 16:50:11 -0500 Subject: [PATCH 27/31] Revert "Update build.xml" This reverts commit 50a50073c4f019ef6626e5532a3f574648061d4c. --- build.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build.xml b/build.xml index a8e70653..fca94abb 100644 --- a/build.xml +++ b/build.xml @@ -98,6 +98,11 @@ + + + + + From d567439ce9591cd05be90d73b8c51600f0b0ec01 Mon Sep 17 00:00:00 2001 From: Wliu Date: Fri, 30 Nov 2012 16:50:14 -0500 Subject: [PATCH 28/31] Revert "Update build.xml" This reverts commit ef51bcb12581c75c5cb9bb593bc182db5709fd44. --- build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.xml b/build.xml index fca94abb..19de2fe8 100644 --- a/build.xml +++ b/build.xml @@ -4,7 +4,7 @@ - Date: Fri, 30 Nov 2012 16:50:17 -0500 Subject: [PATCH 29/31] Revert "Update build.xml" This reverts commit ec961a79fc3b226ecf3751e87b9b60118c13f1e4. --- build.xml | 175 +++++++++++------------------------------------------- 1 file changed, 36 insertions(+), 139 deletions(-) diff --git a/build.xml b/build.xml index 19de2fe8..97c6e84c 100644 --- a/build.xml +++ b/build.xml @@ -1,139 +1,20 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - + + + - + @@ -160,26 +41,42 @@ - + - - - - + - - - - - + + + + + - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 40e28c73e92c02d5545e018e2796417079415098 Mon Sep 17 00:00:00 2001 From: Wliu Date: Fri, 30 Nov 2012 16:55:30 -0500 Subject: [PATCH 30/31] Update README.md Updated README.md. --- README.md | 55 ++++++++++++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 40360de2..36f7b004 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ ## Welcome to Equivalent Exchange 3! -Setup MCP was done mostly by Minalien, I just changed it a bit. Some credit goes to BuildCraft's README.md, which I based this README off of. +Setup MCP was done mostly by the people who update the wiki, I just changed it a bit. Some credit goes to BuildCraft's README.md, which I based this README off of. The Minecraft Forums page can be found [here] (http://www.minecraftforum.net/topic/1540010-equivalent-exchange-3). ### Compiling Equivalent Exchange 3 -IMPORTANT: This is not guaranteed to work as it has not been tested extensively (only done on Linux so far, partly on Windows). +IMPORTANT: This is not guaranteed to work as it has not been tested extensively (Linux and Windows tested). ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ #### Prerequisites (Tested for Windows 7 ONLY!) -1. Download and install the Java JDK [here](http://www.oracle.com/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html). Just scroll down. +1. Download and install the Java JDK [here](http://www.oracle.com/technetwork/java/javase/downloads/index.html). Click the one that says `Java Platform (JDK) #u#`, and follow instructions. * Go to `Control Panel\System and Security\System`, and click on `Advanced System Settings` on the left-hand side. * Click on `Environment Variables`. * Under `System Variables`, click `New`. @@ -15,7 +15,7 @@ ________________________________________________________________________________ * For `Variable Value`, input something similar to `;C:\Program Files (x86)\Java\jdk1.7.0_09` exactly as shown to the end.(or wherever your Java JDK installation is), and click `Ok`. * Scroll down to a variable named `Path`, and double-click on it. * Append `;C:\Program Files (x86)\Java\jdk1.7.0_09\bin` (or wherever your Java JDK installation is \bin), and click `Ok`. -2. Download and Apache Ant [here] (http://ant.apache.org). +2. Download Apache Ant [here] (http://ant.apache.org). * Unzip the files anywhere you want, eg `C:\Program Files (x86)\Ant`. * Again, go to `Environment Variables` just like you did for the Java JDK. * Under `System Variables`, click `New`. @@ -25,35 +25,32 @@ ________________________________________________________________________________ * Append `;C:\Ant\apache-ant-1.8.4\bin` exactly as shown to the end (or your Ant directory \apache-ant-1.8.4\bin). 3. Download and install Github [here] (http://windows.github.com/). * Create an account. - * Go back to the Equivalent-Exchange-3 directory [here] (http://github.com/pahimar/Equivalent-Exchange-3). - * Click `Clone to Windows` near the top-left of the page. + * Scroll to the top of this page, login at the top-right, and then click `Clone to Windows` near the top-left of the page.. * You should see Github flash and `pahimar/Equivalent-Exchange-3` appear. (The local repository defaults to `C:\Users\(username)\Documents\GitHub\Equivalent-Exchange-3`, you can change it if you want but then you have to find it again on Github). 4. Create an empty directory for EE3 development. This directory is refernced as `mcdev` from now on. It can be where you cloned EE3, but it'll be a little messy. -5. You are now ready to Setup MCP! +5. You are now ready to setup MCP! #### Setup MCP (Linux and Windows 7 tested) -1. Download the latest version of MCP from [here] (http://mcp.ocean-labs.de/index.php/MCP_Releases) , e.g. mcp723.zip. Install MCP dependencies as listed on the website if neccessary. +1. Download the latest version of MCP from [here] (http://mcp.ocean-labs.de/index.php/MCP_Releases), e.g. mcp723.zip. Install MCP dependencies as listed on the website if neccessary. 2. Inside `mcdev`, create a directory named `mcp` and unzip the MCP .zip file into it. + * To verify, check if a file name `CHANGELOG` exists inside `mcp`. +3. Get an unmodded copy of minecraft's `bin` folder. Currently EE3 runs on 1.4.5 but that might have changed. -3. To verify, check if a file name `CHANGELOG` exists inside the `mcp` directory. +4. From your `.minecraft` directory (on Windows, defaults to `%appdata%\.minecraft`), copy the `bin` and the `resources` (not sure if necessary) directory to the `jars` directory inside `mcp`. (Forge might do this for you, not confirmed.) -4. Get a clean (unmodded!) copy of minecraft's `bin` folder. Currently EE3 runs on 1.4.5 but that might have changed. +5. Get an unmodded copy of `minecraft_server.jar` and also place it into `jars`. (Forge might do this for you) -5. From your `.minecraft` directory (on Windows, defaults to `%appdata%\.minecraft`), copy the `bin` and the `resources` (I don't think you need resources on Windows 7) directory to the `jars` directory inside `mcp`. (I actually believe Forge's installation might do it for you) +6. Download the latest forge **source** for Minecraft 1.4.5 and unzip it into `mcp` so that `mcp\forge\install.sh` exists. You need at least Forge 6.4.0, best way is to get it from [here] (http://files.minecraftforge.net/). -6. Get a clean (unmodded!) copy of `minecraft_server.jar` and also place it into `jars`. (Forge might do this for you) +7. Execute `install.sh` (Linux and Mac) or `install.cmd` (Windows), both found in `mcdev\mcp\forge`. On Linux you might have to `chmod +x` `install.sh` before you can execute it. On some system configurations you need to execute `install.sh` from within the `forge` directory whereas on others it doesn't matter. Just check the output for error messages to find out what you need to do. -7. Download the latest forge **source** for Minecraft 1.4.5 and unzip it into `mcp` so that `mcp/forge/install.sh` exists. You need at least Forge 6.4.0, best way is to get it from [here] (http://files.minecraftforge.net/). +#### Setup EE3 (Some tested for Linux, tested fully for Windows) +1. Inside `mcdev`, create a directory named `source`. -8. Execute `install.sh` (Linux and Mac?) or `install.cmd` (Windows), both found in `mcdev/mcp/forge`. On Linux you might have to `chmod +x` `install.sh` before you can execute it. On some system configurations you need to execute `install.sh` from within the `forge` directory whereas on others it doesn't matter. Just check the output for error messages to find out what you need to do. - -#### Setup EE3 (Some tested for Linux, some for Windows) -1. Inside `mcdev`, create a directory named `source`. If you're doing this from the default clone directory, make two folders: `source` and `Equivalent-Exchange-3`. Copy and paste the original files into `Equivalent-Exchange-3`, and then move that into `source`. - -2. If you haven't already, move/clone `Equivalent-Exchange-3` into `source`. +2. Move/clone `Equivalent-Exchange-3` into `source`. 3. Right now, you should have a directory that looks something like: @@ -61,31 +58,31 @@ ________________________________________________________________________________ mcdev \-mcp - \-mcp stuff blablabla (should have CHANGELOG). + \-complicated mcp stuff (should have CHANGELOG). \-forge \-jars \-source \-Equivalent-Exchange-3 - \-EE3's files, including build.xml. + \-EE3's files, (should have build.xml). *** 4. Inside `Equivalent-Exchange-3`, create a new file called `build.properties`. * Open it up, and type into it the following: * `dir.development=../../` - * `dir.share=Shared` (or what you want it to be) + * `dir.share=Shared` (or what you want it to be-optional) * `dir.release=Releases` (what you want it to be) - * `release.minecraft.version=1.4.5` (as of 11/21) + * `release.minecraft.version=1.4.5` (as of 11/30) * `release.mod.version=pre2` (or whatever version # want it to be) 5. [FOR WINDOWS] Open up `cmd` by typing `cmd` in Run. -6. [FOR WINDOWS] Navigate to `mcdev\source` by executing `cd mcdev's location\source`. - -7. Inside `sources\Equivalent-Exchange-3` execute `ant release`. If you've done everything right, `BUILD SUCCESSFUL` is displayed. If not, you probably did something wrong. - -8. Go to `mcdev\source\Equivalent-Exchange-3\Releases\1.4.5\pre2` (or whatever you put into `build.properties` for `dir.release`, `release.minecraft.version`, and `release.mod.version`). You should see a .jar named `ee3-universal-pre2.jar` (or whatever you put into `release.mod.version`). +6. [FOR WINDOWS] Navigate to `mcdev\source\Equivalent-Exchange-3` by executing `cd mcdev's location\source\Equivalent-Exchange-3`. +7. Execute `ant release`. This will generally take around 5-15 minutes, depending on your computer. If you've done everything right, `BUILD SUCCESSFUL` is displayed after it finishes. + * If you see `BUILD FAILED`, check the error output (it should be right around `BUILD FAILED`), fix everything, and try again. +8. Go to `mcdev\source\Equivalent-Exchange-3\Releases\1.4.5\pre2` (This might be different according to what you put in build.properties). + * You should see a .jar named `ee3-universal-pre2.jar` (Again, might be different). 9. Copy the jar into your Minecraft mods folder, and play Minecraft! -### To Update EE3 (For Windows Only?) +### To Update EE3 (For Windows/Mac?) 1. Check to see if pahimar updated EE3 since you last compiled. If he/she did, follow these instructions. 2. Open Github. From bc1740ebee280b93fdb707a49264e0169ec6506b Mon Sep 17 00:00:00 2001 From: pahimar Date: Fri, 30 Nov 2012 22:45:54 -0500 Subject: [PATCH 31/31] Some work on getting bags off the ground, also learned how to do multiple render passes and overlays of overlays (yay!). Note: the bags aren't functional at all yet; just viewable in game. Much more work to be done. --- .../core/handlers/ConfigurationHandler.java | 3 + .../ee3/common/item/ItemAlchemyBag.java | 130 ++++++++++++++++++ .../ee3/common/item/ItemAlchemyDust.java | 6 +- ee3_common/ee3/common/item/ModItems.java | 2 + ee3_common/ee3/common/lib/Colours.java | 22 ++- ee3_common/ee3/common/lib/ItemIds.java | 2 + ee3_common/ee3/common/lib/Strings.java | 1 + resources/ee3/art/sprites/ee3_items.png | Bin 6841 -> 7008 bytes resources/ee3/art/sprites/xcf/ee3_items.xcf | Bin 33717 -> 41145 bytes resources/ee3/lang/en_US.xml | 16 +++ 10 files changed, 177 insertions(+), 5 deletions(-) create mode 100644 ee3_common/ee3/common/item/ItemAlchemyBag.java diff --git a/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java b/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java index 294d66cc..1ce26b67 100644 --- a/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java +++ b/ee3_common/ee3/common/core/handlers/ConfigurationHandler.java @@ -83,6 +83,9 @@ public class ConfigurationHandler { ItemIds.ALCHEMY_DUST = configuration .getItem(Strings.ALCHEMY_DUST_NAME, ItemIds.ALCHEMY_DUST_DEFAULT) .getInt(ItemIds.ALCHEMY_DUST_DEFAULT); + ItemIds.ALCHEMY_BAG = configuration + .getItem(Strings.ALCHEMY_BAG_NAME, ItemIds.ALCHEMY_BAG_DEFAULT) + .getInt(ItemIds.ALCHEMY_BAG_DEFAULT); /* KeyBinding Configs */ configuration.addCustomCategoryComment(CATEGORY_KEYBIND, ""); diff --git a/ee3_common/ee3/common/item/ItemAlchemyBag.java b/ee3_common/ee3/common/item/ItemAlchemyBag.java new file mode 100644 index 00000000..3a1a52aa --- /dev/null +++ b/ee3_common/ee3/common/item/ItemAlchemyBag.java @@ -0,0 +1,130 @@ +package ee3.common.item; + +import java.util.List; + +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.ItemStack; +import net.minecraft.src.MathHelper; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.common.Side; +import cpw.mods.fml.common.asm.SideOnly; +import ee3.common.EquivalentExchange3; +import ee3.common.lib.Colours; +import ee3.common.lib.Strings; + +public class ItemAlchemyBag extends ItemEE { + + public static final String[] alchemyBagNames = new String[] { "white", "orange", "magenta", "light_blue", "yellow", "lime", "pink", "gray", "light_gray", "cyan", "purple", "blue", "brown", "green", "red", "black" }; + + public ItemAlchemyBag(int id) { + + super(id); + this.setHasSubtypes(true); + this.setIconCoord(6, 0); + this.setItemName(Strings.ALCHEMY_BAG_NAME); + this.setCreativeTab(EquivalentExchange3.tabsEE3); + } + + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + + return true; + } + + @SideOnly(Side.CLIENT) + public int getIconFromDamageForRenderPass(int meta, int renderPass) { + + if (renderPass == 0) { + return this.getIconFromDamage(meta); + } + else { + return this.getIconFromDamage(meta) + 1; + } + } + + @SideOnly(Side.CLIENT) + public int getIconFromDamage(int meta) { + + if (FMLClientHandler.instance().getClient().currentScreen != null) { + return (this.iconIndex + 2); + } + + return this.iconIndex; + } + + @SideOnly(Side.CLIENT) + public String getItemNameIS(ItemStack stack) { + + int meta = MathHelper.clamp_int(stack.getItemDamage(), 0, 15); + return super.getItemName() + "." + alchemyBagNames[meta]; + } + + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack itemStack, int renderPass) { + + int returnValue = Integer.parseInt(Colours.PURE_WHITE, 16); + + if (renderPass == 0) { + switch (itemStack.getItemDamage()) { + case 0: + returnValue = Integer.parseInt(Colours.BAG_WHITE, 16); + break; + case 1: + returnValue = Integer.parseInt(Colours.BAG_ORANGE, 16); + break; + case 2: + returnValue = Integer.parseInt(Colours.BAG_MAGENTA, 16); + break; + case 3: + returnValue = Integer.parseInt(Colours.BAG_LIGHT_BLUE, 16); + break; + case 4: + returnValue = Integer.parseInt(Colours.BAG_YELLOW, 16); + break; + case 5: + returnValue = Integer.parseInt(Colours.BAG_LIME, 16); + break; + case 6: + returnValue = Integer.parseInt(Colours.BAG_PINK, 16); + break; + case 7: + returnValue = Integer.parseInt(Colours.BAG_GRAY, 16); + break; + case 8: + returnValue = Integer.parseInt(Colours.BAG_LIGHT_GRAY, 16); + break; + case 9: + returnValue = Integer.parseInt(Colours.BAG_CYAN, 16); + break; + case 10: + returnValue = Integer.parseInt(Colours.BAG_PURPLE, 16); + break; + case 11: + returnValue = Integer.parseInt(Colours.BAG_BLUE, 16); + break; + case 12: + returnValue = Integer.parseInt(Colours.BAG_BROWN, 16); + break; + case 13: + returnValue = Integer.parseInt(Colours.BAG_GREEN, 16); + break; + case 14: + returnValue = Integer.parseInt(Colours.BAG_RED, 16); + break; + case 15: + returnValue = Integer.parseInt(Colours.BAG_BLACK, 16); + break; + } + } + return returnValue; + } + + @SideOnly(Side.CLIENT) + public void getSubItems(int id, CreativeTabs creativeTab, List list) { + + for (int meta = 0; meta < 16; ++meta) { + list.add(new ItemStack(id, 1, meta)); + } + } + +} diff --git a/ee3_common/ee3/common/item/ItemAlchemyDust.java b/ee3_common/ee3/common/item/ItemAlchemyDust.java index 8df1479b..d7de84be 100644 --- a/ee3_common/ee3/common/item/ItemAlchemyDust.java +++ b/ee3_common/ee3/common/item/ItemAlchemyDust.java @@ -32,8 +32,7 @@ public class ItemAlchemyDust extends ItemEE { super(id); this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setIconCoord(0, 3); + this.setIconCoord(10, 0); this.setItemName(Strings.ALCHEMY_DUST_NAME); this.setCreativeTab(EquivalentExchange3.tabsEE3); maxStackSize = 64; @@ -42,10 +41,11 @@ public class ItemAlchemyDust extends ItemEE { @SideOnly(Side.CLIENT) public int getIconFromDamage(int meta) { - int i = MathHelper.clamp_int(meta, 0, 11); + int i = MathHelper.clamp_int(meta, 0, 5); return (this.iconIndex + i); } + @SideOnly(Side.CLIENT) public String getItemNameIS(ItemStack stack) { int meta = MathHelper.clamp_int(stack.getItemDamage(), 0, 5); diff --git a/ee3_common/ee3/common/item/ModItems.java b/ee3_common/ee3/common/item/ModItems.java index aa91c16c..60105f0d 100644 --- a/ee3_common/ee3/common/item/ModItems.java +++ b/ee3_common/ee3/common/item/ModItems.java @@ -27,6 +27,7 @@ public class ModItems { public static Item miniumStone; public static Item philStone; public static Item alchemyDust; + public static Item alchemyBag; public static void init() { /* Initialize each mod item individually */ @@ -35,6 +36,7 @@ public class ModItems { miniumStone = new ItemMiniumStone(ItemIds.MINIUM_STONE); philStone = new ItemPhilosopherStone(ItemIds.PHILOSOPHER_STONE); alchemyDust = new ItemAlchemyDust(ItemIds.ALCHEMY_DUST); + alchemyBag = new ItemAlchemyBag(ItemIds.ALCHEMY_BAG); miniumStone.setContainerItem(miniumStone); philStone.setContainerItem(philStone); diff --git a/ee3_common/ee3/common/lib/Colours.java b/ee3_common/ee3/common/lib/Colours.java index a65fe95f..760104a3 100644 --- a/ee3_common/ee3/common/lib/Colours.java +++ b/ee3_common/ee3/common/lib/Colours.java @@ -10,12 +10,30 @@ package ee3.common.lib; * */ public class Colours { - + + public static final String PURE_WHITE = "ffffff"; public static final String PURE_RED = "ff0000"; /* Text colour related constants */ public static final String TEXT_COLOUR_PREFIX_YELLOW = "\u00a7e"; - public static final String TEXT_COLOUR_PREFIX_WHITE = "\u00a7f"; + /* Bag colour related constants */ + public static final String BAG_WHITE = "ffffff"; + public static final String BAG_ORANGE = "db7d3e"; + public static final String BAG_MAGENTA = "b350bc"; + public static final String BAG_LIGHT_BLUE = "6b8ac9"; + public static final String BAG_YELLOW = "b1a627"; + public static final String BAG_LIME = "41ae38"; + public static final String BAG_PINK = "d08499"; + public static final String BAG_GRAY = "868d8d"; + public static final String BAG_LIGHT_GRAY = "c8c8be"; + public static final String BAG_CYAN = "2e6e89"; + public static final String BAG_PURPLE = "7e3db5"; + public static final String BAG_BLUE = "2e388d"; + public static final String BAG_BROWN = "4f321f"; + public static final String BAG_GREEN = "35461b"; + public static final String BAG_RED = "963430"; + public static final String BAG_BLACK = "404040"; + } diff --git a/ee3_common/ee3/common/lib/ItemIds.java b/ee3_common/ee3/common/lib/ItemIds.java index aa098633..e4be319b 100644 --- a/ee3_common/ee3/common/lib/ItemIds.java +++ b/ee3_common/ee3/common/lib/ItemIds.java @@ -17,6 +17,7 @@ public class ItemIds { public static int MINIUM_STONE_DEFAULT = 27002; public static int PHILOSOPHER_STONE_DEFAULT = 27003; public static int ALCHEMY_DUST_DEFAULT = 27004; + public static int ALCHEMY_BAG_DEFAULT = 27005; /* Current item ids */ public static int MINIUM_SHARD; @@ -24,5 +25,6 @@ public class ItemIds { public static int MINIUM_STONE; public static int PHILOSOPHER_STONE; public static int ALCHEMY_DUST; + public static int ALCHEMY_BAG; } diff --git a/ee3_common/ee3/common/lib/Strings.java b/ee3_common/ee3/common/lib/Strings.java index dbca0c37..bcc8ec3c 100644 --- a/ee3_common/ee3/common/lib/Strings.java +++ b/ee3_common/ee3/common/lib/Strings.java @@ -29,6 +29,7 @@ public class Strings { public static final String MINIUM_STONE_NAME = "miniumStone"; public static final String PHILOSOPHER_STONE_NAME = "philStone"; public static final String ALCHEMY_DUST_NAME = "alchemyDust"; + public static final String ALCHEMY_BAG_NAME = "alchemyBag"; /* TileEntity name constants */ public static final String TE_CALCINATOR_NAME = "tileCalcinator"; diff --git a/resources/ee3/art/sprites/ee3_items.png b/resources/ee3/art/sprites/ee3_items.png index 0294c74aa960cc49f4efe5b3f9eb06460db3c56f..bbb839e0241cc7b1efc8d1166fc84321f0b73e3c 100644 GIT binary patch literal 7008 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 JtK%5+{{ZAo<2V2S literal 6841 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 HZIJLUjdM;0 diff --git a/resources/ee3/lang/en_US.xml b/resources/ee3/lang/en_US.xml index 66e55db6..0f91b2bf 100644 --- a/resources/ee3/lang/en_US.xml +++ b/resources/ee3/lang/en_US.xml @@ -16,6 +16,22 @@ Azure Dust Amaranthine Dust Iridescent Dust + White Alchemical Bag + Orange Alchemical Bag + Magenta Alchemical Bag + Light Blue Alchemical Bag + Yellow Alchemical Bag + Lime Alchemical Bag + Pink Alchemical Bag + Gray Alchemical Bag + Light Gray Alchemical Bag + Cyan Alchemical Bag + Purple Alchemical Bag + Blue Alchemical Bag + Brown Alchemical Bag + Green Alchemical Bag + Red Alchemical Bag + Black Alchemical Bag Red Water (Still) Red Water (Flowing) Calcinator