From 2526d8e100be6564aab539370914abdd24859b3f Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 6 Dec 2020 01:37:35 +0100 Subject: [PATCH] hadron recipes, hopper IO, NEI --- src/main/java/assets/hbm/lang/de_DE.lang | 31 ++-- src/main/java/assets/hbm/lang/en_US.lang | 7 + .../hbm/textures/gui/gui_nei_hadron.png | Bin 0 -> 1684 bytes .../hbm/textures/gui/machine/gui_hadron.png | Bin 6355 -> 7491 bytes .../hbm/textures/items/particle_hydrogen.png | Bin 0 -> 274 bytes .../hbm/blocks/machine/BlockHadronAccess.java | 17 +- .../hbm/handler/nei/HadronRecipeHandler.java | 152 ++++++++++++++++++ .../java/com/hbm/inventory/HadronRecipes.java | 16 +- .../java/com/hbm/inventory/gui/GUIHadron.java | 23 +++ src/main/java/com/hbm/items/ModItems.java | 5 +- .../com/hbm/items/special/ItemDigamma.java | 83 ++++++++++ .../hbm/items/special/ItemRadioactive.java | 3 + src/main/java/com/hbm/main/NEIConfig.java | 6 +- .../hbm/tileentity/TileEntityProxyBase.java | 20 +++ .../tileentity/machine/TileEntityHadron.java | 85 ++++++++-- 15 files changed, 413 insertions(+), 35 deletions(-) create mode 100644 src/main/java/assets/hbm/textures/gui/gui_nei_hadron.png create mode 100644 src/main/java/assets/hbm/textures/items/particle_hydrogen.png create mode 100644 src/main/java/com/hbm/handler/nei/HadronRecipeHandler.java create mode 100644 src/main/java/com/hbm/items/special/ItemDigamma.java diff --git a/src/main/java/assets/hbm/lang/de_DE.lang b/src/main/java/assets/hbm/lang/de_DE.lang index 690c1133c..4593422f4 100644 --- a/src/main/java/assets/hbm/lang/de_DE.lang +++ b/src/main/java/assets/hbm/lang/de_DE.lang @@ -145,6 +145,7 @@ container.fusionaryWatzPlant=Fusionares Watzwerk container.gasCentrifuge=Gaszentrifuge container.gasFlare=Abfackelturm container.generator=Atomreaktor +container.hadron=Teilchenbeschleuniger container.iGenerator=Industrieller Generator container.keyForge=Schlossertisch container.launchPad=Raketenabschussrampe @@ -284,7 +285,9 @@ hadron.hopper1=§eTrichtermodus:$Ein Item bleibt immer übrig. hadron.idle=Leerlauf hadron.modeCircular=§eRingbeschleuniger:$Magnete bilden eine Schleife.$Schaltet mehr Rezepte frei. hadron.modeLine=§eLinearbeschleuniger:$Beschleuniger ended mit Analysekammer.$Weniger Rezepte. +hadron.noresult=Kein Ergebnis. hadron.progress=Verarbeite... +hadron.success=Abgeschlossen! hbmfluid.acid=Wasserstoffperoxid hbmfluid.amat=Antimaterie @@ -1469,16 +1472,17 @@ item.part_plutonium.name=Plutoniumstaubkiste item.particle_aelectron.name=Positronenkapsel item.particle_amat.name=Antimaterienkapsel item.particle_aproton.name=Antiprotonenkapsel -item.particle_aschrab.name=Kupferionenkapsel -item.particle_copper.name=Copper Ion Capsule +item.particle_aschrab.name=Antischrabidiumkapsel +item.particle_copper.name=Kupferionenkapsel item.particle_dark.name=Dunkle Materien Kapsel item.particle_digamma.name=§cDas Digamma-Teilchen§r item.particle_empty.name=Leere Partikelkapsel item.particle_higgs.name=Higgs Bosonen Kapsel +item.particle_hydrogen.name=Wasserstoffionenkapsel item.particle_lead.name=Bleiionenkapsel item.particle_muon.name=Myonenkapsel item.particle_sparkticle.name=Sparktikelkapsel -item.particle_strange.name=Strange Quark Capsule +item.particle_strange.name=Strange-Quark-Kapsel item.pedestal_steel.name=Stahlsockel item.pellet_advanced.name=Fortgeschrittenes Watzaufwertugspellet item.pellet_antimatter.name=Antimateriencluster @@ -2221,19 +2225,22 @@ tile.glass_trinitite.name=Trinity-Glas tile.glass_uranium.name=Uranglas tile.gravel_diamond.name=Diamantkies tile.gravel_obsidian.name=Gebrochener Obsidian -tile.hadron_analysis.name=Partikelbeschleuniger-Analysekammernwand -tile.hadron_analysis.name=Partikelbeschleuniger-Analysekammernfenster +tile.hadron_access.name=Teilchenbeschleuniger-Zugriffskonsole +tile.hadron_analysis.name=Teilchenbeschleuniger-Analysekammernwand +tile.hadron_analysis.name=Teilchenbeschleuniger-Analysekammernfenster tile.hadron_coil_alloy.name=Dichte Supraleiterspule tile.hadron_coil_schrabidium.name=Dichte Schrabidiumspule tile.hadron_coil_starmetal.name=Dichte Sternenmetallspule +tile.hadron_core.name=Teilchenbeschleuniger-Kernkomponente tile.hadron_diode.name=Schottky-Partikeldiode -tile.hadron_plating.name=Partikelbeschleuniger-Außenwand -tile.hadron_plating_black.name=Partikelbeschleuniger-Außenwand (Schwarz) -tile.hadron_plating_blue.name=Partikelbeschleuniger-Außenwand (Blau) -tile.hadron_plating_glass.name=Partikelbeschleuniger-Außenwand (Fenster) -tile.hadron_plating_striped.name=Partikelbeschleuniger-Außenwand (Coole Gefahrenstreifen) -tile.hadron_plating_voltz.name=Partikelbeschleuniger-Außenwand (VOLTZ) -tile.hadron_plating_yellow.name=Partikelbeschleuniger-Außenwand (Gelb) +tile.hadron_plating.name=Teilchenbeschleuniger-Außenwand +tile.hadron_plating_black.name=Teilchenbeschleuniger-Außenwand (Schwarz) +tile.hadron_plating_blue.name=Teilchenbeschleuniger-Außenwand (Blau) +tile.hadron_plating_glass.name=Teilchenbeschleuniger-Außenwand (Fenster) +tile.hadron_plating_striped.name=Teilchenbeschleuniger-Außenwand (Coole Gefahrenstreifen) +tile.hadron_plating_voltz.name=Teilchenbeschleuniger-Außenwand (VOLTZ) +tile.hadron_plating_yellow.name=Teilchenbeschleuniger-Außenwand (Gelb) +tile.hadron_power.name=Teilchenbeschleuniger-Stromanschluss tile.hazmat.name=Strahlenschutzstoff-Block tile.iter.name=Kernfusionsreaktor tile.launch_pad.name=Raketenabschussrampe diff --git a/src/main/java/assets/hbm/lang/en_US.lang b/src/main/java/assets/hbm/lang/en_US.lang index 714d1bfa9..315f12d93 100644 --- a/src/main/java/assets/hbm/lang/en_US.lang +++ b/src/main/java/assets/hbm/lang/en_US.lang @@ -145,6 +145,7 @@ container.fusionaryWatzPlant=Fusionary Watz Plant container.gasCentrifuge=Gas Centrifuge container.gasFlare=Gas Flare container.generator=Nuclear Reactor +container.hadron=Particle Accelerator container.iGenerator=Industrial Generator container.keyForge=Locksmith Table container.launchPad=Missile Launch Pad @@ -284,7 +285,9 @@ hadron.hopper1=§eHopper Mode:$One item will always remain. hadron.idle=Idle hadron.modeCircular=§eCircular Accelerator Mode:$Magnets must loop back into core.$Unlocks more recipes. hadron.modeLine=§eLinear Accelerator Mode:$Accelerator ends with analysis chamber.$Fewer Recipes. +hadron.noresult=No Result. hadron.progress=In Progress... +hadron.success=Completed! hbmfluid.acid=Hydrogen Peroxide hbmfluid.amat=Antimatter @@ -1475,6 +1478,7 @@ item.particle_dark.name=Dark Matter Capsule item.particle_digamma.name=§cThe Digamma Particle§r item.particle_empty.name=Empty Particle Capsule item.particle_higgs.name=Higgs Boson Capsule +item.particle_hydrogen.name=Hydrogen Ion Capsule item.particle_lead.name=Lead Ion Capsule item.particle_muon.name=Muon Capsule item.particle_sparkticle.name=Sparkticle Capsule @@ -2221,11 +2225,13 @@ tile.glass_trinitite.name=Trinity Glass tile.glass_uranium.name=Uranium Glass tile.gravel_diamond.name=Diamond Gravel tile.gravel_obsidian.name=Crushed Obsidian +tile.hadron_access.name=Particle Accelerator Access Terminal tile.hadron_analysis.name=Particle Accelerator Analysis Chamber Wall tile.hadron_analysis_glass.name=Particle Accelerator Analysis Chamber Window tile.hadron_coil_alloy.name=Dense Super Conducting Coil tile.hadron_coil_schrabidium.name=Dense Schrabidic Coil tile.hadron_coil_starmetal.name=Dense Starmetal Coil +tile.hadron_core.name=Particle Accelerator Core Commponent tile.hadron_diode.name=Schottky Particle Diode tile.hadron_plating.name=Particle Accelerator Plating tile.hadron_plating_black.name=Particle Accelerator Plating (Black) @@ -2234,6 +2240,7 @@ tile.hadron_plating_glass.name=Particle Accelerator Plating (Window) tile.hadron_plating_striped.name=Particle Accelerator Plating (Cool Hazard Stripes) tile.hadron_plating_voltz.name=Particle Accelerator Plating (VOLTZ) tile.hadron_plating_yellow.name=Particle Accelerator Plating (Yellow) +tile.hadron_power.name=Particle Accelerator Power Plug tile.hazmat.name=Hazmat Cloth Block tile.iter.name=Fusion Reactor tile.launch_pad.name=Missile Launch Pad diff --git a/src/main/java/assets/hbm/textures/gui/gui_nei_hadron.png b/src/main/java/assets/hbm/textures/gui/gui_nei_hadron.png new file mode 100644 index 0000000000000000000000000000000000000000..ec0b04bbdcfe6cf9a45dfe568b25c2cd80021c32 GIT binary patch literal 1684 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̢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 literal 6355 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 U36?2afu3UUboFyt=akR{0O!kQ@&Et; literal 0 HcmV?d00001 diff --git a/src/main/java/com/hbm/blocks/machine/BlockHadronAccess.java b/src/main/java/com/hbm/blocks/machine/BlockHadronAccess.java index ee85b84c0..657eeac63 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockHadronAccess.java +++ b/src/main/java/com/hbm/blocks/machine/BlockHadronAccess.java @@ -2,25 +2,32 @@ package com.hbm.blocks.machine; import com.hbm.blocks.ModBlocks; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityProxyInventory; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class BlockHadronAccess extends Block { +public class BlockHadronAccess extends BlockContainer { public BlockHadronAccess(Material mat) { super(mat); } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityProxyInventory(); + } @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { @@ -46,11 +53,11 @@ public class BlockHadronAccess extends Block { ForgeDirection dir = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)).getOpposite(); - for(ForgeDirection d : ForgeDirection.VALID_DIRECTIONS) { + /*for(ForgeDirection d : ForgeDirection.VALID_DIRECTIONS) { System.out.println(d.name() + " " + d.getOpposite().name()); } - System.out.println(dir.name()); + System.out.println(dir.name());*/ for(int i = 1; i < 3; i++) { @@ -58,7 +65,7 @@ public class BlockHadronAccess extends Block { FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_hadron, world, x + dir.offsetX * i, y + dir.offsetY * i, z + dir.offsetZ * i); } - System.out.println(world.getBlock(x + dir.offsetX * i, y + dir.offsetY * i, z + dir.offsetZ * i).getUnlocalizedName()); + //System.out.println(world.getBlock(x + dir.offsetX * i, y + dir.offsetY * i, z + dir.offsetZ * i).getUnlocalizedName()); } return true; diff --git a/src/main/java/com/hbm/handler/nei/HadronRecipeHandler.java b/src/main/java/com/hbm/handler/nei/HadronRecipeHandler.java new file mode 100644 index 000000000..027bc9bd1 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/HadronRecipeHandler.java @@ -0,0 +1,152 @@ +package com.hbm.handler.nei; + +import static codechicken.lib.gui.GuiDraw.drawTexturedModalRect; + +import java.awt.Rectangle; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +import com.hbm.inventory.HadronRecipes; +import com.hbm.inventory.HadronRecipes.HadronRecipe; +import com.hbm.inventory.gui.GUIHadron; +import com.hbm.lib.RefStrings; + +import codechicken.nei.NEIServerUtils; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.TemplateRecipeHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.item.ItemStack; + +public class HadronRecipeHandler extends TemplateRecipeHandler { + + public LinkedList transferRectsRec = new LinkedList(); + public LinkedList transferRectsGui = new LinkedList(); + public LinkedList> guiRec = new LinkedList>(); + public LinkedList> guiGui = new LinkedList>(); + + public class SmeltingSet extends TemplateRecipeHandler.CachedRecipe { + + PositionedStack input1; + PositionedStack input2; + PositionedStack output1; + PositionedStack output2; + int momentum; + boolean analysisOnly; + + public SmeltingSet(HadronRecipe recipe) { + + this.input1 = new PositionedStack(recipe.in1.toStack(), 12, 24); + this.input2 = new PositionedStack(recipe.in2.toStack(), 30, 24); + this.output1 = new PositionedStack(recipe.out1, 84, 24); + this.output2 = new PositionedStack(recipe.out2, 102, 24); + this.momentum = recipe.momentum; + this.analysisOnly = recipe.analysisOnly; + } + + @Override + public List getIngredients() { + return Arrays.asList(new PositionedStack[] {input1, input2}); + } + + @Override + public List getOtherStacks() { + return Arrays.asList(new PositionedStack[] {output1, output2}); + } + + @Override + public PositionedStack getResult() { + return output1; + } + } + + @Override + public String getRecipeName() { + return "Particle Accelerator"; + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + + if(outputId.equals("hadron") && getClass() == HadronRecipeHandler.class) { + + List recipes = HadronRecipes.getRecipes(); + + for(HadronRecipe recipe : recipes) { + this.arecipes.add(new SmeltingSet(recipe)); + } + + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + + List recipes = HadronRecipes.getRecipes(); + + for(HadronRecipe recipe : recipes) { + + if(NEIServerUtils.areStacksSameTypeCrafting(recipe.out1, result) || NEIServerUtils.areStacksSameTypeCrafting(recipe.out2, result)) { + this.arecipes.add(new SmeltingSet(recipe)); + } + } + } + + @Override + public void loadUsageRecipes(String inputId, Object... ingredients) { + + if(inputId.equals("hadron") && getClass() == HadronRecipeHandler.class) { + loadCraftingRecipes("hadron", new Object[0]); + } else { + super.loadUsageRecipes(inputId, ingredients); + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + + List recipes = HadronRecipes.getRecipes(); + + for(HadronRecipe recipe : recipes) { + + if(NEIServerUtils.areStacksSameTypeCrafting(recipe.in1.toStack(), ingredient) || NEIServerUtils.areStacksSameTypeCrafting(recipe.in2.toStack(), ingredient)) { + this.arecipes.add(new SmeltingSet(recipe)); + } + } + } + + @Override + public void loadTransferRects() { + transferRectsGui = new LinkedList(); + guiGui = new LinkedList>(); + + transferRects.add(new RecipeTransferRect(new Rectangle(58 - 5, 34 - 11, 24, 18), "hadron")); + transferRectsGui.add(new RecipeTransferRect(new Rectangle(72 - 5, 28 - 11, 30, 30), "hadron")); + guiGui.add(GUIHadron.class); + RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); + RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); + } + + @Override + public void drawExtras(int recipe) { + + SmeltingSet rec = (SmeltingSet)this.arecipes.get(recipe); + + if(rec.analysisOnly) + drawTexturedModalRect(128, 23, 0, 86, 18, 18); + + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + + String mom = "" + rec.momentum; + fontRenderer.drawString(mom, -fontRenderer.getStringWidth(mom) / 2 + 30, 42, 0x404040); + } + + @Override + public String getGuiTexture() { + return RefStrings.MODID + ":textures/gui/gui_nei_hadron.png"; + } +} diff --git a/src/main/java/com/hbm/inventory/HadronRecipes.java b/src/main/java/com/hbm/inventory/HadronRecipes.java index 42dbad8aa..6e5b1c3c3 100644 --- a/src/main/java/com/hbm/inventory/HadronRecipes.java +++ b/src/main/java/com/hbm/inventory/HadronRecipes.java @@ -77,14 +77,18 @@ public class HadronRecipes { return null; } + public static List getRecipes() { + return recipes; + } + public static class HadronRecipe { - ComparableStack in1; - ComparableStack in2; - int momentum; - ItemStack out1; - ItemStack out2; - boolean analysisOnly; + public ComparableStack in1; + public ComparableStack in2; + public int momentum; + public ItemStack out1; + public ItemStack out2; + public boolean analysisOnly; public HadronRecipe(ItemStack in1, ItemStack in2, int momentum, ItemStack out1, ItemStack out2, boolean analysisOnly) { this.in1 = new ComparableStack(in1); diff --git a/src/main/java/com/hbm/inventory/gui/GUIHadron.java b/src/main/java/com/hbm/inventory/gui/GUIHadron.java index 918d6d6ba..62a47f4c0 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIHadron.java +++ b/src/main/java/com/hbm/inventory/gui/GUIHadron.java @@ -7,6 +7,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.machine.TileEntityHadron; +import com.hbm.tileentity.machine.TileEntityHadron.EnumHadronState; import com.hbm.util.I18nUtil; import net.minecraft.client.Minecraft; @@ -73,6 +74,9 @@ public class GUIHadron extends GuiInfoContainer { this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + + String state = I18n.format("hadron." + this.hadron.state.name().toLowerCase()); + this.fontRendererObj.drawString(state, this.xSize / 2 - this.fontRendererObj.getStringWidth(state) / 2, 76, this.hadron.state.color); } @Override @@ -89,8 +93,27 @@ public class GUIHadron extends GuiInfoContainer { if(hadron.hopperMode) drawTexturedModalRect(guiLeft + 142, guiTop + 89, 206, 36, 18, 18); + + if(hadron.state == EnumHadronState.SUCCESS) { + drawTexturedModalRect(guiLeft + 73, guiTop + 29, 176, 0, 30, 30); + } + if(hadron.state == EnumHadronState.NORESULT) { + drawTexturedModalRect(guiLeft + 73, guiTop + 29, 176, 30, 30, 30); + } + if(hadron.state == EnumHadronState.ERROR) { + drawTexturedModalRect(guiLeft + 73, guiTop + 29, 176, 106, 30, 30); + } int i = hadron.getPowerScaled(70); drawTexturedModalRect(guiLeft + 62, guiTop + 108, 176, 60, i, 16); + + int color = hadron.state.color; + float red = (color & 0xff0000) >> 16; + float green = (color & 0x00ff00) >> 8; + float blue = (color & 0x0000ff); + + GL11.glColor4f(red, green, blue, 1.0F); + drawTexturedModalRect(guiLeft + 45, guiTop + 73, 0, 222, 86, 14); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index d64c0184e..a3000f347 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -600,6 +600,7 @@ public class ModItems { public static Item cell_anti_schrabidium; public static Item particle_empty; + public static Item particle_hydrogen; public static Item particle_copper; public static Item particle_lead; public static Item particle_aproton; @@ -2472,6 +2473,7 @@ public class ModItems { cell_anti_schrabidium = new ItemDrop().setUnlocalizedName("cell_anti_schrabidium").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.cell_empty).setTextureName(RefStrings.MODID + ":cell_anti_schrabidium"); particle_empty = new Item().setUnlocalizedName("particle_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":particle_empty"); + particle_hydrogen = new Item().setUnlocalizedName("particle_hydrogen").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_hydrogen"); particle_copper = new Item().setUnlocalizedName("particle_copper").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_copper"); particle_lead = new Item().setUnlocalizedName("particle_lead").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_lead"); particle_aproton = new Item().setUnlocalizedName("particle_aproton").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_aproton"); @@ -2483,7 +2485,7 @@ public class ModItems { particle_strange = new Item().setUnlocalizedName("particle_strange").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_strange"); particle_dark = new Item().setUnlocalizedName("particle_dark").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_dark"); particle_sparkticle = new Item().setUnlocalizedName("particle_sparkticle").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_sparkticle"); - particle_digamma = new Item().setUnlocalizedName("particle_digamma").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_digamma"); + particle_digamma = new ItemDigamma(100F, 60).setUnlocalizedName("particle_digamma").setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.particle_empty).setTextureName(RefStrings.MODID + ":particle_digamma"); singularity = new ItemDrop().setUnlocalizedName("singularity").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity"); singularity_counter_resonant = new ItemDrop().setUnlocalizedName("singularity_counter_resonant").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setContainerItem(ModItems.nuclear_waste).setTextureName(RefStrings.MODID + ":singularity_alt"); @@ -4653,6 +4655,7 @@ public class ModItems { //Particle Containers GameRegistry.registerItem(particle_empty, particle_empty.getUnlocalizedName()); + GameRegistry.registerItem(particle_hydrogen, particle_hydrogen.getUnlocalizedName()); GameRegistry.registerItem(particle_copper, particle_copper.getUnlocalizedName()); GameRegistry.registerItem(particle_lead, particle_lead.getUnlocalizedName()); GameRegistry.registerItem(particle_aproton, particle_aproton.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemDigamma.java b/src/main/java/com/hbm/items/special/ItemDigamma.java new file mode 100644 index 000000000..27966067f --- /dev/null +++ b/src/main/java/com/hbm/items/special/ItemDigamma.java @@ -0,0 +1,83 @@ +package com.hbm.items.special; + +import java.util.List; + +import com.hbm.entity.effect.EntityRagingVortex; +import com.hbm.lib.ModDamageSource; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +public class ItemDigamma extends ItemRadioactive { + + int digamma; + + public ItemDigamma(float radiation, int digamma) { + super(radiation); + this.digamma = digamma; + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean b) { + super.onUpdate(stack, world, entity, i, b); + + if(entity instanceof EntityPlayer) { + + EntityPlayer player = (EntityPlayer) entity; + + if(player.ticksExisted % digamma == 0 && !player.capabilities.isCreativeMode) { + + player.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(new AttributeModifier("digamma", -0.5D, 2)); + + if(player.getHealth() > player.getMaxHealth()) + player.setHealth(player.getMaxHealth()); + + if(player.getMaxHealth() <= 0) { + player.attackEntityFrom(ModDamageSource.radiation, 100F); + player.onDeath(ModDamageSource.radiation); + } + } + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + list.add(EnumChatFormatting.GOLD + "Particle Half-Life: 1.67*10³⁴a"); + list.add(EnumChatFormatting.RED + "Player Half-Life: " + (digamma / 20F) + "s"); + + list.add(""); + super.addInformation(stack, player, list, bool); + + float d = ((int)((1000F / 60) * 10)) / 10F; + + list.add(EnumChatFormatting.DARK_RED + "" + d + "DRX/s"); + + list.add(EnumChatFormatting.RED + "[Dangerous Drop]"); + } + + @Override + public boolean onEntityItemUpdate(EntityItem entityItem) { + if (entityItem != null) { + + if (entityItem.onGround) { + + EntityRagingVortex bl = new EntityRagingVortex(entityItem.worldObj, 10F); + bl.posX = entityItem.posX ; + bl.posY = entityItem.posY ; + bl.posZ = entityItem.posZ ; + entityItem.worldObj.spawnEntityInWorld(bl); + + return true; + } + } + + return false; + } +} diff --git a/src/main/java/com/hbm/items/special/ItemRadioactive.java b/src/main/java/com/hbm/items/special/ItemRadioactive.java index 65cc98bd0..474a58479 100644 --- a/src/main/java/com/hbm/items/special/ItemRadioactive.java +++ b/src/main/java/com/hbm/items/special/ItemRadioactive.java @@ -3,11 +3,14 @@ package com.hbm.items.special; import java.util.List; import com.hbm.inventory.BreederRecipes; +import com.hbm.lib.ModDamageSource; import com.hbm.util.ArmorUtil; import com.hbm.util.ContaminationUtil; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 6988dee7c..751e676d2 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -16,9 +16,9 @@ public class NEIConfig implements IConfigureNEI { API.registerRecipeHandler(new AlloyFurnaceRecipeHandler()); API.registerUsageHandler(new AlloyFurnaceRecipeHandler()); API.registerRecipeHandler(new CentrifugeRecipeHandler()); - API.registerUsageHandler(new GasCentrifugeRecipeHandler()); - API.registerRecipeHandler(new GasCentrifugeRecipeHandler()); API.registerUsageHandler(new CentrifugeRecipeHandler()); + API.registerRecipeHandler(new GasCentrifugeRecipeHandler()); + API.registerUsageHandler(new GasCentrifugeRecipeHandler()); API.registerRecipeHandler(new ReactorRecipeHandler()); API.registerUsageHandler(new ReactorRecipeHandler()); API.registerRecipeHandler(new ShredderRecipeHandler()); @@ -45,6 +45,8 @@ public class NEIConfig implements IConfigureNEI { API.registerUsageHandler(new BookRecipeHandler()); API.registerRecipeHandler(new FusionRecipeHandler()); API.registerUsageHandler(new FusionRecipeHandler()); + API.registerRecipeHandler(new HadronRecipeHandler()); + API.registerUsageHandler(new HadronRecipeHandler()); //Some things are even beyond my control...or are they? API.hideItem(new ItemStack(ModItems.memory)); diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java b/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java index 705c2133e..a4d38838a 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyBase.java @@ -1,8 +1,12 @@ package com.hbm.tileentity; import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.BlockHadronAccess; +import com.hbm.tileentity.machine.TileEntityHadron; import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityProxyBase extends TileEntity { @@ -28,6 +32,22 @@ public class TileEntityProxyBase extends TileEntity { } } + + /// this spares me the hassle of registering a new child class TE that aims at the right target /// + + if(this.getBlockType() instanceof BlockHadronAccess) { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite(); + + + for(int i = 1; i < 3; i++) { + TileEntity te = worldObj.getTileEntity(xCoord + dir.offsetX * i, yCoord + dir.offsetY * i, zCoord + dir.offsetZ * i); + + if(te instanceof TileEntityHadron) { + return te; + } + } + } + return null; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java index 91e9ff3e8..df9266f1d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java @@ -10,6 +10,7 @@ import com.hbm.blocks.machine.BlockHadronCoil; import com.hbm.blocks.machine.BlockHadronPlating; import com.hbm.interfaces.IConsumer; import com.hbm.inventory.HadronRecipes; +import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.TileEntityMachineBase; @@ -33,6 +34,12 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer public boolean analysisOnly = false; public boolean hopperMode = false; + private int delay; + public EnumHadronState state = EnumHadronState.IDLE; + private static final int delaySuccess = 20; + private static final int delayNoResult = 60; + private static final int delayError = 60; + public TileEntityHadron() { super(5); } @@ -41,15 +48,33 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer public String getName() { return "container.hadron"; } + + private static final int[] access = new int[] {0, 1, 2, 3}; + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return access; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i == 2 || i == 3; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + return i == 0 || i == 1; + } @Override public void updateEntity() { if(!worldObj.isRemote) { + power = Library.chargeTEFromItems(slots, 4, power, maxPower); drawPower(); - if(this.isOn && particles.size() < maxParticles && slots[0] != null && slots[1] != null && power >= maxPower * 0.75) { + if(delay <= 0 && this.isOn && particles.size() < maxParticles && slots[0] != null && slots[1] != null && power >= maxPower * 0.75) { if(!hopperMode || (slots[0].stackSize > 1 && slots[1].stackSize > 1)) { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); @@ -57,9 +82,16 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer this.decrStackSize(0, 1); this.decrStackSize(1, 1); power -= maxPower * 0.75; + this.state = EnumHadronState.PROGRESS; } } + if(delay > 0) + delay--; + else if(particles.isEmpty()) { + this.state = EnumHadronState.IDLE; + } + if(!particles.isEmpty()) updateParticles(); @@ -74,6 +106,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer data.setLong("power", power); data.setBoolean("analysis", analysisOnly); data.setBoolean("hopperMode", hopperMode); + data.setByte("state", (byte) state.ordinal()); this.networkPack(data, 50); } } @@ -82,8 +115,12 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer ItemStack[] result = HadronRecipes.getOutput(p.item1, p.item2, p.momentum, analysisOnly); - if(result == null) + if(result == null) { + this.state = EnumHadronState.NORESULT; + this.delay = delayNoResult; + worldObj.playSoundEffect(p.posX, p.posY, p.posZ, "random.orb", 2, 0.5F); return; + } if((slots[2] == null || (slots[2].getItem() == result[0].getItem() && slots[2].stackSize < slots[2].getMaxStackSize())) && (slots[3] == null || (slots[3].getItem() == result[1].getItem() && slots[3].stackSize < slots[3].getMaxStackSize()))) { @@ -97,6 +134,10 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer slots[i].stackSize++; } } + + worldObj.playSoundEffect(p.posX, p.posY, p.posZ, "random.orb", 2, 1F); + this.delay = delaySuccess; + this.state = EnumHadronState.SUCCESS; } @Override @@ -105,6 +146,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer this.power = data.getLong("power"); this.analysisOnly = data.getBoolean("analysis"); this.hopperMode = data.getBoolean("hopperMode"); + this.state = EnumHadronState.values()[data.getByte("state")]; } @Override @@ -144,8 +186,11 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer private void finishParticle(Particle p) { particlesToRemove.add(p); - worldObj.playSoundEffect(p.posX, p.posY, p.posZ, "random.orb", 10, 1); - process(p); + + if(!p.isExpired()) + process(p); + + p.expired = true; } static final int maxParticles = 1; @@ -213,7 +258,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer int momentum; int charge; int analysis; - static final int maxCharge = 10; + static final int maxCharge = 80; boolean isCheckExempt = false; boolean expired = false; @@ -242,7 +287,10 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer worldObj.newExplosion(null, posX + 0.5, posY + 0.5, posZ + 0.5, 10, false, false); //System.out.println("Last dir: " + dir.name()); //System.out.println("Last pos: " + posX + " " + posY + " " + posZ); - Thread.currentThread().dumpStack(); + //Thread.currentThread().dumpStack(); + + TileEntityHadron.this.state = EnumHadronState.ERROR; + TileEntityHadron.this.delay = delayError; } public boolean isExpired() { @@ -253,12 +301,13 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer if(expired) //just in case return; - - this.charge--; changeDirection(this); makeSteppy(this); - checkSegment(this); + + if(!this.isExpired()) //only important for when the current segment is the core + checkSegment(this); + isCheckExempt = false; //clearing up the exemption we might have held from the previous turn, AFTER stepping if(charge <= 0) @@ -371,6 +420,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer p.expire(); } else { p.momentum += coilVal; + p.charge -= coilVal; } continue; @@ -433,6 +483,8 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer p.expire(); if(p.analysis == 2) { + this.worldObj.playSoundEffect(p.posX + 0.5, p.posY + 0.5, p.posZ + 0.5, "fireworks.blast", 2.0F, 2F); + this.state = EnumHadronState.ANALYSIS; NBTTagCompound data = new NBTTagCompound(); data.setString("type", "hadron"); PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, p.posX + 0.5, p.posY + 0.5, p.posZ + 0.5), new TargetPoint(worldObj.provider.dimensionId, p.posX + 0.5, p.posY + 0.5, p.posZ + 0.5, 25)); @@ -609,4 +661,19 @@ public class TileEntityHadron extends TileEntityMachineBase implements IConsumer return b == ModBlocks.hadron_analysis || b == ModBlocks.hadron_analysis_glass; } + + public static enum EnumHadronState { + IDLE(0x8080ff), + PROGRESS(0xffff00), + ANALYSIS(0xffff00), + NORESULT(0xff8000), + SUCCESS(0x00ff00), + ERROR(0xff0000); + + public int color; + + private EnumHadronState(int color) { + this.color = color; + } + } }