From 4a38426e4acc668b348eb5a36ec5f37fd5acc3be Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 26 Jul 2021 16:06:23 +0200 Subject: [PATCH] fixed RBMK console crashing, anvil NEI handlers, cobalt ore --- src/main/java/com/hbm/blocks/ModBlocks.java | 8 +- .../java/com/hbm/blocks/bomb/BlockSemtex.java | 43 ++++- .../java/com/hbm/blocks/generic/BlockOre.java | 9 ++ src/main/java/com/hbm/config/WorldConfig.java | 4 + .../java/com/hbm/crafting/WeaponRecipes.java | 2 +- src/main/java/com/hbm/handler/GUIHandler.java | 7 - .../hbm/handler/nei/AnvilRecipeHandler.java | 134 ++++++++++++++++ .../handler/nei/SmithingRecipeHandler.java | 149 ++++++++++++++++++ .../java/com/hbm/inventory/AnvilRecipes.java | 18 +-- .../hbm/inventory/AnvilSmithingHotRecipe.java | 21 +++ .../hbm/inventory/AnvilSmithingRecipe.java | 16 +- .../com/hbm/inventory/CentrifugeRecipes.java | 21 ++- .../hbm/inventory/CrystallizerRecipes.java | 9 ++ .../hbm/inventory/FluidContainerRegistry.java | 12 +- .../java/com/hbm/inventory/FluidTank.java | 2 +- .../com/hbm/inventory/OreDictManager.java | 2 + .../java/com/hbm/inventory/RecipesCommon.java | 23 +++ .../com/hbm/inventory/ShredderRecipes.java | 10 ++ .../container/ContainerRBMKConsole.java | 35 ---- .../com/hbm/inventory/gui/GUIRBMKConsole.java | 33 ++-- src/main/java/com/hbm/items/ModItems.java | 3 + src/main/java/com/hbm/lib/HbmWorldGen.java | 2 + .../java/com/hbm/main/CraftingManager.java | 3 + src/main/java/com/hbm/main/MainRegistry.java | 7 +- src/main/java/com/hbm/main/NEIConfig.java | 4 + .../machine/TileEntityStorageDrum.java | 10 +- src/main/resources/assets/hbm/lang/de_DE.lang | 3 + src/main/resources/assets/hbm/lang/en_US.lang | 3 + .../assets/hbm/textures/blocks/ore_cobalt.png | Bin 0 -> 382 bytes .../hbm/textures/blocks/ore_nether_cobalt.png | Bin 0 -> 771 bytes .../hbm/textures/gui/nei/gui_nei_anvil.png | Bin 0 -> 38800 bytes .../hbm/textures/gui/nei/gui_nei_smithing.png | Bin 0 -> 787 bytes .../hbm/textures/items/crystal_cobalt.png | Bin 0 -> 2845 bytes src/main/resources/mcmod.info | 2 +- 34 files changed, 509 insertions(+), 86 deletions(-) create mode 100644 src/main/java/com/hbm/handler/nei/AnvilRecipeHandler.java create mode 100644 src/main/java/com/hbm/handler/nei/SmithingRecipeHandler.java delete mode 100644 src/main/java/com/hbm/inventory/container/ContainerRBMKConsole.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_cobalt.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ore_nether_cobalt.png create mode 100644 src/main/resources/assets/hbm/textures/gui/nei/gui_nei_anvil.png create mode 100644 src/main/resources/assets/hbm/textures/gui/nei/gui_nei_smithing.png create mode 100644 src/main/resources/assets/hbm/textures/items/crystal_cobalt.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 1dc4df0e1..9c7718374 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -68,6 +68,7 @@ public class ModBlocks { public static Block ore_daffergon; public static Block ore_verticium; public static Block ore_rare; + public static Block ore_cobalt; public static Block ore_cinnebar; public static Block ore_coltan; @@ -79,6 +80,7 @@ public class ModBlocks { public static Block ore_nether_tungsten; public static Block ore_nether_sulfur; public static Block ore_nether_fire; + public static Block ore_nether_cobalt; public static Block ore_nether_schrabidium; public static Block ore_meteor_uranium; @@ -1132,6 +1134,7 @@ public class ModBlocks { ore_nether_tungsten = new BlockGeneric(Material.rock).setBlockName("ore_nether_tungsten").setCreativeTab(MainRegistry.blockTab).setHardness(0.4F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_nether_tungsten"); ore_nether_sulfur = new BlockOre(Material.rock).setBlockName("ore_nether_sulfur").setCreativeTab(MainRegistry.blockTab).setHardness(0.4F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_nether_sulfur"); ore_nether_fire = new BlockOre(Material.rock).setBlockName("ore_nether_fire").setCreativeTab(MainRegistry.blockTab).setHardness(0.4F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_nether_fire"); + ore_nether_cobalt = new BlockOre(Material.rock).setBlockName("ore_nether_cobalt").setCreativeTab(MainRegistry.blockTab).setHardness(0.4F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_nether_cobalt"); ore_nether_schrabidium = new BlockGeneric(Material.rock).setBlockName("ore_nether_schrabidium").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(600.0F).setBlockTextureName(RefStrings.MODID + ":ore_nether_schrabidium"); ore_meteor_uranium = new BlockOre(Material.rock).setBlockName("ore_meteor_uranium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_meteor_uranium"); @@ -1170,7 +1173,8 @@ public class ModBlocks { ore_unobtainium = new BlockGeneric(Material.rock).setBlockName("ore_unobtainium").setCreativeTab(null).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_unobtainium"); ore_daffergon = new BlockGeneric(Material.rock).setBlockName("ore_daffergon").setCreativeTab(null).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_daffergon"); ore_verticium = new BlockGeneric(Material.rock).setBlockName("ore_verticium").setCreativeTab(null).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_verticium"); - ore_rare = new BlockOre(Material.rock).setBlockName("ore_rare").setCreativeTab(null).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_rare"); + ore_rare = new BlockOre(Material.rock).setBlockName("ore_rare").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_rare"); + ore_cobalt = new BlockOre(Material.rock).setBlockName("ore_cobalt").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_cobalt"); ore_cinnebar = new BlockOre(Material.rock).setBlockName("ore_cinnebar").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_cinnebar"); ore_coltan = new BlockOre(Material.rock).setBlockName("ore_coltan").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":ore_coltan"); @@ -2006,6 +2010,7 @@ public class ModBlocks { GameRegistry.registerBlock(ore_daffergon, ItemOreBlock.class, ore_daffergon.getUnlocalizedName()); GameRegistry.registerBlock(ore_verticium, ItemOreBlock.class, ore_verticium.getUnlocalizedName()); GameRegistry.registerBlock(ore_rare, ItemOreBlock.class, ore_rare.getUnlocalizedName()); + GameRegistry.registerBlock(ore_cobalt, ore_cobalt.getUnlocalizedName()); GameRegistry.registerBlock(ore_cinnebar, ore_cinnebar.getUnlocalizedName()); GameRegistry.registerBlock(ore_coltan, ore_coltan.getUnlocalizedName()); @@ -2027,6 +2032,7 @@ public class ModBlocks { GameRegistry.registerBlock(ore_nether_tungsten, ore_nether_tungsten.getUnlocalizedName()); GameRegistry.registerBlock(ore_nether_sulfur, ore_nether_sulfur.getUnlocalizedName()); GameRegistry.registerBlock(ore_nether_fire, ore_nether_fire.getUnlocalizedName()); + GameRegistry.registerBlock(ore_nether_cobalt, ore_nether_cobalt.getUnlocalizedName()); GameRegistry.registerBlock(ore_nether_schrabidium, ItemBlockLore.class, ore_nether_schrabidium.getUnlocalizedName()); //Meteor Ores diff --git a/src/main/java/com/hbm/blocks/bomb/BlockSemtex.java b/src/main/java/com/hbm/blocks/bomb/BlockSemtex.java index e9a604f7c..8bfd1f55c 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockSemtex.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockSemtex.java @@ -1,5 +1,12 @@ package com.hbm.blocks.bomb; +import com.hbm.blocks.ModBlocks; +import com.hbm.config.BombConfig; +import com.hbm.entity.effect.EntityNukeCloudSmall; +import com.hbm.entity.logic.EntityNukeExplosionMK4; +import com.hbm.explosion.ExplosionLarge; +import com.hbm.explosion.ExplosionNT; +import com.hbm.interfaces.IBomb; import com.hbm.lib.RefStrings; import cpw.mods.fml.relauncher.Side; @@ -8,13 +15,15 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; +import net.minecraft.world.Explosion; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class BlockSemtex extends Block { +public class BlockSemtex extends Block implements IBomb { @SideOnly(Side.CLIENT) private IIcon topIcon; @@ -45,22 +54,42 @@ public class BlockSemtex extends Block { p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, l, 2); } - public static int determineOrientation(World p_150071_0_, int p_150071_1_, int p_150071_2_, int p_150071_3_, EntityLivingBase p_150071_4_) { + public static int determineOrientation(World world, int x, int y, int z, EntityLivingBase player) { - if(MathHelper.abs((float) p_150071_4_.posX - (float) p_150071_1_) < 2.0F && MathHelper.abs((float) p_150071_4_.posZ - (float) p_150071_3_) < 2.0F) { - double d0 = p_150071_4_.posY + 1.82D - (double) p_150071_4_.yOffset; + if(MathHelper.abs((float) player.posX - (float) x) < 2.0F && MathHelper.abs((float) player.posZ - (float) z) < 2.0F) { + double d0 = player.posY + 1.82D - (double) player.yOffset; - if(d0 - (double) p_150071_2_ > 2.0D) { + if(d0 - (double) y > 2.0D) { return 0; } - if((double) p_150071_2_ - d0 > 0.0D) { + if((double) y - d0 > 0.0D) { return 1; } } - int l = MathHelper.floor_double((double) (p_150071_4_.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int l = MathHelper.floor_double((double) (player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; return l == 0 ? 3 : (l == 1 ? 4 : (l == 2 ? 2 : (l == 3 ? 5 : 1))); } + + @Override + public void onBlockDestroyedByExplosion(World world, int x, int y, int z, Explosion explosion) { + this.explode(world, x, y, z); + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block p_149695_5_) { + if(world.isBlockIndirectlyGettingPowered(x, y, z)) { + this.explode(world, x, y, z); + } + } + + @Override + public void explode(World world, int x, int y, int z) { + if(!world.isRemote) { + new ExplosionNT(world, null, x + 0.5, y + 0.5, z + 0.5, 50).overrideResolution(64).explode(); + ExplosionLarge.spawnParticles(world, x, y, z, ExplosionLarge.cloudFunction(15)); + } + } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockOre.java b/src/main/java/com/hbm/blocks/generic/BlockOre.java index 4fe38e9f4..b9f933c8b 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockOre.java +++ b/src/main/java/com/hbm/blocks/generic/BlockOre.java @@ -216,6 +216,9 @@ public class BlockOre extends Block { if(this == ModBlocks.ore_coltan) { return ModItems.fragment_coltan; } + if(this == ModBlocks.ore_cobalt || this == ModBlocks.ore_nether_cobalt) { + return ModItems.fragment_cobalt; + } return Item.getItemFromBlock(this); } @@ -246,6 +249,12 @@ public class BlockOre extends Block { if(this == ModBlocks.ore_depth_zirconium) { return 2 + rand.nextInt(2); } + if(this == ModBlocks.ore_cobalt) { + return 4 + rand.nextInt(6); + } + if(this == ModBlocks.ore_nether_cobalt) { + return 5 + rand.nextInt(8); + } return 1; } diff --git a/src/main/java/com/hbm/config/WorldConfig.java b/src/main/java/com/hbm/config/WorldConfig.java index efeefcd42..f1f2e3acb 100644 --- a/src/main/java/com/hbm/config/WorldConfig.java +++ b/src/main/java/com/hbm/config/WorldConfig.java @@ -24,6 +24,7 @@ public class WorldConfig { public static int oilcoalSpawn = 128; public static int gassshaleSpawn = 5; public static int gasbubbleSpawn = 64; + public static int cobaltSpawn = 2; public static int ironClusterSpawn = 4; public static int titaniumClusterSpawn = 2; @@ -35,6 +36,7 @@ public class WorldConfig { public static int netherPhosphorusSpawn = 24; public static int netherCoalSpawn = 8; public static int netherPlutoniumSpawn = 8; + public static int netherCobaltSpawn = 2; public static int endTikiteSpawn = 8; @@ -91,6 +93,7 @@ public class WorldConfig { gassshaleSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.16_gasShaleSpawnRate", "Amount of oil shale veins per chunk", 5); gasbubbleSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.17_gasBubbleSpawnRate", "Spawns a gas bubble every nTH chunk", 64); cinnebarSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.18_cinnebarSpawnRate", "Amount of cinnebar ore veins per chunk", 1); + cobaltSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.18_cobaltSpawnRate", "Amount of cobalt ore veins per chunk", 2); ironClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C00_ironClusterSpawn", "Amount of iron cluster veins per chunk", 4); titaniumClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C01_titaniumClusterSpawn", "Amount of titanium cluster veins per chunk", 2); @@ -102,6 +105,7 @@ public class WorldConfig { netherPhosphorusSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.N03_phosphorusSpawnrate", "Amount of nether phosphorus per chunk", 24); netherCoalSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.N04_coalSpawnrate", "Amount of nether coal per chunk", 8); netherPlutoniumSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.N05_plutoniumSpawnrate", "Amount of nether plutonium per chunk, if enabled", 8); + netherCobaltSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.N06_cobaltSpawnrate", "Amount of nether cobalt per chunk", 2); endTikiteSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.E00_tikiteSpawnrate", "Amount of end trixite per chunk", 8); diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 4602f8693..f0ec9be5d 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -130,7 +130,7 @@ public class WeaponRecipes { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gun_bolt_action, 1), new Object[] { "PPI", "SWD", 'P', "plateSteel", 'I', ModItems.mechanism_rifle_1, 'S', Items.stick, 'D', "plankWood", 'W', ModItems.wire_copper })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gun_bolt_action_green, 1), new Object[] { "PPI", "SWD", 'P', "plateIron", 'I', ModItems.mechanism_rifle_1, 'S', Items.stick, 'D', "plankWood", 'W', ModItems.wire_copper })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gun_bolt_action_saturnite, 1), new Object[] { "PPI", "SWD", 'P', "plateSaturnite", 'I', ModItems.mechanism_rifle_1, 'S', Items.stick, 'D', "plankWood", 'W', ModItems.wire_tungsten })); - GameRegistry.addRecipe(new ItemStack(ModItems.gun_b92), new Object[] { "DDD", "SSC", " R", 'D', ModItems.plate_dineutronium, 'S', ModItems.ingot_starmetal, 'S', ModItems.circuit_targeting_tier6, 'R', ModItems.gun_revolver_schrabidium }); + GameRegistry.addRecipe(new ItemStack(ModItems.gun_b92), new Object[] { "DDD", "SSC", " R", 'D', ModItems.plate_dineutronium, 'S', ModItems.ingot_starmetal, 'C', ModItems.circuit_targeting_tier6, 'R', ModItems.gun_revolver_schrabidium }); GameRegistry.addRecipe(new ItemStack(ModItems.gun_b93), new Object[] { "PCE", "SEB", "PCE", 'P', ModItems.plate_dineutronium, 'C', ModItems.weaponized_starblaster_cell, 'E', ModItems.component_emitter, 'B', ModItems.gun_b92, 'S', ModItems.singularity_spark }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gun_b92_ammo, 1), new Object[] { "PSP", "ESE", "PSP", 'P', "plateSteel", 'S', ModItems.ingot_starmetal, 'E', ModItems.powder_spark_mix })); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.weaponized_starblaster_cell, 1), new Object[] { new ItemStack(ModItems.fluid_tank_full, 1, FluidType.ACID.getID()), GunB92Cell.getFullCell(), ModItems.wire_copper }); diff --git a/src/main/java/com/hbm/handler/GUIHandler.java b/src/main/java/com/hbm/handler/GUIHandler.java index 7d3f92f55..b7dc18735 100644 --- a/src/main/java/com/hbm/handler/GUIHandler.java +++ b/src/main/java/com/hbm/handler/GUIHandler.java @@ -815,13 +815,6 @@ public class GUIHandler implements IGuiHandler { return null; } - case ModBlocks.guiID_rbmk_console: { - if(entity instanceof TileEntityRBMKConsole) { - // return new ContainerRBMKConsole(player.inventory, (TileEntityRBMKConsole) entity); - } - return null; - } - case ModBlocks.guiID_storage_drum: { if(entity instanceof TileEntityStorageDrum) { return new ContainerStorageDrum(player.inventory, (TileEntityStorageDrum) entity); diff --git a/src/main/java/com/hbm/handler/nei/AnvilRecipeHandler.java b/src/main/java/com/hbm/handler/nei/AnvilRecipeHandler.java new file mode 100644 index 000000000..b8b41cde5 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/AnvilRecipeHandler.java @@ -0,0 +1,134 @@ +package com.hbm.handler.nei; + +import static codechicken.lib.gui.GuiDraw.drawTexturedModalRect; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.AnvilRecipes; +import com.hbm.inventory.AnvilRecipes.AnvilConstructionRecipe; +import com.hbm.inventory.AnvilRecipes.AnvilOutput; +import com.hbm.lib.RefStrings; + +import codechicken.lib.gui.GuiDraw; +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 AnvilRecipeHandler extends TemplateRecipeHandler { + + public LinkedList transferRectsRec = new LinkedList(); + public LinkedList transferRectsGui = new LinkedList(); + public LinkedList> guiRec = new LinkedList>(); + public LinkedList> guiGui = new LinkedList>(); + + public class RecipeSet extends TemplateRecipeHandler.CachedRecipe { + + PositionedStack output; + int tier; + + public RecipeSet(ItemStack output, int tier) { + this.output = new PositionedStack(output, 111, 24); + this.tier = tier; + } + + @Override + public List getIngredients() { + return getCycledIngredients(cycleticks / 48, Arrays.asList(output)); + } + + @Override + public PositionedStack getResult() { + return output; + } + } + + @Override + public String getRecipeName() { + return "Anvil"; + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + + if(outputId.equals("ntmAnvil")) { + List recipes = AnvilRecipes.getConstruction(); + + for(AnvilConstructionRecipe recipe : recipes) { + this.arecipes.add(new RecipeSet(recipe.output.get(0).stack.copy(), recipe.tierLower)); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + + List recipes = AnvilRecipes.getConstruction(); + + for(AnvilConstructionRecipe recipe : recipes) { + + for(AnvilOutput out : recipe.output) { + if(NEIServerUtils.areStacksSameTypeCrafting(out.stack, result)) { + this.arecipes.add(new RecipeSet(recipe.output.get(0).stack.copy(), recipe.tierLower)); + } + } + } + } + + @Override + public void loadUsageRecipes(String inputId, Object... ingredients) { + + if(inputId.equals("ntmAnvil")) { + loadCraftingRecipes("ntmAnvil", new Object[0]); + } else { + super.loadUsageRecipes(inputId, ingredients); + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + } + + @Override + public void loadTransferRects() { + } + + @Override + public void drawExtras(int recipe) { + + RecipeSet rec = (RecipeSet) this.arecipes.get(recipe); + + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + + for(int i = 0; i < 3; i++) + for(int j = 0; j < 3; j++) + fontRenderer.drawString("Tier " + rec.tier + " anvil", 51 + i, 50 + j, 0x000000); + fontRenderer.drawString("Tier " + rec.tier + " anvil", 52, 51, 0xffffff); + } + + @Override + public int recipiesPerPage() { + return 1; + } + + @Override + public String getGuiTexture() { + return RefStrings.MODID + ":textures/gui/nei/gui_nei_anvil.png"; + } + + @Override + public void drawBackground(int recipeIndex) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GuiDraw.changeTexture(getGuiTexture()); + drawTexturedModalRect(0, 0, 5, 11, 166, 120); + } +} diff --git a/src/main/java/com/hbm/handler/nei/SmithingRecipeHandler.java b/src/main/java/com/hbm/handler/nei/SmithingRecipeHandler.java new file mode 100644 index 000000000..c0e9cb408 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/SmithingRecipeHandler.java @@ -0,0 +1,149 @@ +package com.hbm.handler.nei; + +import java.awt.Rectangle; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +import com.hbm.inventory.AnvilRecipes; +import com.hbm.inventory.AnvilSmithingRecipe; +import com.hbm.inventory.gui.GUIAnvil; +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 SmithingRecipeHandler extends TemplateRecipeHandler { + + public LinkedList transferRectsRec = new LinkedList(); + public LinkedList transferRectsGui = new LinkedList(); + public LinkedList> guiRec = new LinkedList>(); + public LinkedList> guiGui = new LinkedList>(); + + public class RecipeSet extends TemplateRecipeHandler.CachedRecipe { + + PositionedStack input1; + PositionedStack input2; + PositionedStack output; + int tier; + + public RecipeSet(AnvilSmithingRecipe recipe) { + this.input1 = new PositionedStack(recipe.getLeft(), 39, 24); + this.input2 = new PositionedStack(recipe.getRight(), 75, 24); + this.output = new PositionedStack(recipe.getOutput(input1.item, input2.item), 111, 24); + this.tier = recipe.tier; + } + + @Override + public List getIngredients() { + return getCycledIngredients(cycleticks / 48, Arrays.asList(input1, input2)); + } + + @Override + public PositionedStack getResult() { + return output; + } + } + + @Override + public String getRecipeName() { + return "Anvil"; + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + + if(outputId.equals("ntmSmithing")) { + List recipes = AnvilRecipes.getSmithing(); + + for(AnvilSmithingRecipe recipe : recipes) { + this.arecipes.add(new RecipeSet(recipe)); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + + List recipes = AnvilRecipes.getSmithing(); + + for(AnvilSmithingRecipe recipe : recipes) { + if(NEIServerUtils.areStacksSameTypeCrafting(recipe.getSimpleOutput(), result)) { + this.arecipes.add(new RecipeSet(recipe)); + } + } + } + + @Override + public void loadUsageRecipes(String inputId, Object... ingredients) { + + if(inputId.equals("ntmSmithing")) { + loadCraftingRecipes("ntmSmithing", new Object[0]); + } else { + super.loadUsageRecipes(inputId, ingredients); + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + + List recipes = AnvilRecipes.getSmithing(); + + outer: + for(AnvilSmithingRecipe recipe : recipes) { + + for(ItemStack left : recipe.getLeft()) { + if(NEIServerUtils.areStacksSameTypeCrafting(left, ingredient)) { + this.arecipes.add(new RecipeSet(recipe)); + continue outer; + } + } + + for(ItemStack right : recipe.getRight()) { + if(NEIServerUtils.areStacksSameTypeCrafting(right, ingredient)) { + this.arecipes.add(new RecipeSet(recipe)); + continue outer; + } + } + } + } + + @Override + public void loadTransferRects() { + transferRectsGui = new LinkedList(); + guiGui = new LinkedList>(); + + transferRects.add(new RecipeTransferRect(new Rectangle(56, 24, 18, 18), "ntmSmithing")); + transferRects.add(new RecipeTransferRect(new Rectangle(92, 24, 18, 18), "ntmSmithing")); + transferRectsGui.add(new RecipeTransferRect(new Rectangle(39, 60, 60, 50), "ntmSmithing")); + guiGui.add(GUIAnvil.class); + RecipeTransferRectHandler.registerRectsToGuis(getRecipeTransferRectGuis(), transferRects); + RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); + } + + @Override + public void drawExtras(int recipe) { + + RecipeSet rec = (RecipeSet) this.arecipes.get(recipe); + + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + fontRenderer.drawString("Tier " + rec.tier, 52, 43, 0x404040); + } + + @Override + public int recipiesPerPage() { + return 2; + } + + @Override + public String getGuiTexture() { + return RefStrings.MODID + ":textures/gui/nei/gui_nei_smithing.png"; + } +} diff --git a/src/main/java/com/hbm/inventory/AnvilRecipes.java b/src/main/java/com/hbm/inventory/AnvilRecipes.java index ec9b6174a..78fb21940 100644 --- a/src/main/java/com/hbm/inventory/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/AnvilRecipes.java @@ -34,13 +34,6 @@ public class AnvilRecipes { */ public static void registerSmithing() { - for(int i = 0; i < 9; i++) - smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.ingot_steel_dusted, 1, i + 1), - new ComparableStack(ModItems.ingot_steel_dusted, 1, i), new ComparableStack(ModItems.ingot_steel_dusted, 1, i))); - - smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.ingot_chainsteel, 1), - new ComparableStack(ModItems.ingot_steel_dusted, 1, 9), new ComparableStack(ModItems.ingot_steel_dusted, 1, 9))); - Block[] anvils = new Block[]{ModBlocks.anvil_iron, ModBlocks.anvil_lead}; for(Block anvil : anvils) { @@ -53,6 +46,13 @@ public class AnvilRecipes { smithingRecipes.add(new AnvilSmithingRecipe(1, new ItemStack(ModBlocks.anvil_steel, 1), new ComparableStack(anvil), new OreDictStack("ingotSteel", 10))); } + for(int i = 0; i < 9; i++) + smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.ingot_steel_dusted, 1, i + 1), + new ComparableStack(ModItems.ingot_steel_dusted, 1, i), new ComparableStack(ModItems.ingot_steel_dusted, 1, i))); + + smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.ingot_chainsteel, 1), + new ComparableStack(ModItems.ingot_steel_dusted, 1, 9), new ComparableStack(ModItems.ingot_steel_dusted, 1, 9))); + smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.ingot_meteorite_forged, 1), new ComparableStack(ModItems.ingot_meteorite), new ComparableStack(ModItems.ingot_meteorite))); smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.blade_meteorite, 1), new ComparableStack(ModItems.ingot_meteorite_forged), new ComparableStack(ModItems.ingot_meteorite_forged))); smithingRecipes.add(new AnvilSmithingHotRecipe(3, new ItemStack(ModItems.meteorite_sword_reforged, 1), new ComparableStack(ModItems.meteorite_sword_seared), new ComparableStack(ModItems.ingot_meteorite_forged))); @@ -174,8 +174,8 @@ public class AnvilRecipes { public static class AnvilConstructionRecipe { public List input = new ArrayList(); public List output = new ArrayList(); - int tierLower = 0; - int tierUpper = -1; + public int tierLower = 0; + public int tierUpper = -1; OverlayType overlay = OverlayType.NONE; public AnvilConstructionRecipe(AStack input, AnvilOutput output) { diff --git a/src/main/java/com/hbm/inventory/AnvilSmithingHotRecipe.java b/src/main/java/com/hbm/inventory/AnvilSmithingHotRecipe.java index c48455d27..2984ac3d3 100644 --- a/src/main/java/com/hbm/inventory/AnvilSmithingHotRecipe.java +++ b/src/main/java/com/hbm/inventory/AnvilSmithingHotRecipe.java @@ -1,9 +1,12 @@ package com.hbm.inventory; +import java.util.List; + import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.items.special.ItemHot; import net.minecraft.item.ItemStack; +import scala.actors.threadpool.Arrays; public class AnvilSmithingHotRecipe extends AnvilSmithingRecipe { @@ -38,4 +41,22 @@ public class AnvilSmithingHotRecipe extends AnvilSmithingRecipe { return output.copy(); } + + public List getLeft() { + return Arrays.asList(new ItemStack[] {getHot(left)}); + } + + public List getRight() { + return Arrays.asList(new ItemStack[] {getHot(right)}); + } + + private ItemStack getHot(AStack stack) { + ItemStack first = stack.extractForNEI().get(0); + + if(first.getItem() instanceof ItemHot) { + ItemHot.heatUp(first); + } + + return first; + } } diff --git a/src/main/java/com/hbm/inventory/AnvilSmithingRecipe.java b/src/main/java/com/hbm/inventory/AnvilSmithingRecipe.java index ac1a62d49..d9af26467 100644 --- a/src/main/java/com/hbm/inventory/AnvilSmithingRecipe.java +++ b/src/main/java/com/hbm/inventory/AnvilSmithingRecipe.java @@ -1,5 +1,7 @@ package com.hbm.inventory; +import java.util.List; + import com.hbm.inventory.RecipesCommon.AStack; import net.minecraft.item.ItemStack; @@ -44,10 +46,22 @@ public class AnvilSmithingRecipe { return recipe.matchesRecipe(input, false); } - public ItemStack getOutput(ItemStack left, ItemStack right) { + public List getLeft() { + return left.extractForNEI(); + } + + public List getRight() { + return right.extractForNEI(); + } + + public ItemStack getSimpleOutput() { return output.copy(); } + public ItemStack getOutput(ItemStack left, ItemStack right) { + return getSimpleOutput(); + } + public int amountConsumed(int index, boolean mirrored) { if(index == 0) diff --git a/src/main/java/com/hbm/inventory/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/CentrifugeRecipes.java index 9c962dcd5..23caf51e3 100644 --- a/src/main/java/com/hbm/inventory/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/CentrifugeRecipes.java @@ -200,6 +200,24 @@ public class CentrifugeRecipes { new ItemStack(ModItems.ingot_phosphorus), new ItemStack(Blocks.netherrack) }); + recipes.put("oreCobalt", new ItemStack[] { + new ItemStack(ModItems.powder_cobalt, 2), + new ItemStack(ModItems.powder_iron, 1), + new ItemStack(ModItems.powder_copper, 1), + new ItemStack(Blocks.gravel, 1) }); + + List quartz = OreDictionary.getOres("crystalCertusQuartz"); + + if(quartz != null && !quartz.isEmpty()) { + ItemStack qItem = quartz.get(0).copy(); + + recipes.put("oreCertusQuartz", new ItemStack[] { + qItem, + qItem, + qItem, + qItem }); + } + recipes.put(new ComparableStack(Items.blaze_rod), new ItemStack[] {new ItemStack(Items.blaze_powder, 1), new ItemStack(Items.blaze_powder, 1), new ItemStack(ModItems.powder_fire, 1), new ItemStack(ModItems.powder_fire, 1) }); recipes.put(new ComparableStack(ModItems.ingot_schraranium), new ItemStack[] { new ItemStack(ModItems.nugget_schrabidium, 2), new ItemStack(ModItems.nugget_schrabidium, 1), new ItemStack(ModItems.nugget_uranium, 3), new ItemStack(ModItems.nugget_plutonium, 2) }); @@ -216,7 +234,7 @@ public class CentrifugeRecipes { recipes.put(new ComparableStack(ModItems.crystal_titanium), new ItemStack[] { new ItemStack(ModItems.powder_titanium, 2), new ItemStack(ModItems.powder_titanium, 2), new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); recipes.put(new ComparableStack(ModItems.crystal_sulfur), new ItemStack[] { new ItemStack(ModItems.sulfur, 4), new ItemStack(ModItems.sulfur, 4), new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.nugget_mercury, 1) }); recipes.put(new ComparableStack(ModItems.crystal_niter), new ItemStack[] { new ItemStack(ModItems.niter, 3), new ItemStack(ModItems.niter, 3), new ItemStack(ModItems.niter, 3), new ItemStack(ModItems.powder_lithium_tiny, 1) }); - recipes.put(new ComparableStack(ModItems.crystal_copper), new ItemStack[] { new ItemStack(ModItems.powder_copper, 2), new ItemStack(ModItems.powder_copper, 2), new ItemStack(ModItems.sulfur, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_copper), new ItemStack[] { new ItemStack(ModItems.powder_copper, 2), new ItemStack(ModItems.powder_copper, 2), new ItemStack(ModItems.sulfur, 1), new ItemStack(ModItems.powder_cobalt_tiny, 1) }); recipes.put(new ComparableStack(ModItems.crystal_tungsten), new ItemStack[] { new ItemStack(ModItems.powder_tungsten, 2), new ItemStack(ModItems.powder_tungsten, 2), new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); recipes.put(new ComparableStack(ModItems.crystal_aluminium), new ItemStack[] { new ItemStack(ModItems.powder_aluminium, 2), new ItemStack(ModItems.powder_aluminium, 2), new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); recipes.put(new ComparableStack(ModItems.crystal_fluorite), new ItemStack[] { new ItemStack(ModItems.fluorite, 3), new ItemStack(ModItems.fluorite, 3), new ItemStack(ModItems.fluorite, 3), new ItemStack(ModItems.powder_lithium_tiny, 1) }); @@ -229,6 +247,7 @@ public class CentrifugeRecipes { recipes.put(new ComparableStack(ModItems.crystal_trixite), new ItemStack[] { new ItemStack(ModItems.powder_plutonium, 3), new ItemStack(ModItems.powder_cobalt, 3), new ItemStack(ModItems.powder_spark_mix, 1), new ItemStack(ModItems.powder_nitan_mix, 2) }); recipes.put(new ComparableStack(ModItems.crystal_lithium), new ItemStack[] { new ItemStack(ModItems.powder_lithium, 2), new ItemStack(ModItems.powder_lithium, 2), new ItemStack(ModItems.powder_quartz, 1), new ItemStack(ModItems.fluorite, 1) }); recipes.put(new ComparableStack(ModItems.crystal_starmetal), new ItemStack[] { new ItemStack(ModItems.powder_dura_steel, 3), new ItemStack(ModItems.powder_cobalt, 3), new ItemStack(ModItems.powder_astatine, 2), new ItemStack(ModItems.nugget_mercury, 5) }); + recipes.put(new ComparableStack(ModItems.crystal_cobalt), new ItemStack[] { new ItemStack(ModItems.powder_cobalt, 2), new ItemStack(ModItems.powder_iron, 3), new ItemStack(ModItems.powder_copper, 3), new ItemStack(ModItems.powder_lithium_tiny, 1) }); } public static ItemStack[] getOutput(ItemStack stack) { diff --git a/src/main/java/com/hbm/inventory/CrystallizerRecipes.java b/src/main/java/com/hbm/inventory/CrystallizerRecipes.java index 2da4c0760..ccc783c71 100644 --- a/src/main/java/com/hbm/inventory/CrystallizerRecipes.java +++ b/src/main/java/com/hbm/inventory/CrystallizerRecipes.java @@ -46,6 +46,7 @@ public class CrystallizerRecipes { recipes.put("oreLithium", new ItemStack(ModItems.crystal_lithium)); recipes.put("oreStarmetal", new ItemStack(ModItems.crystal_starmetal)); recipes.put("oreRareEarth", new ItemStack(ModItems.crystal_rare)); + recipes.put("oreCobalt", new ItemStack(ModItems.crystal_cobalt)); recipes.put(new ComparableStack(ModBlocks.ore_nether_fire), new ItemStack(ModItems.crystal_phosphorus)); recipes.put(new ComparableStack(ModBlocks.ore_tikite), new ItemStack(ModItems.crystal_trixite)); @@ -70,6 +71,14 @@ public class CrystallizerRecipes { recipes.put(new ComparableStack(ModItems.powder_meteorite), new ItemStack(ModItems.fragment_meteorite, 1)); recipes.put(new ComparableStack(ModItems.meteorite_sword_treated), new ItemStack(ModItems.meteorite_sword_etched, 1)); + + List quartz = OreDictionary.getOres("crystalCertusQuartz"); + + if(quartz != null && !quartz.isEmpty()) { + ItemStack qItem = quartz.get(0).copy(); + qItem.stackSize = 6; + recipes.put("oreCertusQuartz", qItem); + } } public static ItemStack getOutput(ItemStack stack) { diff --git a/src/main/java/com/hbm/inventory/FluidContainerRegistry.java b/src/main/java/com/hbm/inventory/FluidContainerRegistry.java index 6c41ec756..560d577ef 100644 --- a/src/main/java/com/hbm/inventory/FluidContainerRegistry.java +++ b/src/main/java/com/hbm/inventory/FluidContainerRegistry.java @@ -43,8 +43,7 @@ public class FluidContainerRegistry { sta.stackSize = 1; for(FluidContainer container : allContainers) { - if(ItemStack.areItemStacksEqual(container.fullContainer, sta) && - ItemStack.areItemStackTagsEqual(container.fullContainer, sta)) + if(ItemStack.areItemStacksEqual(container.fullContainer, sta) && ItemStack.areItemStackTagsEqual(container.fullContainer, sta)) return container.type; } @@ -59,9 +58,7 @@ public class FluidContainerRegistry { sta.stackSize = 1; for(FluidContainer container : allContainers) { - if(ItemStack.areItemStacksEqual(container.emptyContainer, sta) && - ItemStack.areItemStackTagsEqual(container.emptyContainer, sta) && - container.type.name().equals(type.name())) + if(ItemStack.areItemStacksEqual(container.emptyContainer, sta) && ItemStack.areItemStackTagsEqual(container.emptyContainer, sta) && container.type.name().equals(type.name())) return container.fullContainer.copy(); } @@ -76,9 +73,8 @@ public class FluidContainerRegistry { sta.stackSize = 1; for(FluidContainer container : allContainers) { - if(ItemStack.areItemStacksEqual(container.fullContainer, sta) && - ItemStack.areItemStackTagsEqual(container.fullContainer, sta)) - return container.emptyContainer.copy(); + if(ItemStack.areItemStacksEqual(container.fullContainer, sta) && ItemStack.areItemStackTagsEqual(container.fullContainer, sta)) + return container.emptyContainer == null ? null : container.emptyContainer.copy(); } return null; diff --git a/src/main/java/com/hbm/inventory/FluidTank.java b/src/main/java/com/hbm/inventory/FluidTank.java index 338c314c5..8b8c99313 100644 --- a/src/main/java/com/hbm/inventory/FluidTank.java +++ b/src/main/java/com/hbm/inventory/FluidTank.java @@ -117,7 +117,7 @@ public class FluidTank { slots[in].stackSize--; if(slots[in].stackSize <= 0) slots[in] = null; - } else if(slots[out] != null && slots[out].getItem() == FluidContainerRegistry.getEmptyContainer(slots[in]).getItem() && slots[out].stackSize < slots[out].getMaxStackSize()) { + } else if(slots[out] != null && (FluidContainerRegistry.getEmptyContainer(slots[in]) == null || slots[out].getItem() == FluidContainerRegistry.getEmptyContainer(slots[in]).getItem()) && slots[out].stackSize < slots[out].getMaxStackSize()) { fluid += FluidContainerRegistry.getFluidContent(slots[in], type); slots[in].stackSize--; if(slots[in].stackSize <= 0) diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index c3c9303fc..73bf3a8e7 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -210,6 +210,7 @@ public class OreDictManager { OreDictionary.registerOre("oreRareEarth", ModBlocks.ore_rare); OreDictionary.registerOre("oreZirconium", ModBlocks.ore_depth_zirconium); OreDictionary.registerOre("oreColtan", ModBlocks.ore_coltan); + OreDictionary.registerOre("oreCobalt", ModBlocks.ore_cobalt); OreDictionary.registerOre("oreIron", ModBlocks.ore_gneiss_iron); OreDictionary.registerOre("oreGold", ModBlocks.ore_gneiss_gold); @@ -226,6 +227,7 @@ public class OreDictManager { OreDictionary.registerOre("orePlutonium", ModBlocks.ore_nether_plutonium); OreDictionary.registerOre("oreTungsten", ModBlocks.ore_nether_tungsten); OreDictionary.registerOre("oreSulfur", ModBlocks.ore_nether_sulfur); + OreDictionary.registerOre("oreCobalt", ModBlocks.ore_nether_cobalt); OreDictionary.registerOre("oreSchrabidium", ModBlocks.ore_nether_schrabidium); OreDictionary.registerOre("oreUranium", ModBlocks.ore_meteor_uranium); diff --git a/src/main/java/com/hbm/inventory/RecipesCommon.java b/src/main/java/com/hbm/inventory/RecipesCommon.java index 964de761b..f7717faa2 100644 --- a/src/main/java/com/hbm/inventory/RecipesCommon.java +++ b/src/main/java/com/hbm/inventory/RecipesCommon.java @@ -7,6 +7,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.oredict.OreDictionary; +import scala.actors.threadpool.Arrays; public class RecipesCommon { @@ -83,6 +84,12 @@ public class RecipesCommon { public abstract boolean matchesRecipe(ItemStack stack, boolean ignoreSize); public abstract AStack copy(); + + /** + * Generates either an ItemStack or an ArrayList of ItemStacks + * @return + */ + public abstract List extractForNEI(); } public static class ComparableStack extends AStack { @@ -240,6 +247,11 @@ public class RecipesCommon { return true; } + + @Override + public List extractForNEI() { + return Arrays.asList(new ItemStack[] {this.toStack()}); + } } /* @@ -351,6 +363,17 @@ public class RecipesCommon { return false; } + + @Override + public List extractForNEI() { + + List ores = OreDictionary.getOres(name); + + for(ItemStack stack : ores) + stack.stackSize = this.stacksize; + + return ores; + } } public static class MetaBlock { diff --git a/src/main/java/com/hbm/inventory/ShredderRecipes.java b/src/main/java/com/hbm/inventory/ShredderRecipes.java index b959b17ea..0dddd1341 100644 --- a/src/main/java/com/hbm/inventory/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/ShredderRecipes.java @@ -72,6 +72,15 @@ public class ShredderRecipes { } else if(name.length() > 3 && name.substring(0, 3).equals("gem")) { ItemStack dust = getDustByName(name.substring(3)); + if(dust != null && dust.getItem() != ModItems.scrap) { + + for(ItemStack stack : matches) { + shredderRecipes.put(new ComparableStack(stack), dust); + } + } + } else if(name.length() > 7 && name.substring(0, 7).equals("crystal")) { + ItemStack dust = getDustByName(name.substring(7)); + if(dust != null && dust.getItem() != ModItems.scrap) { for(ItemStack stack : matches) { @@ -179,6 +188,7 @@ public class ShredderRecipes { ShredderRecipes.setRecipe(ModItems.crystal_trixite, new ItemStack(ModItems.powder_plutonium, 6)); ShredderRecipes.setRecipe(ModItems.crystal_lithium, new ItemStack(ModItems.powder_lithium, 3)); ShredderRecipes.setRecipe(ModItems.crystal_starmetal, new ItemStack(ModItems.powder_dura_steel, 6)); + ShredderRecipes.setRecipe(ModItems.crystal_cobalt, new ItemStack(ModItems.powder_cobalt, 3)); ShredderRecipes.setRecipe(ModBlocks.steel_poles, new ItemStack(ModItems.powder_steel_tiny, 3)); ShredderRecipes.setRecipe(ModBlocks.pole_top, new ItemStack(ModItems.powder_tungsten, 4)); diff --git a/src/main/java/com/hbm/inventory/container/ContainerRBMKConsole.java b/src/main/java/com/hbm/inventory/container/ContainerRBMKConsole.java deleted file mode 100644 index ecbd057ff..000000000 --- a/src/main/java/com/hbm/inventory/container/ContainerRBMKConsole.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.hbm.inventory.container; - -import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerRBMKConsole extends Container { - - private TileEntityRBMKConsole rbmk; - - public ContainerRBMKConsole(InventoryPlayer invPlayer, TileEntityRBMKConsole tedf) { - this.rbmk = tedf; - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { - ItemStack var3 = null; - Slot var4 = (Slot) this.inventorySlots.get(par2); - - if(var4 != null && var4.getHasStack()) { - return null; - } - - return var3; - } - - @Override - public boolean canInteractWith(EntityPlayer player) { - return rbmk.isUseableByPlayer(player); - } -} diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java index 9c55880d4..ed6a5ff8e 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java @@ -1,6 +1,7 @@ package com.hbm.inventory.gui; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.math.NumberUtils; @@ -8,7 +9,6 @@ import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.hbm.handler.FluidTypeHandler.FluidType; -import com.hbm.inventory.container.ContainerRBMKConsole; import com.hbm.lib.RefStrings; import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; @@ -18,16 +18,21 @@ import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKColumn; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; -public class GUIRBMKConsole extends GuiInfoContainer { +public class GUIRBMKConsole extends GuiScreen { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/reactors/gui_rbmk_console.png"); private TileEntityRBMKConsole console; + protected int guiLeft; + protected int guiTop; + protected int xSize; + protected int ySize; private boolean[] selection = new boolean[15 * 15]; private boolean az5Lid = true; @@ -36,7 +41,7 @@ public class GUIRBMKConsole extends GuiInfoContainer { private GuiTextField field; public GUIRBMKConsole(InventoryPlayer invPlayer, TileEntityRBMKConsole tedf) { - super(new ContainerRBMKConsole(invPlayer, tedf)); + super(); this.console = tedf; this.xSize = 244; @@ -54,11 +59,15 @@ public class GUIRBMKConsole extends GuiInfoContainer { this.field.setEnableBackgroundDrawing(false); this.field.setMaxStringLength(3); } + + this.guiLeft = (this.width - this.xSize) / 2; + this.guiTop = (this.height - this.ySize) / 2; } @Override public void drawScreen(int mouseX, int mouseY, float f) { - super.drawScreen(mouseX, mouseY, f); + this.drawDefaultBackground(); + this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); int bX = 86; int bY = 11; @@ -91,6 +100,12 @@ public class GUIRBMKConsole extends GuiInfoContainer { this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 39, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select blue group" } ); this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 50, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select purple group" } ); } + + public void drawCustomInfoStat(int mouseX, int mouseY, int x, int y, int width, int height, int tPosX, int tPosY, String[] text) { + + if(x <= mouseX && x + width > mouseX && y < mouseY && y + height >= mouseY) + this.func_146283_a(Arrays.asList(text), tPosX, tPosY); + } @Override protected void mouseClicked(int mouseX, int mouseY, int i) { @@ -196,12 +211,7 @@ public class GUIRBMKConsole extends GuiInfoContainer { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1F)); } } - - @Override - protected void drawGuiContainerForegroundLayer(int i, int j) { - } - @Override protected void drawGuiContainerBackgroundLayer(float interp, int mX, int mY) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); @@ -293,6 +303,11 @@ public class GUIRBMKConsole extends GuiInfoContainer { if(this.field.textboxKeyTyped(c, i)) return; + if(i == 1 || i == this.mc.gameSettings.keyBindInventory.getKeyCode()) { + this.mc.thePlayer.closeScreen(); + return; + } + super.keyTyped(c, i); } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index a310d6dc1..9cd256264 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -313,6 +313,7 @@ public class ModItems { public static Item crystal_rare; public static Item crystal_phosphorus; public static Item crystal_lithium; + public static Item crystal_cobalt; public static Item crystal_starmetal; public static Item crystal_trixite; @@ -2658,6 +2659,7 @@ public class ModItems { crystal_rare = new Item().setUnlocalizedName("crystal_rare").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_rare"); crystal_phosphorus = new ItemHazard().addFire(15).toItem().setUnlocalizedName("crystal_phosphorus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_phosphorus"); crystal_lithium = new ItemHazard().addHydroReactivity().toItem().setUnlocalizedName("crystal_lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_lithium"); + crystal_cobalt = new Item().setUnlocalizedName("crystal_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_cobalt"); crystal_starmetal = new Item().setUnlocalizedName("crystal_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_starmetal"); crystal_trixite = new ItemHazard().addRadiation(ItemHazard.trx * ItemHazard.crystal).toItem().setUnlocalizedName("crystal_trixite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_trixite"); gem_tantalium = new ItemCustomLore().setUnlocalizedName("gem_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_tantalium"); @@ -5481,6 +5483,7 @@ public class ModItems { GameRegistry.registerItem(crystal_rare, crystal_rare.getUnlocalizedName()); GameRegistry.registerItem(crystal_phosphorus, crystal_phosphorus.getUnlocalizedName()); GameRegistry.registerItem(crystal_lithium, crystal_lithium.getUnlocalizedName()); + GameRegistry.registerItem(crystal_cobalt, crystal_cobalt.getUnlocalizedName()); GameRegistry.registerItem(crystal_starmetal, crystal_starmetal.getUnlocalizedName()); GameRegistry.registerItem(crystal_trixite, crystal_trixite.getUnlocalizedName()); GameRegistry.registerItem(gem_tantalium, gem_tantalium.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index 063dd8b7b..e9303f889 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -91,6 +91,7 @@ public class HbmWorldGen implements IWorldGenerator { DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.ligniteSpawn, 24, 35, 25, ModBlocks.ore_lignite); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.asbestosSpawn, 4, 16, 16, ModBlocks.ore_asbestos); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.cinnebarSpawn, 4, 8, 16, ModBlocks.ore_cinnebar); + DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.cobaltSpawn, 4, 4, 8, ModBlocks.ore_cobalt); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.ironClusterSpawn, 6, 5, 50, ModBlocks.cluster_iron); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.titaniumClusterSpawn, 6, 5, 30, ModBlocks.cluster_titanium); @@ -600,6 +601,7 @@ public class HbmWorldGen implements IWorldGenerator { DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.netherSulfurSpawn, 12, 0, 127, ModBlocks.ore_nether_sulfur, Blocks.netherrack); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.netherPhosphorusSpawn, 6, 0, 127, ModBlocks.ore_nether_fire, Blocks.netherrack); DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.netherCoalSpawn, 32, 16, 96, ModBlocks.ore_nether_coal, Blocks.netherrack); + DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.netherCobaltSpawn, 6, 100, 26, ModBlocks.ore_nether_cobalt, Blocks.netherrack); if(GeneralConfig.enablePlutoniumOre) DungeonToolbox.generateOre(world, rand, i, j, WorldConfig.netherPlutoniumSpawn, 4, 0, 127, ModBlocks.ore_nether_plutonium, Blocks.netherrack); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 5ca922274..387dd9521 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -897,6 +897,8 @@ public class CraftingManager { GameRegistry.addSmelting(Item.getItemFromBlock(ModBlocks.ore_meteor_lead), new ItemStack(ModItems.ingot_lead, 3), 6.0F); GameRegistry.addSmelting(Item.getItemFromBlock(ModBlocks.ore_meteor_lithium), new ItemStack(ModItems.lithium), 20.0F); GameRegistry.addSmelting(Item.getItemFromBlock(ModBlocks.ore_meteor_starmetal), new ItemStack(ModItems.ingot_starmetal), 50.0F); + GameRegistry.addSmelting(Item.getItemFromBlock(ModBlocks.ore_cobalt), new ItemStack(ModItems.ingot_cobalt), 2.0F); + GameRegistry.addSmelting(Item.getItemFromBlock(ModBlocks.ore_nether_cobalt), new ItemStack(ModItems.ingot_cobalt), 2.0F); GameRegistry.addSmelting(Item.getItemFromBlock(ModBlocks.ore_gneiss_iron), new ItemStack(Items.iron_ingot), 5.0F); GameRegistry.addSmelting(Item.getItemFromBlock(ModBlocks.ore_gneiss_gold), new ItemStack(Items.gold_ingot), 5.0F); @@ -987,6 +989,7 @@ public class CraftingManager { GameRegistry.addSmelting(ModItems.crystal_rare, new ItemStack(ModItems.powder_desh_mix, 1), 2.0F); GameRegistry.addSmelting(ModItems.crystal_phosphorus, new ItemStack(ModItems.powder_fire, 6), 2.0F); GameRegistry.addSmelting(ModItems.crystal_lithium, new ItemStack(ModItems.lithium, 2), 2.0F); + GameRegistry.addSmelting(ModItems.crystal_cobalt, new ItemStack(ModItems.ingot_cobalt, 2), 2.0F); GameRegistry.addSmelting(ModItems.crystal_starmetal, new ItemStack(ModItems.ingot_starmetal, 2), 2.0F); GameRegistry.addSmelting(ModItems.crystal_trixite, new ItemStack(ModItems.ingot_plutonium, 4), 2.0F); GameRegistry.addSmelting(ModItems.gem_tantalium, new ItemStack(ModItems.ingot_tantalium, 1), 2.0F); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index e2277afc0..f8b3c9b08 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -21,7 +21,6 @@ import net.minecraftforge.common.ForgeChunkManager.Ticket; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.event.terraingen.DecorateBiomeEvent; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; @@ -1077,8 +1076,9 @@ public class MainRegistry { FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModBlocks.red_barrel), new ItemStack(ModItems.tank_steel), FluidType.DIESEL, 10000)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModBlocks.pink_barrel), new ItemStack(ModItems.tank_steel), FluidType.KEROSENE, 10000)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModBlocks.lox_barrel), new ItemStack(ModItems.tank_steel), FluidType.OXYGEN, 10000)); - - FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModBlocks.ore_gneiss_gas), new ItemStack(ModBlocks.stone_gneiss), FluidType.PETROLEUM, 250)); + + FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModBlocks.ore_oil), null, FluidType.OIL, 250)); + FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModBlocks.ore_gneiss_gas), null, FluidType.PETROLEUM, 250)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.cell_deuterium), new ItemStack(ModItems.cell_empty), FluidType.DEUTERIUM, 1000)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.cell_tritium), new ItemStack(ModItems.cell_empty), FluidType.TRITIUM, 1000)); @@ -1091,6 +1091,7 @@ public class MainRegistry { FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.cell_anti_schrabidium), new ItemStack(ModItems.cell_empty), FluidType.ASCHRAB, 1000)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.cell_sas3), new ItemStack(ModItems.cell_empty), FluidType.SAS3, 1000)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.bottle_mercury), new ItemStack(Items.glass_bottle), FluidType.MERCURY, 1000)); + FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.nugget_mercury), null, FluidType.MERCURY, 125)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.tank_waste, 1, 1), new ItemStack(ModItems.tank_waste, 1, 0), FluidType.WATZ, 8000)); FluidContainerRegistry.registerContainer(new FluidContainer(new ItemStack(ModItems.tank_waste, 1, 2), new ItemStack(ModItems.tank_waste, 1, 1), FluidType.WATZ, 8000)); diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index aa35ec1ad..f104c96a6 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -50,6 +50,10 @@ public class NEIConfig implements IConfigureNEI { API.registerUsageHandler(new HadronRecipeHandler()); API.registerRecipeHandler(new SILEXRecipeHandler()); API.registerUsageHandler(new SILEXRecipeHandler()); + API.registerRecipeHandler(new SmithingRecipeHandler()); + API.registerUsageHandler(new SmithingRecipeHandler()); + API.registerRecipeHandler(new AnvilRecipeHandler()); + API.registerUsageHandler(new AnvilRecipeHandler()); //Some things are even beyond my control...or are they? API.hideItem(ItemBattery.getEmptyBattery(ModItems.memory)); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java index e6c46bd26..df63d1493 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java @@ -62,6 +62,10 @@ public class TileEntityStorageDrum extends TileEntityMachineBase { if(item == ModItems.nuclear_waste_short_tiny && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 10) == 0) { slots[i] = new ItemStack(ModItems.nuclear_waste_short_depleted_tiny, 1, slots[i].getItemDamage()); } + + if(item == ModItems.nugget_au198 && worldObj.rand.nextInt(VersatileConfig.getShortDecayChance() / 100) == 0) { + slots[i] = new ItemStack(ModItems.nugget_mercury, 1, slots[i].getItemDamage()); + } } } @@ -113,7 +117,8 @@ public class TileEntityStorageDrum extends TileEntityMachineBase { if(item == ModItems.nuclear_waste_long || item == ModItems.nuclear_waste_long_tiny || item == ModItems.nuclear_waste_short || - item == ModItems.nuclear_waste_short_tiny) + item == ModItems.nuclear_waste_short_tiny || + item == ModItems.nugget_au198) return true; return false; @@ -132,7 +137,8 @@ public class TileEntityStorageDrum extends TileEntityMachineBase { if(item == ModItems.nuclear_waste_long_depleted || item == ModItems.nuclear_waste_long_depleted_tiny || item == ModItems.nuclear_waste_short_depleted || - item == ModItems.nuclear_waste_short_depleted_tiny) + item == ModItems.nuclear_waste_short_depleted_tiny || + item == ModItems.nugget_mercury) return true; return false; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 05ab4ff1d..a1148f884 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1022,6 +1022,7 @@ item.crystal_aluminium.name=Aluminiumkristalle item.crystal_beryllium.name=Berylliumkristalle item.crystal_charred.name=Verkohlter Kristall item.crystal_coal.name=Kohlekristalle +item.crystal_cobalt.name=Kobaltkristalle item.crystal_copper.name=Kupferkristalle item.crystal_diamond.name=Diamantkristalle item.crystal_energy.name=Energiekristall @@ -2988,6 +2989,7 @@ tile.ore_beryllium.name=Berylliumerz tile.ore_cinnebar.name=Zinnobererz tile.ore_coal_oil.name=Öliges Kohleerz tile.ore_coal_oil_burning.name=Brennendes Öliges Kohleerz +tile.ore_cobalt.name=Kobalterz tile.ore_coltan.name=Coltanerz tile.ore_copper.name=Kupfererz tile.ore_daffergon.name=Dellit @@ -3017,6 +3019,7 @@ tile.ore_meteor_titanium.name=Meteoriten-Titanerz tile.ore_meteor_tungsten.name=Meteoriten-Wolframerz tile.ore_meteor_uranium.name=Meteoriten-Uranerz tile.ore_nether_coal.name=Brennendes Nether-Kohleerz +tile.ore_nether_cobalt.name=Nether-Kobalterz tile.ore_nether_fire.name=Nether-Phosphorerz tile.ore_nether_plutonium.name=Nether-Plutoniumerz tile.ore_nether_schrabidium.name=Nether-Schrabidiumerz diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 23481043e..7ce2f918d 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1090,6 +1090,7 @@ item.crystal_aluminium.name=Aluminium Crystals item.crystal_beryllium.name=Beryllium Crystals item.crystal_charred.name=Charred Crystal item.crystal_coal.name=Coal Crystals +item.crystal_cobalt.name=Cobalt Crystals item.crystal_copper.name=Copper Crystals item.crystal_diamond.name=Diamond Crystals item.crystal_energy.name=Energy Crystal @@ -3072,6 +3073,7 @@ tile.ore_beryllium.name=Beryllium Ore tile.ore_cinnebar.name=Cinnabar Ore tile.ore_coal_oil.name=Oily Coal Ore tile.ore_coal_oil_burning.name=Burning Oily Coal Ore +tile.ore_cobalt.name=Cobalt Ore tile.ore_coltan.name=Coltan Ore tile.ore_copper.name=Copper Ore tile.ore_daffergon.name=Dellite @@ -3101,6 +3103,7 @@ tile.ore_meteor_titanium.name=Meteor Titanium Ore tile.ore_meteor_tungsten.name=Meteor Tungsten Ore tile.ore_meteor_uranium.name=Meteor Uranium Ore tile.ore_nether_coal.name=Burning Nether Coal Ore +tile.ore_nether_cobalt.name=Nether Cobalt Ore tile.ore_nether_fire.name=Nether Phosphorus Ore tile.ore_nether_plutonium.name=Nether Plutonium Ore tile.ore_nether_schrabidium.name=Nether Schrabidium Ore diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_cobalt.png b/src/main/resources/assets/hbm/textures/blocks/ore_cobalt.png new file mode 100644 index 0000000000000000000000000000000000000000..63c77c56f5907b20fcf5b1f0c001ed24a33849e3 GIT binary patch literal 382 zcmV-^0fGLBP)zq_*Vt4xr2M$ zdp_y#5j^kR_v20_Nm7Ji2oiA|LzZQPAPDG-HCLa)0rCMuHp+UnI--X>kOm+NH|O~k z=JPk>F|#pPkye0(?e-gd{|KJ<01lLqKtzfC88r_7o-R=h_lM^%=zTsbPNN>SrUavpkaJWFXyQCqV&NB=K zDfIg*l7ACoz5b|o?n=Gai;Qp?%5_Np`Dcqahh!(tVd1w@8S1)Jr^<#x7Si+!_WNJj zy9~{?WQ54fi^V%c(V2WQq?*m<6K1p5`-dc9dqy_g2H%PiBBqNe-wV>VVkqECluRz) ct_wx{0R>HL-E>7xZ~y=R07*qoM6N<$f><)B2LJ#7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ore_nether_cobalt.png b/src/main/resources/assets/hbm/textures/blocks/ore_nether_cobalt.png new file mode 100644 index 0000000000000000000000000000000000000000..24056129952a902a3c39fd8416ae2e00a9c8881c GIT binary patch literal 771 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/nei/gui_nei_smithing.png b/src/main/resources/assets/hbm/textures/gui/nei/gui_nei_smithing.png new file mode 100644 index 0000000000000000000000000000000000000000..748e9f8a8b0fb6ab375d1848bfc457868a0aa981 GIT binary patch literal 787 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%N?Bp530R%N1DIE+9Os70u z978JRyuF*~_b5Q5?O}1}>ZaTcf|K4Y=6-1vHSOxp!~&khl9I1XuD`GRm)SE<;N0zQ z-vw9mvmNDc-DCbEvYovsHvG50d{lO*(uPjw$U3XdI^I)-U#mskWqnY!_nkR!%|VO4 z&`?v~;Hi@j1oOS$zv0h>ryst{GuCM_HY6}H9Asf=;$&bEX5dg`5b$A8n8Dy+K$%4K z&FTjC7`^Gs>yQ7eS$Fy6mV+kG7S_kIE_n5o^H)!zgxOz-lFt{6^%)^{{WxHA-t_$E zd&vj33pez22t^AwoagTe~DWM4fN=N8J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/crystal_cobalt.png b/src/main/resources/assets/hbm/textures/items/crystal_cobalt.png new file mode 100644 index 0000000000000000000000000000000000000000..6657aeac863789d66ab9e956ee2f097eb0b3232d GIT binary patch literal 2845 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 6da43450f..46108ccee 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -8,7 +8,7 @@ "url": "", "updateUrl": "", "authorList": ["HbMinecraft"], - "credits": "rodolphito, grangerave, Hoboy, Doctor17, Drillgon200, HBM", + "credits": "rodolphito (explosion algorithms), grangerave (explosion algorithms), Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models, porting), UFFR, Bismarck (chinese localization), FirzzleFrazzle (models), Minecreep (models), VT-6/24 (models, textures), PheodoreKaczynski (textures), Pashtet (russian localization), Sten89 (models), impbk2002 (project settings), OvermindDL1 (project settings)", "logoFile": "", "screenshots": [], "dependencies": []