From 2a4b3a8a4f6d1a181dba3f8c2f6347b5999babcc Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 3 Dec 2015 22:49:31 +0100 Subject: [PATCH] Changed how lenses work. Better to see now. Still needs documentation however. --- InterModCommsInfo.md | 3 +- .../actuallyadditions/ActuallyAdditions.java | 4 +- .../blocks/BlockAtomicReconstructor.java | 4 +- .../render/RenderReconstructorLens.java | 4 +- .../booklet/InitBooklet.java | 8 +- .../booklet/page/PageReconstructor.java | 19 ++- .../communication/InterModCommunications.java | 17 +-- .../items/IReconstructorLens.java | 18 --- .../actuallyadditions/items/InitItems.java | 9 +- .../items/{ => lens}/ItemLens.java | 14 +-- .../actuallyadditions/items/lens/Lens.java | 35 ++++++ .../items/lens/LensColor.java | 95 +++++++++++++++ .../items/lens/LensDeath.java | 48 ++++++++ .../items/lens/LensDetonation.java | 40 +++++++ .../items/lens/LensNone.java | 96 +++++++++++++++ .../lens/LensNoneRecipeHandler.java} | 109 ++--------------- .../actuallyadditions/items/lens/Lenses.java | 23 ++++ .../nei/NEIReconstructorRecipe.java | 21 ++-- .../network/PacketAtomicReconstructor.java | 9 +- .../tile/TileEntityAtomicReconstructor.java | 111 ++---------------- .../ellpeck/actuallyadditions/util/Util.java | 6 +- .../actuallyadditions/util/WorldPos.java | 6 + 22 files changed, 414 insertions(+), 285 deletions(-) delete mode 100644 src/main/java/ellpeck/actuallyadditions/items/IReconstructorLens.java rename src/main/java/ellpeck/actuallyadditions/items/{ => lens}/ItemLens.java (75%) create mode 100644 src/main/java/ellpeck/actuallyadditions/items/lens/Lens.java create mode 100644 src/main/java/ellpeck/actuallyadditions/items/lens/LensColor.java create mode 100644 src/main/java/ellpeck/actuallyadditions/items/lens/LensDeath.java create mode 100644 src/main/java/ellpeck/actuallyadditions/items/lens/LensDetonation.java create mode 100644 src/main/java/ellpeck/actuallyadditions/items/lens/LensNone.java rename src/main/java/ellpeck/actuallyadditions/{recipe/ReconstructorRecipeHandler.java => items/lens/LensNoneRecipeHandler.java} (60%) create mode 100644 src/main/java/ellpeck/actuallyadditions/items/lens/Lenses.java diff --git a/InterModCommsInfo.md b/InterModCommsInfo.md index 35c343bf1..f91608188 100644 --- a/InterModCommsInfo.md +++ b/InterModCommsInfo.md @@ -41,10 +41,9 @@ The two Brackets will have to get replaced with one of the parts of Information - To the Compound, add an int with the name "maxAmount" that contains the maximum size of the ItemStack - Send the Message with "registerTreasureChestRecipe" as the [X] Argument, the Compound as the [Y] Argument. -##### Reconstructor Recipes +##### Reconstructor Recipes (For Recipes without a Lens) - Create an NBTTagCompound - To the Compound, add a String with the name "input" that is the Input's OreDictionary Name - To the Compound, add a String with the name "output" that is the Output's OreDictionary Name - To the Compound, add an int with the name "energyUse" that is the amount of RF used -- To the Compound, add an int with the name "lensType" that contains the LensType's ID (found in LensType in ReconstructorRecipeHandler, the ID is the ordinal) - Send the Message with "registerReconstructorRecipe" as the [X] Argument, the Compound as the [Y] Argument. diff --git a/src/main/java/ellpeck/actuallyadditions/ActuallyAdditions.java b/src/main/java/ellpeck/actuallyadditions/ActuallyAdditions.java index dad606acb..f250b8c4a 100644 --- a/src/main/java/ellpeck/actuallyadditions/ActuallyAdditions.java +++ b/src/main/java/ellpeck/actuallyadditions/ActuallyAdditions.java @@ -30,6 +30,7 @@ import ellpeck.actuallyadditions.inventory.GuiHandler; import ellpeck.actuallyadditions.items.InitForeignPaxels; import ellpeck.actuallyadditions.items.InitItems; import ellpeck.actuallyadditions.items.ItemCoffee; +import ellpeck.actuallyadditions.items.lens.LensNoneRecipeHandler; import ellpeck.actuallyadditions.material.InitArmorMaterials; import ellpeck.actuallyadditions.material.InitToolMaterials; import ellpeck.actuallyadditions.misc.*; @@ -38,7 +39,6 @@ import ellpeck.actuallyadditions.ore.InitOreDict; import ellpeck.actuallyadditions.proxy.IProxy; import ellpeck.actuallyadditions.recipe.FuelHandler; import ellpeck.actuallyadditions.recipe.HairyBallHandler; -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; import ellpeck.actuallyadditions.recipe.TreasureChestHandler; import ellpeck.actuallyadditions.tile.TileEntityBase; import ellpeck.actuallyadditions.update.UpdateChecker; @@ -102,7 +102,7 @@ public class ActuallyAdditions{ ItemCrafting.initMashedFoodRecipes(); HairyBallHandler.init(); TreasureChestHandler.init(); - ReconstructorRecipeHandler.init(); + LensNoneRecipeHandler.init(); InitForeignPaxels.init(); InitBooklet.init(); diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockAtomicReconstructor.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockAtomicReconstructor.java index 9b520a1bf..3764379bd 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockAtomicReconstructor.java @@ -13,7 +13,7 @@ package ellpeck.actuallyadditions.blocks; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.blocks.base.BlockContainerBase; -import ellpeck.actuallyadditions.items.IReconstructorLens; +import ellpeck.actuallyadditions.items.lens.ItemLens; import ellpeck.actuallyadditions.tile.TileEntityAtomicReconstructor; import ellpeck.actuallyadditions.util.ModUtil; import net.minecraft.block.Block; @@ -82,7 +82,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase{ if(!player.isSneaking()){ ItemStack heldItem = player.getCurrentEquippedItem(); if(heldItem != null){ - if(heldItem.getItem() instanceof IReconstructorLens && reconstructor.getStackInSlot(0) == null){ + if(heldItem.getItem() instanceof ItemLens && reconstructor.getStackInSlot(0) == null){ ItemStack toPut = heldItem.copy(); toPut.stackSize = 1; reconstructor.setInventorySlotContents(0, toPut); diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/render/RenderReconstructorLens.java b/src/main/java/ellpeck/actuallyadditions/blocks/render/RenderReconstructorLens.java index 37abdd0fa..dfc96657d 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/render/RenderReconstructorLens.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/render/RenderReconstructorLens.java @@ -10,7 +10,7 @@ package ellpeck.actuallyadditions.blocks.render; -import ellpeck.actuallyadditions.items.IReconstructorLens; +import ellpeck.actuallyadditions.items.lens.ItemLens; import ellpeck.actuallyadditions.tile.TileEntityAtomicReconstructor; import ellpeck.actuallyadditions.util.AssetUtil; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -27,7 +27,7 @@ public class RenderReconstructorLens extends TileEntitySpecialRenderer{ } ItemStack stack = ((TileEntityAtomicReconstructor)tile).getStackInSlot(0); - if(stack != null && stack.getItem() instanceof IReconstructorLens){ + if(stack != null && stack.getItem() instanceof ItemLens){ GL11.glPushMatrix(); GL11.glTranslatef((float)x+0.5F, (float)y-0.5F, (float)z+0.5F); GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); diff --git a/src/main/java/ellpeck/actuallyadditions/booklet/InitBooklet.java b/src/main/java/ellpeck/actuallyadditions/booklet/InitBooklet.java index ea589c95f..7031f18eb 100644 --- a/src/main/java/ellpeck/actuallyadditions/booklet/InitBooklet.java +++ b/src/main/java/ellpeck/actuallyadditions/booklet/InitBooklet.java @@ -23,10 +23,10 @@ import ellpeck.actuallyadditions.config.values.ConfigIntValues; import ellpeck.actuallyadditions.crafting.*; import ellpeck.actuallyadditions.gen.OreGen; import ellpeck.actuallyadditions.items.InitItems; +import ellpeck.actuallyadditions.items.lens.LensNoneRecipeHandler; import ellpeck.actuallyadditions.items.metalists.TheFoods; import ellpeck.actuallyadditions.items.metalists.TheMiscItems; import ellpeck.actuallyadditions.items.metalists.TheSpecialDrops; -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; import ellpeck.actuallyadditions.tile.*; import ellpeck.actuallyadditions.util.Util; import net.minecraft.item.ItemStack; @@ -62,13 +62,13 @@ public class InitBooklet{ //Getting Started chapterIntro = new BookletChapter("intro", entryGettingStarted, new ItemStack(InitItems.itemBooklet), new PageTextOnly(1), new PageTextOnly(2), new PageTextOnly(3)); new BookletChapter("bookTutorial", entryGettingStarted, new ItemStack(InitItems.itemBooklet), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeBook)); - new BookletChapter("crystals", entryGettingStarted, new ItemStack(InitBlocks.blockAtomicReconstructor), new PageTextOnly(1).addTextReplacement("", TileEntityAtomicReconstructor.ENERGY_USE), new PageTextOnly(2), new PagePicture(3, "pageAtomicReconstructor", 0).setNoText(), new PageTextOnly(4), new PageCrafting(5, BlockCrafting.recipeAtomicReconstructor).setNoText(), new PageCrafting(6, MiscCrafting.recipesCrystals).setNoText(), new PageCrafting(7, MiscCrafting.recipesCrystalBlocks).setNoText(), new PageReconstructor(8, ReconstructorRecipeHandler.mainPageRecipes).setNoText()).setSpecial(); + new BookletChapter("crystals", entryGettingStarted, new ItemStack(InitBlocks.blockAtomicReconstructor), new PageTextOnly(1).addTextReplacement("", TileEntityAtomicReconstructor.ENERGY_USE), new PageTextOnly(2), new PagePicture(3, "pageAtomicReconstructor", 0).setNoText(), new PageTextOnly(4), new PageCrafting(5, BlockCrafting.recipeAtomicReconstructor).setNoText(), new PageCrafting(6, MiscCrafting.recipesCrystals).setNoText(), new PageCrafting(7, MiscCrafting.recipesCrystalBlocks).setNoText(), new PageReconstructor(8, LensNoneRecipeHandler.mainPageRecipes).setNoText()).setSpecial(); new BookletChapter("coalGen", entryGettingStarted, new ItemStack(InitBlocks.blockCoalGenerator), new PageCrafting(1, BlockCrafting.recipeCoalGen).addTextReplacement("", TileEntityCoalGenerator.PRODUCE)); new BookletChapter("craftingIngs", entryGettingStarted, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeCoil).setNoText(), new PageCrafting(3, ItemCrafting.recipeCoilAdvanced).setNoText(), new PageCrafting(4, BlockCrafting.recipeCase).setNoText(), new PageCrafting(5, BlockCrafting.recipeStoneCase).setNoText(), new PageCrafting(6, BlockCrafting.recipeEnderPearlBlock).setNoText(), new PageCrafting(7, BlockCrafting.recipeEnderCase).setNoText(), new PageCrafting(8, ItemCrafting.recipeRing).setNoText(), new PageCrafting(9, ItemCrafting.recipeKnifeHandle).setNoText(), new PageCrafting(10, ItemCrafting.recipeKnifeBlade).setNoText(), new PageCrafting(11, ItemCrafting.recipeKnife).setNoText(), new PageCrafting(12, ItemCrafting.recipeDough).setNoText(), new PageCrafting(13, ItemCrafting.recipeRiceDough).setNoText(), new PageCrafting(14, BlockCrafting.recipeIronCase).setNoText()).setImportant(); //Miscellaneous - new BookletChapter("reconstructorLenses", entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLens).setNoText(), new PageReconstructor(3, ReconstructorRecipeHandler.recipeColorLens), new PageReconstructor(4, ReconstructorRecipeHandler.colorConversionRecipes).setNoText(), new PageReconstructor(5, ReconstructorRecipeHandler.recipeExplosionLens), new PageReconstructor(6, ReconstructorRecipeHandler.recipeDamageLens), new PageReconstructor(7, ReconstructorRecipeHandler.recipeSoulSand).setNoText(), new PageReconstructor(8, ReconstructorRecipeHandler.recipeLeather).setNoText()).setImportant(); - new BookletChapter("miscDecorStuffsAndThings", entryMisc, new ItemStack(InitBlocks.blockTestifiBucksGreenWall), new PageTextOnly(1), new PageReconstructor(2, ReconstructorRecipeHandler.recipeWhiteWall).setNoText(), new PageReconstructor(3, ReconstructorRecipeHandler.recipeGreenWall).setNoText()); + new BookletChapter("reconstructorLenses", entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLens).setNoText(), new PageReconstructor(3, LensNoneRecipeHandler.recipeColorLens), new PageReconstructor(4, LensNoneRecipeHandler.recipeExplosionLens), new PageReconstructor(5, LensNoneRecipeHandler.recipeDamageLens), new PageReconstructor(6, LensNoneRecipeHandler.recipeSoulSand).setNoText(), new PageReconstructor(7, LensNoneRecipeHandler.recipeLeather).setNoText()).setImportant(); + new BookletChapter("miscDecorStuffsAndThings", entryMisc, new ItemStack(InitBlocks.blockTestifiBucksGreenWall), new PageTextOnly(1), new PageReconstructor(2, LensNoneRecipeHandler.recipeWhiteWall).setNoText(), new PageReconstructor(3, LensNoneRecipeHandler.recipeGreenWall).setNoText()); new BookletChapter("bookStand", entryMisc, new ItemStack(InitBlocks.blockBookletStand), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeBookStand)); new BookletChapter("quartz", entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), new PageTextOnly(1).setStack(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal())).addTextReplacement("", OreGen.QUARTZ_MIN).addTextReplacement("", OreGen.QUARTZ_MAX), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())), new PageCrafting(3, BlockCrafting.recipeQuartzBlock).setNoText(), new PageCrafting(4, BlockCrafting.recipeQuartzPillar).setNoText(), new PageCrafting(5, BlockCrafting.recipeQuartzChiseled).setNoText()); new BookletChapter("cloud", entryMisc, new ItemStack(InitBlocks.blockSmileyCloud), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeSmileyCloud).setNoText()).setSpecial(); diff --git a/src/main/java/ellpeck/actuallyadditions/booklet/page/PageReconstructor.java b/src/main/java/ellpeck/actuallyadditions/booklet/page/PageReconstructor.java index 74b5e2104..542f6644d 100644 --- a/src/main/java/ellpeck/actuallyadditions/booklet/page/PageReconstructor.java +++ b/src/main/java/ellpeck/actuallyadditions/booklet/page/PageReconstructor.java @@ -14,8 +14,8 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.blocks.InitBlocks; import ellpeck.actuallyadditions.booklet.GuiBooklet; +import ellpeck.actuallyadditions.items.lens.LensNoneRecipeHandler; import ellpeck.actuallyadditions.proxy.ClientProxy; -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; import ellpeck.actuallyadditions.util.ModUtil; import ellpeck.actuallyadditions.util.StringUtil; import ellpeck.actuallyadditions.util.Util; @@ -27,14 +27,14 @@ import java.util.List; public class PageReconstructor extends BookletPage{ - private ReconstructorRecipeHandler.Recipe[] recipes; + private LensNoneRecipeHandler.Recipe[] recipes; private int recipePos; - public PageReconstructor(int id, ArrayList recipes){ - this(id, recipes.toArray(new ReconstructorRecipeHandler.Recipe[recipes.size()])); + public PageReconstructor(int id, ArrayList recipes){ + this(id, recipes.toArray(new LensNoneRecipeHandler.Recipe[recipes.size()])); } - public PageReconstructor(int id, ReconstructorRecipeHandler.Recipe... recipes){ + public PageReconstructor(int id, LensNoneRecipeHandler.Recipe... recipes){ super(id); this.recipes = recipes; this.addToPagesWithItemStackData(); @@ -44,7 +44,7 @@ public class PageReconstructor extends BookletPage{ public ItemStack[] getItemStacksForPage(){ if(this.recipes != null){ ArrayList stacks = new ArrayList(); - for(ReconstructorRecipeHandler.Recipe recipe : this.recipes){ + for(LensNoneRecipeHandler.Recipe recipe : this.recipes){ if(recipe != null){ stacks.addAll(recipe.getOutputs()); } @@ -67,18 +67,13 @@ public class PageReconstructor extends BookletPage{ @Override @SideOnly(Side.CLIENT) public void render(GuiBooklet gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ - ReconstructorRecipeHandler.Recipe recipe = this.recipes[this.recipePos]; + LensNoneRecipeHandler.Recipe recipe = this.recipes[this.recipePos]; if(recipe == null){ gui.mc.fontRenderer.drawSplitString(EnumChatFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.guiLeft+14, gui.guiTop+15, 115, 0); } else{ String strg = "Atomic Reconstructor"; gui.mc.fontRenderer.drawString(strg, gui.guiLeft+gui.xSize/2-gui.mc.fontRenderer.getStringWidth(strg)/2, gui.guiTop+10, 0); - - //Lens - ItemStack lens = recipe.type.lens; - strg = lens == null ? StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".noLens") : lens.getItem().getItemStackDisplayName(lens); - gui.mc.fontRenderer.drawString(strg, gui.guiLeft+gui.xSize/2-gui.mc.fontRenderer.getStringWidth(strg)/2, gui.guiTop+75, 0); } String text = gui.currentPage.getText(); diff --git a/src/main/java/ellpeck/actuallyadditions/communication/InterModCommunications.java b/src/main/java/ellpeck/actuallyadditions/communication/InterModCommunications.java index 3765dde45..007d24eab 100644 --- a/src/main/java/ellpeck/actuallyadditions/communication/InterModCommunications.java +++ b/src/main/java/ellpeck/actuallyadditions/communication/InterModCommunications.java @@ -12,9 +12,9 @@ package ellpeck.actuallyadditions.communication; import cpw.mods.fml.common.event.FMLInterModComms; import ellpeck.actuallyadditions.items.ItemCoffee; +import ellpeck.actuallyadditions.items.lens.LensNoneRecipeHandler; import ellpeck.actuallyadditions.recipe.CrusherRecipeRegistry; import ellpeck.actuallyadditions.recipe.HairyBallHandler; -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; import ellpeck.actuallyadditions.recipe.TreasureChestHandler; import ellpeck.actuallyadditions.util.ModUtil; import net.minecraft.item.ItemStack; @@ -108,20 +108,13 @@ public class InterModCommunications{ String input = compound.getString("input"); String output = compound.getString("output"); int energyUse = compound.getInteger("energyUse"); - int lensType = compound.getInteger("lensType"); - if(ReconstructorRecipeHandler.LensType.values().length > lensType && input != null && output != null){ - ReconstructorRecipeHandler.LensType type = ReconstructorRecipeHandler.LensType.values()[lensType]; - if(type.hasRecipes){ - ReconstructorRecipeHandler.addRecipe(input, output, energyUse, type); - ModUtil.LOGGER.info("Reconstructor Recipe that was sent from Mod "+message.getSender()+" has been registered successfully: "+input+" -> "+output+" @ "+energyUse+" with LensType "+lensType); - } - else{ - ModUtil.LOGGER.error("Reconstructor Recipe that was sent from Mod "+message.getSender()+" could not be registered: It's trying to register for a Lens Type ("+lensType+") that can't have recipes added!"); - } + if(input != null && output != null){ + LensNoneRecipeHandler.addRecipe(input, output, energyUse); + ModUtil.LOGGER.info("Reconstructor Recipe that was sent from Mod "+message.getSender()+" has been registered successfully: "+input+" -> "+output+" @ "+energyUse+"."); } else{ - ModUtil.LOGGER.error("Reconstructor Recipe that was sent from Mod "+message.getSender()+" could not be registered: It's missing an Output, an Input or a LensType!"); + ModUtil.LOGGER.error("Reconstructor Recipe that was sent from Mod "+message.getSender()+" could not be registered: It's missing an Input or an Output!"); } } } diff --git a/src/main/java/ellpeck/actuallyadditions/items/IReconstructorLens.java b/src/main/java/ellpeck/actuallyadditions/items/IReconstructorLens.java deleted file mode 100644 index 3102bbfa7..000000000 --- a/src/main/java/ellpeck/actuallyadditions/items/IReconstructorLens.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * This file ("ILens.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015 Ellpeck - */ - -package ellpeck.actuallyadditions.items; - -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; - -public interface IReconstructorLens{ - - ReconstructorRecipeHandler.LensType getLensType(); -} diff --git a/src/main/java/ellpeck/actuallyadditions/items/InitItems.java b/src/main/java/ellpeck/actuallyadditions/items/InitItems.java index 6b3d1dea7..982b93f71 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/InitItems.java +++ b/src/main/java/ellpeck/actuallyadditions/items/InitItems.java @@ -12,11 +12,12 @@ package ellpeck.actuallyadditions.items; import ellpeck.actuallyadditions.blocks.InitBlocks; import ellpeck.actuallyadditions.items.base.*; +import ellpeck.actuallyadditions.items.lens.ItemLens; +import ellpeck.actuallyadditions.items.lens.Lenses; import ellpeck.actuallyadditions.items.metalists.TheFoods; import ellpeck.actuallyadditions.items.metalists.TheMiscItems; import ellpeck.actuallyadditions.material.InitArmorMaterials; import ellpeck.actuallyadditions.material.InitToolMaterials; -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; import ellpeck.actuallyadditions.util.CompatUtil; import ellpeck.actuallyadditions.util.ModUtil; import net.minecraft.init.Items; @@ -136,9 +137,9 @@ public class InitItems{ public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); - itemColorLens = new ItemLens("itemColorLens", ReconstructorRecipeHandler.LensType.COLOR); - itemExplosionLens = new ItemLens("itemExplosionLens", ReconstructorRecipeHandler.LensType.DETONATION); - itemDamageLens = new ItemLens("itemDamageLens", ReconstructorRecipeHandler.LensType.JUST_DAMAGE); + itemColorLens = new ItemLens("itemColorLens", Lenses.LENS_COLOR); + itemExplosionLens = new ItemLens("itemExplosionLens", Lenses.LENS_DETONATION); + itemDamageLens = new ItemLens("itemDamageLens", Lenses.LENS_DEATH); itemCrystal = new ItemCrystal("itemCrystal"); itemLaserWrench = new ItemLaserWrench("itemLaserWrench"); itemChestToCrateUpgrade = new ItemChestToCrateUpgrade("itemChestToCrateUpgrade"); diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemLens.java b/src/main/java/ellpeck/actuallyadditions/items/lens/ItemLens.java similarity index 75% rename from src/main/java/ellpeck/actuallyadditions/items/ItemLens.java rename to src/main/java/ellpeck/actuallyadditions/items/lens/ItemLens.java index c2876868a..7cb0a80b1 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemLens.java +++ b/src/main/java/ellpeck/actuallyadditions/items/lens/ItemLens.java @@ -8,26 +8,25 @@ * © 2015 Ellpeck */ -package ellpeck.actuallyadditions.items; +package ellpeck.actuallyadditions.items.lens; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.items.base.ItemBase; -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; import ellpeck.actuallyadditions.util.ModUtil; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; -public class ItemLens extends ItemBase implements IReconstructorLens{ +public class ItemLens extends ItemBase{ - private ReconstructorRecipeHandler.LensType type; + private Lens type; - public ItemLens(String name, ReconstructorRecipeHandler.LensType type){ + public ItemLens(String name, Lens type){ super(name); this.type = type; - this.type.setLens(this); + this.type.setLensItem(this); this.setMaxStackSize(1); } @@ -48,8 +47,7 @@ public class ItemLens extends ItemBase implements IReconstructorLens{ return this.itemIcon; } - @Override - public ReconstructorRecipeHandler.LensType getLensType(){ + public Lens getLensType(){ return this.type; } } diff --git a/src/main/java/ellpeck/actuallyadditions/items/lens/Lens.java b/src/main/java/ellpeck/actuallyadditions/items/lens/Lens.java new file mode 100644 index 000000000..56597fa3d --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/lens/Lens.java @@ -0,0 +1,35 @@ +/* + * This file ("Lens.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.items.lens; + +import ellpeck.actuallyadditions.tile.TileEntityAtomicReconstructor; +import ellpeck.actuallyadditions.util.WorldPos; +import net.minecraft.item.Item; + +public abstract class Lens{ + + protected Item lensItem; + + public abstract boolean invoke(WorldPos hitBlock, TileEntityAtomicReconstructor tile); + + public abstract float[] getColor(); + + public abstract int getDistance(); + + public Lens register(){ + Lenses.allLenses.add(this); + return this; + } + + public void setLensItem(Item item){ + this.lensItem = item; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/items/lens/LensColor.java b/src/main/java/ellpeck/actuallyadditions/items/lens/LensColor.java new file mode 100644 index 000000000..b6e82edf9 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/lens/LensColor.java @@ -0,0 +1,95 @@ +/* + * This file ("LensColor.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.items.lens; + +import ellpeck.actuallyadditions.blocks.InitBlocks; +import ellpeck.actuallyadditions.tile.TileEntityAtomicReconstructor; +import ellpeck.actuallyadditions.util.Util; +import ellpeck.actuallyadditions.util.WorldPos; +import net.minecraft.block.Block; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.util.AxisAlignedBB; + +import java.util.ArrayList; + +public class LensColor extends Lens{ + + //Thanks to xdjackiexd for this, as I couldn't be bothered + private static final float[][] possibleColorLensColors = { + {158F, 43F, 39F}, //Red + {234F, 126F, 53F}, //Orange + {194F, 181F, 28F}, //Yellow + {57F, 186F, 46F}, //Lime Green + {54F, 75F, 24F}, //Green + {99F, 135F, 210F}, //Light Blue + {38F, 113F, 145F}, //Cyan + {37F, 49F, 147F}, //Blue + {126F, 52F, 191F}, //Purple + {190F, 73F, 201F}, //Magenta + {217F, 129F, 153F}, //Pink + {86F, 51F, 28F}, //Brown + }; + + private static final Object[] CONVERTABLE_BLOCKS = new Object[]{ + Items.dye, + Blocks.wool, + Blocks.stained_glass, + Blocks.stained_glass_pane, + Blocks.stained_hardened_clay, + InitBlocks.blockColoredLamp, + InitBlocks.blockColoredLampOn + }; + + @SuppressWarnings("unchecked") + @Override + public boolean invoke(WorldPos hitBlock, TileEntityAtomicReconstructor tile){ + if(hitBlock != null){ + if(Util.arrayContains(CONVERTABLE_BLOCKS, hitBlock.getBlock()) >= 0){ + int meta = hitBlock.getMetadata(); + if(meta >= 15){ + hitBlock.setMetadata(0, 2); + } + else{ + hitBlock.setMetadata(meta+1, 2); + } + } + + ArrayList items = (ArrayList)tile.getWorldObj().getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.getBoundingBox(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), hitBlock.getX()+1, hitBlock.getY()+1, hitBlock.getZ()+1)); + for(EntityItem item : items){ + if(item.getEntityItem() != null){ + if(Util.arrayContains(CONVERTABLE_BLOCKS, item.getEntityItem().getItem()) >= 0 || Util.arrayContains(CONVERTABLE_BLOCKS, Block.getBlockFromItem(item.getEntityItem().getItem())) >= 0){ + int meta = item.getEntityItem().getItemDamage(); + if(meta >= 15){ + item.getEntityItem().setItemDamage(0); + } + else{ + item.getEntityItem().setItemDamage(meta+1); + } + } + } + } + } + return false; + } + + @Override + public float[] getColor(){ + float[] colors = possibleColorLensColors[Util.RANDOM.nextInt(possibleColorLensColors.length)]; + return new float[]{colors[0]/255F, colors[1]/255F, colors[2]/255F}; + } + + @Override + public int getDistance(){ + return 10; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/items/lens/LensDeath.java b/src/main/java/ellpeck/actuallyadditions/items/lens/LensDeath.java new file mode 100644 index 000000000..0fc623f9b --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/lens/LensDeath.java @@ -0,0 +1,48 @@ +/* + * This file ("LensDeath.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.items.lens; + +import ellpeck.actuallyadditions.misc.DamageSources; +import ellpeck.actuallyadditions.tile.TileEntityAtomicReconstructor; +import ellpeck.actuallyadditions.util.WorldPos; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.AxisAlignedBB; + +import java.util.ArrayList; + +public class LensDeath extends Lens{ + + @SuppressWarnings("unchecked") + @Override + public boolean invoke(WorldPos hitBlock, TileEntityAtomicReconstructor tile){ + int use = 150; //Per Block (because it doesn't only activate when something is hit like the other lenses!) + if(tile.storage.getEnergyStored() >= use){ + tile.storage.extractEnergy(use, false); + + ArrayList entities = (ArrayList)tile.getWorldObj().getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), hitBlock.getX()+1, hitBlock.getY()+1, hitBlock.getZ()+1)); + for(EntityLivingBase entity : entities){ + entity.attackEntityFrom(DamageSources.DAMAGE_ATOMIC_RECONSTRUCTOR, 20F); + } + } + + return hitBlock != null && !hitBlock.getBlock().isAir(hitBlock.getWorld(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ()); + } + + @Override + public float[] getColor(){ + return new float[]{188F/255F, 222F/255F, 1F}; + } + + @Override + public int getDistance(){ + return 15; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/items/lens/LensDetonation.java b/src/main/java/ellpeck/actuallyadditions/items/lens/LensDetonation.java new file mode 100644 index 000000000..79a8ce3a0 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/lens/LensDetonation.java @@ -0,0 +1,40 @@ +/* + * This file ("LensDetonation.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.items.lens; + +import ellpeck.actuallyadditions.tile.TileEntityAtomicReconstructor; +import ellpeck.actuallyadditions.util.WorldPos; + +public class LensDetonation extends Lens{ + + @Override + public boolean invoke(WorldPos hitBlock, TileEntityAtomicReconstructor tile){ + if(hitBlock != null && !hitBlock.getBlock().isAir(hitBlock.getWorld(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ())){ + int use = 500000; + if(tile.storage.getEnergyStored() >= use){ + tile.getWorldObj().newExplosion(null, hitBlock.getX()+0.5, hitBlock.getY()+0.5, hitBlock.getZ()+0.5, 10F, true, true); + tile.storage.extractEnergy(use, false); + } + return true; + } + return false; + } + + @Override + public float[] getColor(){ + return new float[]{158F/255F, 43F/255F, 39F/255F}; + } + + @Override + public int getDistance(){ + return 30; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/items/lens/LensNone.java b/src/main/java/ellpeck/actuallyadditions/items/lens/LensNone.java new file mode 100644 index 000000000..4a6ed8ae9 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/lens/LensNone.java @@ -0,0 +1,96 @@ +/* + * This file ("LensNone.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.items.lens; + +import ellpeck.actuallyadditions.tile.TileEntityAtomicReconstructor; +import ellpeck.actuallyadditions.util.WorldPos; +import net.minecraft.block.Block; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; + +import java.util.ArrayList; +import java.util.List; + +public class LensNone extends Lens{ + + @SuppressWarnings("unchecked") + @Override + public boolean invoke(WorldPos hitBlock, TileEntityAtomicReconstructor tile){ + if(hitBlock != null && !hitBlock.getBlock().isAir(hitBlock.getWorld(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ())){ + int range = 2; + + //Converting the Blocks + for(int reachX = -range; reachX < range+1; reachX++){ + for(int reachZ = -range; reachZ < range+1; reachZ++){ + for(int reachY = -range; reachY < range+1; reachY++){ + WorldPos pos = new WorldPos(tile.getWorldObj(), hitBlock.getX()+reachX, hitBlock.getY()+reachY, hitBlock.getZ()+reachZ); + ArrayList recipes = LensNoneRecipeHandler.getRecipesFor(new ItemStack(pos.getBlock(), 1, pos.getMetadata())); + for(LensNoneRecipeHandler.Recipe recipe : recipes){ + if(recipe != null && tile.storage.getEnergyStored() >= recipe.energyUse){ + List outputs = recipe.getOutputs(); + if(outputs != null && !outputs.isEmpty()){ + ItemStack output = outputs.get(0); + if(output.getItem() instanceof ItemBlock){ + tile.getWorldObj().playAuxSFX(2001, pos.getX(), pos.getY(), pos.getZ(), Block.getIdFromBlock(pos.getBlock())+(pos.getMetadata() << 12)); + pos.setBlock(Block.getBlockFromItem(output.getItem()), output.getItemDamage(), 2); + } + else{ + EntityItem item = new EntityItem(tile.getWorldObj(), pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, output.copy()); + tile.getWorldObj().spawnEntityInWorld(item); + } + tile.storage.extractEnergy(recipe.energyUse, false); + break; + } + } + } + } + } + } + + //Converting the Items + ArrayList items = (ArrayList)tile.getWorldObj().getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.getBoundingBox(hitBlock.getX()-range, hitBlock.getY()-range, hitBlock.getZ()-range, hitBlock.getX()+range, hitBlock.getY()+range, hitBlock.getZ()+range)); + for(EntityItem item : items){ + ItemStack stack = item.getEntityItem(); + if(stack != null){ + ArrayList recipes = LensNoneRecipeHandler.getRecipesFor(stack); + for(LensNoneRecipeHandler.Recipe recipe : recipes){ + if(recipe != null && tile.storage.getEnergyStored() >= recipe.energyUse){ + List outputs = recipe.getOutputs(); + if(outputs != null && !outputs.isEmpty()){ + ItemStack outputCopy = outputs.get(0).copy(); + outputCopy.stackSize = stack.stackSize; + item.setEntityItemStack(outputCopy); + + tile.storage.extractEnergy(recipe.energyUse, false); + break; + } + } + } + } + } + return true; + } + return false; + } + + @Override + public float[] getColor(){ + return new float[]{27F/255F, 109F/255F, 1F}; + } + + @Override + public int getDistance(){ + return 10; + } + +} diff --git a/src/main/java/ellpeck/actuallyadditions/recipe/ReconstructorRecipeHandler.java b/src/main/java/ellpeck/actuallyadditions/items/lens/LensNoneRecipeHandler.java similarity index 60% rename from src/main/java/ellpeck/actuallyadditions/recipe/ReconstructorRecipeHandler.java rename to src/main/java/ellpeck/actuallyadditions/items/lens/LensNoneRecipeHandler.java index c98a186fb..6a06643c1 100644 --- a/src/main/java/ellpeck/actuallyadditions/recipe/ReconstructorRecipeHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/items/lens/LensNoneRecipeHandler.java @@ -1,5 +1,5 @@ /* - * This file ("AtomicReconstructorRecipeHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("LensNoneRecipeHandler.java") is part of the Actually Additions Mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md @@ -8,10 +8,9 @@ * © 2015 Ellpeck */ -package ellpeck.actuallyadditions.recipe; +package ellpeck.actuallyadditions.items.lens; import ellpeck.actuallyadditions.blocks.InitBlocks; -import ellpeck.actuallyadditions.blocks.metalists.TheColoredLampColors; import ellpeck.actuallyadditions.config.values.ConfigCrafting; import ellpeck.actuallyadditions.items.InitItems; import ellpeck.actuallyadditions.items.metalists.TheCrystals; @@ -20,7 +19,6 @@ import ellpeck.actuallyadditions.util.ItemUtil; import ellpeck.actuallyadditions.util.Util; import net.minecraft.init.Blocks; import net.minecraft.init.Items; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; @@ -28,7 +26,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -public class ReconstructorRecipeHandler{ +public class LensNoneRecipeHandler{ public static ArrayList recipes = new ArrayList(); @@ -40,7 +38,6 @@ public class ReconstructorRecipeHandler{ public static Recipe recipeExplosionLens; public static Recipe recipeDamageLens; public static Recipe recipeLeather; - public static ArrayList colorConversionRecipes = new ArrayList(); public static void init(){ //Crystal Blocks @@ -94,48 +91,20 @@ public class ReconstructorRecipeHandler{ recipeLeather = Util.GetRecipes.lastReconstructorRecipe(); addRecipe(new ItemStack(Blocks.quartz_block), new ItemStack(InitBlocks.blockTestifiBucksWhiteWall), 10); recipeWhiteWall = Util.GetRecipes.lastReconstructorRecipe(); - addRecipe(new ItemStack(Blocks.quartz_block), new ItemStack(InitBlocks.blockTestifiBucksGreenWall), 10, LensType.COLOR); + addRecipe(new ItemStack(Blocks.quartz_block, 1, 1), new ItemStack(InitBlocks.blockTestifiBucksGreenWall), 10); recipeGreenWall = Util.GetRecipes.lastReconstructorRecipe(); - - //Colors - for(int i = 0; i < TheColoredLampColors.values().length-1; i++){ - addRecipe("dye"+TheColoredLampColors.values()[i].name, "dye"+TheColoredLampColors.values()[i+1].name, 2000, LensType.COLOR); - colorConversionRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); - addRecipe(new ItemStack(Blocks.wool, 1, i), new ItemStack(Blocks.wool, 1, i+1), 2000, LensType.COLOR); - colorConversionRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); - addRecipe(new ItemStack(Blocks.stained_hardened_clay, 1, i), new ItemStack(Blocks.stained_hardened_clay, 1, i+1), 2000, LensType.COLOR); - colorConversionRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); - addRecipe("blockGlass"+TheColoredLampColors.values()[i].name, "blockGlass"+TheColoredLampColors.values()[i+1].name, 2000, LensType.COLOR); - colorConversionRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); - } - addRecipe("dye"+TheColoredLampColors.values()[15].name, "dye"+TheColoredLampColors.values()[0].name, 2000, LensType.COLOR); - colorConversionRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); - addRecipe(new ItemStack(Blocks.wool, 1, 15), new ItemStack(Blocks.wool, 1, 0), 2000, LensType.COLOR); - colorConversionRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); - addRecipe(new ItemStack(Blocks.stained_hardened_clay, 1, 15), new ItemStack(Blocks.stained_hardened_clay, 1, 0), 2000, LensType.COLOR); - colorConversionRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); - addRecipe("blockGlass"+TheColoredLampColors.values()[15].name, "blockGlass"+TheColoredLampColors.values()[0].name, 2000, LensType.COLOR); - colorConversionRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); } } public static void addRecipe(ItemStack input, ItemStack output, int energyUse){ - addRecipe(input, output, energyUse, LensType.NONE); + recipes.add(new Recipe(input, output, energyUse)); } - public static void addRecipe(ItemStack input, ItemStack output, int energyUse, LensType type){ - if(type.hasRecipes){ - recipes.add(new Recipe(input, output, energyUse, type)); - } + public static void addRecipe(String input, String output, int energyUse){ + recipes.add(new Recipe(input, output, energyUse)); } - public static void addRecipe(String input, String output, int energyUse, LensType type){ - if(type.hasRecipes){ - recipes.add(new Recipe(input, output, energyUse, type)); - } - } - - public static ArrayList getRecipes(ItemStack input){ + public static ArrayList getRecipesFor(ItemStack input){ ArrayList possibleRecipes = new ArrayList(); for(Recipe recipe : recipes){ if(ItemUtil.contains(recipe.getInputs(), input, true)){ @@ -145,82 +114,25 @@ public class ReconstructorRecipeHandler{ return possibleRecipes; } - public enum LensType{ - - NONE(true), - COLOR(true), - DETONATION(false), - JUST_DAMAGE(false); - - //Thanks to xdjackiexd for this, as I couldn't be bothered - private static final float[][] possibleColorLensColors = { - {158F, 43F, 39F}, //Red - {234F, 126F, 53F}, //Orange - {194F, 181F, 28F}, //Yellow - {57F, 186F, 46F}, //Lime Green - {54F, 75F, 24F}, //Green - {99F, 135F, 210F}, //Light Blue - {38F, 113F, 145F}, //Cyan - {37F, 49F, 147F}, //Blue - {126F, 52F, 191F}, //Purple - {190F, 73F, 201F}, //Magenta - {217F, 129F, 153F}, //Pink - {86F, 51F, 28F}, //Brown - }; - public ItemStack lens; - public boolean hasRecipes; - - LensType(boolean hasRecipes){ - this.hasRecipes = hasRecipes; - } - - public float[] getColor(){ - if(this == COLOR){ - float[] colors = possibleColorLensColors[Util.RANDOM.nextInt(possibleColorLensColors.length)]; - return new float[]{colors[0]/255F, colors[1]/255F, colors[2]/255F}; - } - else if(this == DETONATION){ - return new float[]{158F/255F, 43F/255F, 39F/255F}; - } - else if(this == JUST_DAMAGE){ - return new float[]{188F/255F, 222F/255F, 1F}; - } - else{ - return new float[]{27F/255F, 109F/255F, 1F}; - } - } - - public void setLens(Item lens){ - this.lens = new ItemStack(lens); - } - - public int getDistance(){ - return this == DETONATION ? 30 : (this == JUST_DAMAGE ? 15 : 10); - } - } - public static class Recipe{ private String input; private String output; public int energyUse; - public LensType type; private ItemStack inputStack; private ItemStack outputStack; - public Recipe(ItemStack input, ItemStack output, int energyUse, LensType type){ + public Recipe(ItemStack input, ItemStack output, int energyUse){ this.inputStack = input; this.outputStack = output; this.energyUse = energyUse; - this.type = type; } - public Recipe(String input, String output, int energyUse, LensType type){ + public Recipe(String input, String output, int energyUse){ this.input = input; this.output = output; this.energyUse = energyUse; - this.type = type; } public List getOutputs(){ @@ -255,5 +167,4 @@ public class ReconstructorRecipeHandler{ return stacks; } } - } diff --git a/src/main/java/ellpeck/actuallyadditions/items/lens/Lenses.java b/src/main/java/ellpeck/actuallyadditions/items/lens/Lenses.java new file mode 100644 index 000000000..f0a675d7a --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/items/lens/Lenses.java @@ -0,0 +1,23 @@ +/* + * This file ("Lenses.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.items.lens; + +import java.util.ArrayList; + +public class Lenses{ + + public static ArrayList allLenses = new ArrayList(); + + public static final Lens LENS_NONE = new LensNone().register(); + public static final Lens LENS_DETONATION = new LensDetonation().register(); + public static final Lens LENS_DEATH = new LensDeath().register(); + public static final Lens LENS_COLOR = new LensColor().register(); +} diff --git a/src/main/java/ellpeck/actuallyadditions/nei/NEIReconstructorRecipe.java b/src/main/java/ellpeck/actuallyadditions/nei/NEIReconstructorRecipe.java index 2e6612ba4..2a9b5fb72 100644 --- a/src/main/java/ellpeck/actuallyadditions/nei/NEIReconstructorRecipe.java +++ b/src/main/java/ellpeck/actuallyadditions/nei/NEIReconstructorRecipe.java @@ -17,7 +17,7 @@ import codechicken.nei.recipe.TemplateRecipeHandler; import ellpeck.actuallyadditions.blocks.InitBlocks; import ellpeck.actuallyadditions.booklet.BookletUtils; import ellpeck.actuallyadditions.booklet.page.BookletPage; -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; +import ellpeck.actuallyadditions.items.lens.LensNoneRecipeHandler; import ellpeck.actuallyadditions.util.ItemUtil; import ellpeck.actuallyadditions.util.ModUtil; import ellpeck.actuallyadditions.util.StringUtil; @@ -58,8 +58,8 @@ public class NEIReconstructorRecipe extends TemplateRecipeHandler implements INE @Override public void loadCraftingRecipes(String outputId, Object... results){ if(outputId.equals(NAME) && getClass() == NEIReconstructorRecipe.class){ - ArrayList recipes = ReconstructorRecipeHandler.recipes; - for(ReconstructorRecipeHandler.Recipe recipe : recipes){ + ArrayList recipes = LensNoneRecipeHandler.recipes; + for(LensNoneRecipeHandler.Recipe recipe : recipes){ arecipes.add(new CachedReconstructorRecipe(recipe)); } } @@ -70,8 +70,8 @@ public class NEIReconstructorRecipe extends TemplateRecipeHandler implements INE @Override public void loadCraftingRecipes(ItemStack result){ - ArrayList recipes = ReconstructorRecipeHandler.recipes; - for(ReconstructorRecipeHandler.Recipe recipe : recipes){ + ArrayList recipes = LensNoneRecipeHandler.recipes; + for(LensNoneRecipeHandler.Recipe recipe : recipes){ if(ItemUtil.contains(recipe.getOutputs(), result, true)){ arecipes.add(new CachedReconstructorRecipe(recipe)); } @@ -80,8 +80,8 @@ public class NEIReconstructorRecipe extends TemplateRecipeHandler implements INE @Override public void loadUsageRecipes(ItemStack ingredient){ - ArrayList recipes = ReconstructorRecipeHandler.recipes; - for(ReconstructorRecipeHandler.Recipe recipe : recipes){ + ArrayList recipes = LensNoneRecipeHandler.recipes; + for(LensNoneRecipeHandler.Recipe recipe : recipes){ if(ItemUtil.contains(recipe.getInputs(), ingredient, true)){ CachedReconstructorRecipe theRecipe = new CachedReconstructorRecipe(recipe); theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.input), ingredient); @@ -117,9 +117,6 @@ public class NEIReconstructorRecipe extends TemplateRecipeHandler implements INE if(Minecraft.getMinecraft().currentScreen != null){ BookletPage.renderItem(Minecraft.getMinecraft().currentScreen, new ItemStack(InitBlocks.blockAtomicReconstructor), 32+34, 19, 1.0F); } - - CachedReconstructorRecipe cache = (CachedReconstructorRecipe)this.arecipes.get(recipe); - GuiDraw.drawString(cache.lens == null ? StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".noLens") : cache.lens.getItem().getItemStackDisplayName(cache.lens), 10, 45, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); } @Override @@ -131,12 +128,10 @@ public class NEIReconstructorRecipe extends TemplateRecipeHandler implements INE public PositionedStack result; public PositionedStack input; - public ItemStack lens; - public CachedReconstructorRecipe(ReconstructorRecipeHandler.Recipe recipe){ + public CachedReconstructorRecipe(LensNoneRecipeHandler.Recipe recipe){ this.result = new PositionedStack(recipe.getOutputs(), 67+32, 19); this.input = new PositionedStack(recipe.getInputs(), 5+32, 19); - this.lens = recipe.type.lens; } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/network/PacketAtomicReconstructor.java b/src/main/java/ellpeck/actuallyadditions/network/PacketAtomicReconstructor.java index 4d3e6de98..aecf73274 100644 --- a/src/main/java/ellpeck/actuallyadditions/network/PacketAtomicReconstructor.java +++ b/src/main/java/ellpeck/actuallyadditions/network/PacketAtomicReconstructor.java @@ -15,7 +15,8 @@ import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; +import ellpeck.actuallyadditions.items.lens.Lens; +import ellpeck.actuallyadditions.items.lens.Lenses; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.client.particle.EntityReddustFX; @@ -37,14 +38,14 @@ public class PacketAtomicReconstructor implements IMessage{ } - public PacketAtomicReconstructor(int startX, int startY, int startZ, int endX, int endY, int endZ, ReconstructorRecipeHandler.LensType type){ + public PacketAtomicReconstructor(int startX, int startY, int startZ, int endX, int endY, int endZ, Lens type){ this.startX = startX; this.startY = startY; this.startZ = startZ; this.endX = endX; this.endY = endY; this.endZ = endZ; - this.lensTypeOrdinal = type.ordinal(); + this.lensTypeOrdinal = Lenses.allLenses.indexOf(type); } @Override @@ -84,7 +85,7 @@ public class PacketAtomicReconstructor implements IMessage{ for(int times = 0; times < 5; times++){ for(double i = 0; i <= 1; i += 1/(distance*8)){ - ReconstructorRecipeHandler.LensType type = ReconstructorRecipeHandler.LensType.values()[message.lensTypeOrdinal]; + Lens type = Lenses.allLenses.get(message.lensTypeOrdinal); float[] color = type.getColor(); Minecraft.getMinecraft().effectRenderer.addEffect(new EntityReddustFX(world, (difX*i)+message.endX+0.5, (difY*i)+message.endY+0.5, (difZ*i)+message.endZ+0.5, 2F, color[0], color[1], color[2])); } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java index f0c02b959..5f7b33b7d 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java @@ -13,25 +13,17 @@ package ellpeck.actuallyadditions.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import cpw.mods.fml.common.network.NetworkRegistry; -import ellpeck.actuallyadditions.items.IReconstructorLens; -import ellpeck.actuallyadditions.misc.DamageSources; +import ellpeck.actuallyadditions.items.lens.ItemLens; +import ellpeck.actuallyadditions.items.lens.Lens; +import ellpeck.actuallyadditions.items.lens.Lenses; import ellpeck.actuallyadditions.network.PacketAtomicReconstructor; import ellpeck.actuallyadditions.network.PacketHandler; -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; import ellpeck.actuallyadditions.util.WorldPos; import ellpeck.actuallyadditions.util.WorldUtil; -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -import java.util.ArrayList; -import java.util.List; - public class TileEntityAtomicReconstructor extends TileEntityInventoryBase implements IEnergyReceiver{ public static final int ENERGY_USE = 200; @@ -56,86 +48,13 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple this.storage.extractEnergy(ENERGY_USE, false); //The Lens the Reconstructor currently has installed - ReconstructorRecipeHandler.LensType currentLens = this.getCurrentLens(); + Lens currentLens = this.getCurrentLens(); int distance = currentLens.getDistance(); for(int i = 0; i < distance; i++){ WorldPos hitBlock = WorldUtil.getCoordsFromSide(sideToManipulate, worldObj, xCoord, yCoord, zCoord, i); - float damage = 5F; - if(currentLens == ReconstructorRecipeHandler.LensType.JUST_DAMAGE){ - int use = 150; //Per Block (because it doesn't only activate when something is hit like the other lenses!) - if(this.storage.getEnergyStored() >= use){ - damage = 20F; - this.storage.extractEnergy(use, false); - } - } - this.damagePlayer(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), damage); - - if(hitBlock != null && !hitBlock.getBlock().isAir(hitBlock.getWorld(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ())){ + if(currentLens.invoke(hitBlock, this)){ this.shootLaser(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); - - //Detonation - if(currentLens == ReconstructorRecipeHandler.LensType.DETONATION){ - int use = 500000; - if(this.storage.getEnergyStored() >= use){ - this.worldObj.newExplosion(null, hitBlock.getX()+0.5, hitBlock.getY()+0.5, hitBlock.getZ()+0.5, 10F, true, true); - this.storage.extractEnergy(use, false); - } - } - //Conversion Recipes - else if(currentLens.hasRecipes){ - int range = 2; - - //Converting the Blocks - for(int reachX = -range; reachX < range+1; reachX++){ - for(int reachZ = -range; reachZ < range+1; reachZ++){ - for(int reachY = -range; reachY < range+1; reachY++){ - WorldPos pos = new WorldPos(worldObj, hitBlock.getX()+reachX, hitBlock.getY()+reachY, hitBlock.getZ()+reachZ); - ArrayList recipes = ReconstructorRecipeHandler.getRecipes(new ItemStack(pos.getBlock(), 1, pos.getMetadata())); - for(ReconstructorRecipeHandler.Recipe recipe : recipes){ - if(recipe != null && this.storage.getEnergyStored() >= recipe.energyUse && recipe.type == currentLens){ - List outputs = recipe.getOutputs(); - if(outputs != null && !outputs.isEmpty()){ - ItemStack output = outputs.get(0); - if(output.getItem() instanceof ItemBlock){ - this.worldObj.playAuxSFX(2001, pos.getX(), pos.getY(), pos.getZ(), Block.getIdFromBlock(pos.getBlock())+(pos.getMetadata() << 12)); - pos.setBlock(Block.getBlockFromItem(output.getItem()), output.getItemDamage(), 2); - } - else{ - EntityItem item = new EntityItem(worldObj, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, output.copy()); - worldObj.spawnEntityInWorld(item); - } - this.storage.extractEnergy(recipe.energyUse, false); - break; - } - } - } - } - } - } - - //Converting the Items - ArrayList items = (ArrayList)worldObj.getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.getBoundingBox(hitBlock.getX()-range, hitBlock.getY()-range, hitBlock.getZ()-range, hitBlock.getX()+range, hitBlock.getY()+range, hitBlock.getZ()+range)); - for(EntityItem item : items){ - ItemStack stack = item.getEntityItem(); - if(stack != null){ - ArrayList recipes = ReconstructorRecipeHandler.getRecipes(stack); - for(ReconstructorRecipeHandler.Recipe recipe : recipes){ - if(recipe != null && this.storage.getEnergyStored() >= recipe.energyUse && recipe.type == currentLens){ - List outputs = recipe.getOutputs(); - if(outputs != null && !outputs.isEmpty()){ - ItemStack outputCopy = outputs.get(0).copy(); - outputCopy.stackSize = stack.stackSize; - item.setEntityItemStack(outputCopy); - - this.storage.extractEnergy(recipe.energyUse, false); - break; - } - } - } - } - } - } break; } else if(i >= distance-1){ @@ -152,24 +71,16 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } - public ReconstructorRecipeHandler.LensType getCurrentLens(){ + public Lens getCurrentLens(){ if(this.slots[0] != null){ - if(this.slots[0].getItem() instanceof IReconstructorLens){ - return ((IReconstructorLens)this.slots[0].getItem()).getLensType(); + if(this.slots[0].getItem() instanceof ItemLens){ + return ((ItemLens)this.slots[0].getItem()).getLensType(); } } - return ReconstructorRecipeHandler.LensType.NONE; + return Lenses.LENS_NONE; } - @SuppressWarnings("unchecked") - public void damagePlayer(int x, int y, int z, float damage){ - ArrayList entities = (ArrayList)worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(x, y, z, x+1, y+1, z+1)); - for(EntityLivingBase entity : entities){ - entity.attackEntityFrom(DamageSources.DAMAGE_ATOMIC_RECONSTRUCTOR, damage); - } - } - - private void shootLaser(int endX, int endY, int endZ, ReconstructorRecipeHandler.LensType currentLens){ + private void shootLaser(int endX, int endY, int endZ, Lens currentLens){ PacketHandler.theNetwork.sendToAllAround(new PacketAtomicReconstructor(xCoord, yCoord, zCoord, endX, endY, endZ, currentLens), new NetworkRegistry.TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 64)); } @@ -194,7 +105,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return stack != null && stack.getItem() instanceof IReconstructorLens; + return stack != null && stack.getItem() instanceof ItemLens; } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/util/Util.java b/src/main/java/ellpeck/actuallyadditions/util/Util.java index 414b3eb06..96566bf8c 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/Util.java +++ b/src/main/java/ellpeck/actuallyadditions/util/Util.java @@ -11,8 +11,8 @@ package ellpeck.actuallyadditions.util; import cpw.mods.fml.common.FMLCommonHandler; +import ellpeck.actuallyadditions.items.lens.LensNoneRecipeHandler; import ellpeck.actuallyadditions.recipe.CrusherRecipeRegistry; -import ellpeck.actuallyadditions.recipe.ReconstructorRecipeHandler; import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; import net.minecraft.item.EnumRarity; @@ -66,8 +66,8 @@ public class Util{ public static class GetRecipes{ - public static ReconstructorRecipeHandler.Recipe lastReconstructorRecipe(){ - ArrayList list = ReconstructorRecipeHandler.recipes; + public static LensNoneRecipeHandler.Recipe lastReconstructorRecipe(){ + ArrayList list = LensNoneRecipeHandler.recipes; return list.get(list.size()-1); } diff --git a/src/main/java/ellpeck/actuallyadditions/util/WorldPos.java b/src/main/java/ellpeck/actuallyadditions/util/WorldPos.java index e9053bf0f..23a1e53d6 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/WorldPos.java +++ b/src/main/java/ellpeck/actuallyadditions/util/WorldPos.java @@ -64,6 +64,12 @@ public class WorldPos{ return this.getWorld() != null ? this.getWorld().getBlockMetadata(this.x, this.y, this.z) : 0; } + public void setMetadata(int meta, int flag){ + if(this.getWorld() != null){ + this.getWorld().setBlockMetadataWithNotify(this.x, this.y, this.z, meta, flag); + } + } + public boolean isEqual(WorldPos pos){ return pos != null && this.x == pos.getX() && this.y == pos.getY() && this.z == pos.getZ() && this.getWorld() == pos.getWorld(); }