diff --git a/build.gradle b/build.gradle index c53644d51..4fc4b5d1f 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ buildscript { apply plugin: 'forge' apply plugin: 'maven' -version = "1.7.10-0.0.4.2" +version = "1.7.10-0.0.4.3" group = "ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/newestVersion.txt b/newestVersion.txt index cbb3283b2..d4ec1fbbc 100644 --- a/newestVersion.txt +++ b/newestVersion.txt @@ -1 +1 @@ -1.7.10-0.0.4.2 \ No newline at end of file +1.7.10-0.0.4.3 \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockBreaker.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockBreaker.java index 7ae082b95..e46eb1296 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockBreaker.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockBreaker.java @@ -19,6 +19,7 @@ import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import java.util.List; @@ -51,11 +52,19 @@ public class BlockBreaker extends BlockContainerBase implements INameableItem{ @Override public TileEntity createNewTileEntity(World world, int par2){ - return new TileEntityBreaker(this.isPlacer); + return this.isPlacer ? new TileEntityBreaker.TileEntityPlacer() : new TileEntityBreaker(); } @Override public IIcon getIcon(int side, int meta){ + if(side == 0 || side == 1) return this.topIcon; + if(side == 3) return this.frontIcon; + return this.blockIcon; + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side){ + int meta = world.getBlockMetadata(x, y, z); if(side != meta && (side == 0 || side == 1)) return this.topIcon; if(side == meta) return this.frontIcon; return this.blockIcon; diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockDropper.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockDropper.java new file mode 100644 index 000000000..7779a84eb --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockDropper.java @@ -0,0 +1,132 @@ +package ellpeck.actuallyadditions.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.ActuallyAdditions; +import ellpeck.actuallyadditions.inventory.GuiHandler; +import ellpeck.actuallyadditions.tile.TileEntityDropper; +import ellpeck.actuallyadditions.util.BlockUtil; +import ellpeck.actuallyadditions.util.INameableItem; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.block.Block; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import java.util.List; + +public class BlockDropper extends BlockContainerBase implements INameableItem{ + + private IIcon frontIcon; + private IIcon topIcon; + + public BlockDropper(){ + super(Material.rock); + this.setHarvestLevel("pickaxe", 0); + this.setHardness(1.0F); + this.setStepSound(soundTypeStone); + } + + @Override + public String getOredictName(){ + return this.getName(); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack){ + int rotation = BlockPistonBase.determineOrientation(world, x, y, z, player); + world.setBlockMetadataWithNotify(x, y, z, rotation, 2); + } + + @Override + public TileEntity createNewTileEntity(World world, int par2){ + return new TileEntityDropper(); + } + + @Override + public IIcon getIcon(int side, int meta){ + if(side == 0 || side == 1) return this.topIcon; + if(side == 3) return this.frontIcon; + return this.blockIcon; + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side){ + int meta = world.getBlockMetadata(x, y, z); + if(side != meta && (side == 0 || side == 1)) return this.topIcon; + if(side == meta) return this.frontIcon; + return this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconReg){ + this.blockIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName()); + this.frontIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Front"); + this.topIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Top"); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9){ + if(!world.isRemote){ + TileEntityDropper dropper = (TileEntityDropper)world.getTileEntity(x, y, z); + if (dropper != null) player.openGui(ActuallyAdditions.instance, GuiHandler.DROPPER_ID, world, x, y, z); + return true; + } + return true; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int par6){ + this.dropInventory(world, x, y, z); + super.breakBlock(world, x, y, z, block, par6); + } + + @Override + public String getName(){ + return "blockDropper"; + } + + public static class TheItemBlock extends ItemBlock{ + + private Block theBlock; + + public TheItemBlock(Block block){ + super(block); + this.theBlock = block; + this.setHasSubtypes(false); + this.setMaxDamage(0); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.rare; + } + + @Override + public String getUnlocalizedName(ItemStack stack){ + return this.getUnlocalizedName(); + } + + @Override + @SuppressWarnings("unchecked") + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { + BlockUtil.addInformation(theBlock, list, 1, ""); + } + + @Override + public int getMetadata(int damage){ + return damage; + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceDouble.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceDouble.java index 5a0abd48c..bee306682 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceDouble.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockFurnaceDouble.java @@ -66,6 +66,14 @@ public class BlockFurnaceDouble extends BlockContainerBase implements INameableI @Override public IIcon getIcon(int side, int meta){ + if(side == 1) return this.topIcon; + if(side == 3) return this.frontIcon; + return this.blockIcon; + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side){ + int meta = world.getBlockMetadata(x, y, z); if(side == 1) return this.topIcon; if(side == meta+2 && meta <= 3) return this.frontIcon; else if(side == meta-2 && meta > 3) return this.onIcon; diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockGrinder.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockGrinder.java index 8ffa1f4d1..63b653816 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockGrinder.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockGrinder.java @@ -42,7 +42,7 @@ public class BlockGrinder extends BlockContainerBase implements INameableItem{ @Override public TileEntity createNewTileEntity(World world, int par2){ - return new TileEntityGrinder(this.isDouble); + return this.isDouble ? new TileEntityGrinder.TileEntityGrinderDouble() : new TileEntityGrinder(); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockInputter.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockInputter.java index 27615e393..5f9495cde 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockInputter.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockInputter.java @@ -43,7 +43,7 @@ public class BlockInputter extends BlockContainerBase implements INameableItem{ @Override public TileEntity createNewTileEntity(World world, int par2){ - return new TileEntityInputter(this.isAdvanced); + return this.isAdvanced ? new TileEntityInputter.TileEntityInputterAdvanced() : new TileEntityInputter(); } @Override @@ -127,8 +127,6 @@ public class BlockInputter extends BlockContainerBase implements INameableItem{ if((((BlockInputter)theBlock).isAdvanced)) list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + "." + ((INameableItem)theBlock).getName() + ".desc")); } else list.add(ItemUtil.shiftForInfo()); - - if(KeyUtil.isControlPressed()) BlockUtil.addOredictName(((INameableItem)theBlock).getOredictName(), list); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockMisc.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockMisc.java index 5f8c7ac27..1bb1a2594 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockMisc.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockMisc.java @@ -91,7 +91,7 @@ public class BlockMisc extends Block implements INameableItem{ @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { - BlockUtil.addInformation(theBlock, list, 1, allMiscBlocks[stack.getItemDamage()].getName(), allMiscBlocks[stack.getItemDamage()].getOredictName()); + BlockUtil.addInformation(theBlock, list, 1, allMiscBlocks[stack.getItemDamage()].getName()); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java b/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java index 5218a979a..40b45453e 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java @@ -21,10 +21,10 @@ public class InitBlocks{ public static Block blockHeatCollector; public static Block blockItemRepairer; public static Block blockGreenhouseGlass; + public static Block blockBreaker; public static Block blockPlacer; - - //public static Block blockCoffeeMachine; + public static Block blockDropper; public static void init(){ Util.logInfo("Initializing Blocks..."); @@ -77,7 +77,7 @@ public class InitBlocks{ blockPlacer = new BlockBreaker(true); BlockUtil.register(blockPlacer, BlockBreaker.TheItemBlock.class); - //blockCoffeeMachine = new BlockCoffeeMachine(); - //BlockUtil.register(blockCoffeeMachine, BlockCoffeeMachine.TheItemBlock.class); + blockDropper = new BlockDropper(); + BlockUtil.register(blockDropper, BlockDropper.TheItemBlock.class); } } \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigBoolValues.java b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigBoolValues.java index dc0ee34ac..9c246564c 100644 --- a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigBoolValues.java +++ b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigBoolValues.java @@ -20,7 +20,9 @@ public enum ConfigBoolValues{ PEARL_SHARD_DROP("Ender Pearl Shard", ConfigCategories.MOB_DROPS, true, "If the Ender Pearl Shard drops from Mobs"), EMERALD_SHARD_CROP("Emerald Shard", ConfigCategories.MOB_DROPS, true, "If the Emerald Shard drops from Mobs"), - DO_UPDATE_CHECK("Do Update Check", ConfigCategories.OTHER, true, "If Actually Additions should check for an Update on joining a World"); + DO_UPDATE_CHECK("Do Update Check", ConfigCategories.OTHER, true, "If Actually Additions should check for an Update on joining a World"), + + DO_CRUSHER_SPAM("Crusher Debug", ConfigCategories.OTHER, false, "Print out Crusher Recipe Initializing Debug"); public final String name; public final String category; diff --git a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java index 95f2e1011..7faebfc9d 100644 --- a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigCrafting.java @@ -22,6 +22,7 @@ public enum ConfigCrafting{ GREENHOUSE_GLASS("Greenhouse Glass", ConfigCategories.BLOCKS_CRAFTING), BREAKER("Breaker", ConfigCategories.BLOCKS_CRAFTING), PLACER("Placer", ConfigCategories.BLOCKS_CRAFTING), + DROPPER("Dropper", ConfigCategories.BLOCKS_CRAFTING), SPEED_UPGRADE("Speed Upgrade", ConfigCategories.BLOCKS_CRAFTING), BAGUETTE("Baguette", ConfigCategories.FOOD_CRAFTING), diff --git a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigIntValues.java b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigIntValues.java index 4fbb5f2a9..65944bf6c 100644 --- a/src/main/java/ellpeck/actuallyadditions/config/values/ConfigIntValues.java +++ b/src/main/java/ellpeck/actuallyadditions/config/values/ConfigIntValues.java @@ -45,8 +45,8 @@ public enum ConfigIntValues{ GLASS_TIME_NEEDED("Greenhouse Glass: Time Needed", ConfigCategories.MACHINE_VALUES, 1000, 10, 1000000, "The Time Needed for the Greenhouse Glass to grow a Plant below it"), - BREAKER_TIME_NEEDED("Breaker and Placer: Time Needed", ConfigCategories.MACHINE_VALUES, 15, 1, 10000, "The Time Needed for the Breaker and the Placer to place or break a Block"); - + BREAKER_TIME_NEEDED("Breaker and Placer: Time Needed", ConfigCategories.MACHINE_VALUES, 15, 1, 10000, "The Time Needed for the Breaker and the Placer to place or break a Block"), + DROPPER_TIME_NEEDED("Dropper: Time Needed", ConfigCategories.MACHINE_VALUES, 10, 1, 10000, "The Time Needed for the Dropper to drop an Item"); public final String name; public final String category; diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java index 28f2578d0..acadece1b 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/BlockCrafting.java @@ -61,17 +61,17 @@ public class BlockCrafting{ 'C', TheMiscBlocks.STONE_CASING.getOredictName())); //Solar Panel - if(ConfigCrafting.SOLAR_PANEL.isEnabled()) + /*if(ConfigCrafting.SOLAR_PANEL.isEnabled()) GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFurnaceSolar), "IQI", "CDC", "IBI", 'D', "blockDiamond", 'I', "ingotIron", 'Q', TheMiscBlocks.STONE_CASING.getOredictName(), 'C', TheMiscItems.COIL_ADVANCED.getOredictName(), - 'B', new ItemStack(Blocks.iron_bars))); + 'B', new ItemStack(Blocks.iron_bars)));*/ //Heat Collector - if(ConfigCrafting.HEAT_COLLECTOR.isEnabled()) + /*if(ConfigCrafting.HEAT_COLLECTOR.isEnabled()) GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockHeatCollector), "BRB", "CDC", "BQB", 'D', "blockDiamond", @@ -79,7 +79,7 @@ public class BlockCrafting{ 'Q', TheMiscBlocks.STONE_CASING.getOredictName(), 'L', new ItemStack(Items.lava_bucket), 'C', TheMiscItems.COIL_ADVANCED.getOredictName(), - 'B', new ItemStack(Blocks.iron_bars))); + 'B', new ItemStack(Blocks.iron_bars)));*/ //Quartz Pillar GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.QUARTZ_PILLAR.ordinal()), @@ -177,6 +177,14 @@ public class BlockCrafting{ 'R', TheMiscItems.COIL.getOredictName(), 'P', Items.diamond_pickaxe)); + //Dropper + if(ConfigCrafting.DROPPER.isEnabled()) + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockDropper), + "CCC", "CDR", "CCC", + 'C', "cobblestone", + 'D', Blocks.dropper, + 'R', TheMiscItems.COIL_ADVANCED.getOredictName())); + } } diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java index 10ec0bed8..b5cb88347 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java @@ -2,89 +2,36 @@ package ellpeck.actuallyadditions.crafting; import ellpeck.actuallyadditions.items.InitItems; import ellpeck.actuallyadditions.items.metalists.TheDusts; +import ellpeck.actuallyadditions.recipe.GrinderRecipeHandler; +import ellpeck.actuallyadditions.recipe.GrinderRecipeHandler.SearchCase; +import ellpeck.actuallyadditions.recipe.GrinderRecipeHandler.SpecialOreCase; import ellpeck.actuallyadditions.recipe.GrinderRecipes; -import ellpeck.actuallyadditions.util.ModUtil; import ellpeck.actuallyadditions.util.Util; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; -import org.apache.logging.log4j.Level; - -import java.util.ArrayList; public class GrinderCrafting{ + private static GrinderRecipeHandler grindRecHan = GrinderRecipeHandler.instance(); + private static GrinderRecipes grindRec = GrinderRecipes.instance(); + public static void init(){ Util.logInfo("Initializing Crusher Recipes..."); - GrinderRecipes.instance().registerRecipe(new ItemStack(Blocks.iron_ore), new ItemStack(InitItems.itemDust, 2, TheDusts.IRON.ordinal()), new ItemStack(InitItems.itemDust, 1, TheDusts.GOLD.ordinal()), 10); - GrinderRecipes.instance().registerRecipe(new ItemStack(Blocks.redstone_ore), new ItemStack(Items.redstone, 10), null, 0); - GrinderRecipes.instance().registerRecipe(new ItemStack(Blocks.lapis_ore), new ItemStack(InitItems.itemDust, 12, TheDusts.LAPIS.ordinal()), null, 0); + grindRec.registerRecipe(new ItemStack(Blocks.iron_ore), new ItemStack(InitItems.itemDust, 2, TheDusts.IRON.ordinal()), new ItemStack(InitItems.itemDust, 1, TheDusts.GOLD.ordinal()), 10); + grindRec.registerRecipe(new ItemStack(Blocks.redstone_ore), new ItemStack(Items.redstone, 10), null, 0); + grindRec.registerRecipe(new ItemStack(Blocks.lapis_ore), new ItemStack(InitItems.itemDust, 12, TheDusts.LAPIS.ordinal()), null, 0); + grindRecHan.specialOreCases.add(new SpecialOreCase("oreNickel", "dustPlatinum", 30)); - registerFinally(); - } + grindRecHan.searchCases.add(new SearchCase("ore", 2)); + grindRecHan.searchCases.add(new SearchCase("oreNether", 6)); + grindRecHan.searchCases.add(new SearchCase("denseore", 8)); + grindRecHan.searchCases.add(new SearchCase("gem", 1)); + grindRecHan.searchCases.add(new SearchCase("ingot", 1)); + grindRecHan.exceptions.add("ingotBrick"); + grindRecHan.exceptions.add("ingotBrickNether"); - public static void registerFinally(){ - String[] names = OreDictionary.getOreNames(); - for(String name : names){ - - int resultAmount = 1; - String nameOfOre = null; - - if(name.length() > 3 && name.substring(0, 3).equals("ore")){ - nameOfOre = name.substring(3); - resultAmount = 2; - } - if(name.length() > 9 && name.substring(0, 9).equals("oreNether")){ - nameOfOre = name.substring(9); - resultAmount = 4; - } - if(name.length() > 8 && name.substring(0, 8).equals("denseore")){ - nameOfOre = name.substring(8); - resultAmount = 12; - } - if(name.length() > 3 && name.substring(0, 3).equals("gem")) nameOfOre = name.substring(3); - if(name.length() > 5 && name.substring(0, 5).equals("ingot")) nameOfOre = name.substring(5); - - if(nameOfOre != null){ - ArrayList allDusts; - String nameToGetFrom = "dust" + nameOfOre; - - allDusts = OreDictionary.getOres(nameToGetFrom); - - if(allDusts != null && allDusts.size() > 0){ - ArrayList allOresOfName = OreDictionary.getOres(name); - if(allOresOfName != null && allOresOfName.size() > 0){ - for(ItemStack theDust : allDusts){ - ItemStack output = theDust.copy(); - output.stackSize = resultAmount; - for(ItemStack theInput : allOresOfName){ - ItemStack input = theInput.copy(); - if(GrinderRecipes.instance().getOutput(input, false) == null){ - ArrayList specialStacks = null; - int specialAmount = 0; - - if(name.equals("oreNickel")){ - specialStacks = OreDictionary.getOres("dustPlatinum"); - specialAmount = 30; - } - - if(specialStacks != null && specialStacks.size() > 0){ - for(ItemStack theSpecial : specialStacks){ - ItemStack special = theSpecial.copy(); - GrinderRecipes.instance().registerRecipe(input, output, special, specialAmount); - } - } - else GrinderRecipes.instance().registerRecipe(input, output, null, 0); - } - } - } - } - else ModUtil.AA_LOGGER.log(Level.ERROR, "Couldn't register Crusher Recipe! Didn't find Items registered as '" + name + "'! This shouldn't happen as there is something registered as '" + name + "' that doesn't exist!"); - } - else if(!name.equals("ingotBrick") && !name.equals("ingotBrickNether")) ModUtil.AA_LOGGER.log(Level.WARN, "Couldn't register Crusher Recipe! An Item with OreDictionary Registry '" + nameToGetFrom + "' doesn't exist! It should correspond to '" + name + "'! This is not an Error, just a bit sad :("); - } - } + grindRecHan.registerFinally(); } } diff --git a/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java b/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java index 4974f7735..a6f6b816a 100644 --- a/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java +++ b/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java @@ -40,6 +40,7 @@ public class CreativeTab extends CreativeTabs{ this.addBlock(InitBlocks.blockFishingNet); this.addBlock(InitBlocks.blockBreaker); this.addBlock(InitBlocks.blockPlacer); + this.addBlock(InitBlocks.blockDropper); this.addBlock(InitBlocks.blockMisc); this.addBlock(InitBlocks.blockFeeder); diff --git a/src/main/java/ellpeck/actuallyadditions/event/InitEvents.java b/src/main/java/ellpeck/actuallyadditions/event/InitEvents.java index 2dd7d230e..71c28a16d 100644 --- a/src/main/java/ellpeck/actuallyadditions/event/InitEvents.java +++ b/src/main/java/ellpeck/actuallyadditions/event/InitEvents.java @@ -11,6 +11,7 @@ public class InitEvents{ Util.registerEvent(new CraftEvent()); Util.registerEvent(new KilledEvent()); Util.registerEvent(new PickupEvent()); + Util.registerEvent(new TooltipEvent()); } } diff --git a/src/main/java/ellpeck/actuallyadditions/event/RenderPlayerEventAA.java b/src/main/java/ellpeck/actuallyadditions/event/RenderPlayerEventAA.java index 12e46eb73..d26b563b2 100644 --- a/src/main/java/ellpeck/actuallyadditions/event/RenderPlayerEventAA.java +++ b/src/main/java/ellpeck/actuallyadditions/event/RenderPlayerEventAA.java @@ -39,7 +39,7 @@ public class RenderPlayerEventAA{ //dqmhose if(event.entityPlayer.getUniqueID().equals(UUID.fromString("cb7b293a-5031-484e-b5be-b4f2f4e92726"))){ - hoseRender.render(event.entityPlayer, event.partialRenderTick, 0.5F, 1.25F); + hoseRender.render(event.entityPlayer, event.partialRenderTick, 0.5F, 1.3F); } } } diff --git a/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java b/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java new file mode 100644 index 000000000..b4f7c3ec3 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/event/TooltipEvent.java @@ -0,0 +1,26 @@ +package ellpeck.actuallyadditions.event; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import ellpeck.actuallyadditions.util.KeyUtil; +import ellpeck.actuallyadditions.util.ModUtil; +import ellpeck.actuallyadditions.util.StringUtil; +import net.minecraft.util.StatCollector; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; +import net.minecraftforge.oredict.OreDictionary; + +public class TooltipEvent{ + + @SubscribeEvent + public void onTooltipEvent(ItemTooltipEvent event){ + if(KeyUtil.isControlPressed()){ + int[] oreIDs = OreDictionary.getOreIDs(event.itemStack); + if(oreIDs.length > 0){ + event.toolTip.add(StringUtil.GRAY + StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".oredictName.desc") + ":"); + for(int oreID : oreIDs){ + event.toolTip.add(StringUtil.GRAY + "-" + OreDictionary.getOreName(oreID)); + } + } + else event.toolTip.add(StringUtil.GRAY + StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".noOredictNameAvail.desc")); + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/gadget/ModelStandardBlock.java b/src/main/java/ellpeck/actuallyadditions/gadget/ModelStandardBlock.java index ceccb05fd..f01ba74ce 100644 --- a/src/main/java/ellpeck/actuallyadditions/gadget/ModelStandardBlock.java +++ b/src/main/java/ellpeck/actuallyadditions/gadget/ModelStandardBlock.java @@ -6,7 +6,6 @@ import net.minecraft.client.model.ModelRenderer; public class ModelStandardBlock extends ModelBaseAA{ public ModelRenderer s; - private String name; public ModelStandardBlock(String name){ diff --git a/src/main/java/ellpeck/actuallyadditions/gen/JamVillagerTradeHandler.java b/src/main/java/ellpeck/actuallyadditions/gen/JamVillagerTradeHandler.java index 7e5c1f900..dccd4fdee 100644 --- a/src/main/java/ellpeck/actuallyadditions/gen/JamVillagerTradeHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/gen/JamVillagerTradeHandler.java @@ -15,47 +15,71 @@ import java.util.Random; public class JamVillagerTradeHandler implements VillagerRegistry.IVillageTradeHandler{ - private ArrayList villagerWants = new ArrayList(); + private ArrayList trades = new ArrayList(); public JamVillagerTradeHandler(){ - this.addWants("ingotGold"); - this.addWants("cropWheat"); - this.addWants("dustRedstone"); - this.addWants(new ItemStack(Items.bucket)); - this.addWants(new ItemStack(Items.glass_bottle)); - this.addWants(new ItemStack(Items.potionitem)); - this.addWants("ingotIron"); - this.addWants("gemDiamond"); - this.addWants("dustGlowstone"); + this.addWants("ingotGold", 3, 2); + this.addWants("cropWheat", 10, 10); + this.addWants("dustRedstone", 15, 15); + this.addWants(new ItemStack(Items.bucket), 1, 4); + this.addWants(new ItemStack(Items.glass_bottle), 5, 5); + this.addWants(new ItemStack(Items.potionitem), 1, 0); + this.addWants("ingotIron", 5, 5); + this.addWants("gemDiamond", 1, 1); + this.addWants("dustGlowstone", 5, 10); } @Override - @SuppressWarnings("unchecked") + @SuppressWarnings("all") public void manipulateTradesForVillager(EntityVillager villager, MerchantRecipeList recipeList, Random rand){ - for(int i = 0; i < villagerWants.size(); i++){ - ItemStack wantsTwo = null; - ItemStack wantsOne = villagerWants.get(i); - wantsOne.stackSize = rand.nextInt(10)+10; - if(wantsOne.stackSize > wantsOne.getMaxStackSize()) wantsOne.stackSize = wantsOne.getMaxStackSize(); - if(rand.nextInt(5) == 0){ - wantsTwo = villagerWants.get(rand.nextInt(villagerWants.size())); - wantsTwo.stackSize = rand.nextInt(10)+1; - if(wantsTwo.stackSize > wantsTwo.getMaxStackSize()) wantsTwo.stackSize = wantsTwo.getMaxStackSize(); - } - if(wantsOne == wantsTwo) wantsTwo = null; + for(int i = 0; i < trades.size(); i++){ + for(int j = 0; j < trades.get(i).wants.size(); j++){ + ItemStack wantsTwo = null; + ItemStack wantsOne = trades.get(i).wants.get(j); - for(int j = 0; j < TheJams.values().length; j++){ - recipeList.add(new MerchantRecipe(wantsOne, wantsTwo, new ItemStack(InitItems.itemJams, rand.nextInt(3)+1, j))); + wantsOne.stackSize = rand.nextInt(trades.get(i).extraStackSize) + trades.get(i).baseStackSize; + if(rand.nextInt(3) == 0){ + int toGet = rand.nextInt(trades.size()); + for(int k = 0; k < trades.get(toGet).wants.size(); k++){ + wantsTwo = trades.get(toGet).wants.get(k); + wantsTwo.stackSize = rand.nextInt(trades.get(k).extraStackSize) + trades.get(k).baseStackSize; + } + } + if(wantsOne == wantsTwo) wantsTwo = null; + + for(int k = 0; k < TheJams.values().length; k++){ + recipeList.add(new MerchantRecipe(wantsOne, wantsTwo, new ItemStack(InitItems.itemJams, rand.nextInt(5)+1, k))); + } } } } - public void addWants(String oredictName){ + public void addWants(String oredictName, int minSize, int maxSize){ ArrayList stacks = OreDictionary.getOres(oredictName); - villagerWants.addAll(stacks); + trades.add(new Trade(stacks, minSize, maxSize)); } - public void addWants(ItemStack stack){ - villagerWants.add(stack); + public void addWants(ItemStack stack, int minSize, int maxSize){ + trades.add(new Trade(stack, minSize, maxSize)); + } + + public static class Trade{ + + public final ArrayList wants = new ArrayList(); + public final int baseStackSize; + public final int extraStackSize; + + public Trade(ArrayList wants, int minStackSize, int maxStackSize){ + this.wants.addAll(wants); + this.baseStackSize = minStackSize <= 0 ? 1 : minStackSize; + this.extraStackSize = maxStackSize <= 0 ? 1 : maxStackSize; + } + + public Trade(ItemStack want, int minStackSize, int maxStackSize){ + this.wants.add(want); + this.baseStackSize = minStackSize <= 0 ? 1 : minStackSize; + this.extraStackSize = maxStackSize <= 0 ? 1 : maxStackSize; + } + } } diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerDropper.java b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerDropper.java new file mode 100644 index 000000000..47dde5e19 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerDropper.java @@ -0,0 +1,78 @@ +package ellpeck.actuallyadditions.inventory; + +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityDropper; +import invtweaks.api.container.InventoryContainer; +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; + +@InventoryContainer +public class ContainerDropper extends Container{ + + private TileEntityDropper dropper; + + public ContainerDropper(InventoryPlayer inventory, TileEntityBase tile){ + this.dropper = (TileEntityDropper)tile; + + for (int i = 0; i < 3; i++){ + for (int j = 0; j < 3; j++){ + this.addSlotToContainer(new Slot(this.dropper, j+i*3, 62+j*18, 21+i*18)); + } + } + + for (int i = 0; i < 3; i++){ + for (int j = 0; j < 9; j++){ + this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18)); + } + } + for (int i = 0; i < 9; i++){ + this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 155)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player){ + return this.dropper.isUseableByPlayer(player); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot){ + final int inventoryStart = 9; + final int inventoryEnd = inventoryStart+26; + final int hotbarStart = inventoryEnd+1; + final int hotbarEnd = hotbarStart+8; + + Slot theSlot = (Slot)this.inventorySlots.get(slot); + if(theSlot.getHasStack()){ + ItemStack currentStack = theSlot.getStack(); + ItemStack newStack = currentStack.copy(); + + if(slot <= hotbarEnd && slot >= inventoryStart){ + this.mergeItemStack(newStack, 0, 9+1, false); + } + + if(slot <= hotbarEnd && slot >= hotbarStart){ + this.mergeItemStack(newStack, inventoryStart, inventoryEnd+1, false); + } + + else if(slot <= inventoryEnd && slot >= inventoryStart){ + this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false); + } + + else if(slot < inventoryStart){ + this.mergeItemStack(newStack, inventoryStart, hotbarEnd+1, false); + } + + if(newStack.stackSize == 0) theSlot.putStack(null); + else theSlot.onSlotChanged(); + if(newStack.stackSize == currentStack.stackSize) return null; + theSlot.onPickupFromSlot(player, newStack); + + return currentStack; + } + return null; + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiDropper.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiDropper.java new file mode 100644 index 000000000..eb7543178 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiDropper.java @@ -0,0 +1,47 @@ +package ellpeck.actuallyadditions.inventory; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityDropper; +import ellpeck.actuallyadditions.util.AssetUtil; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class GuiDropper extends GuiContainer{ + + private TileEntityDropper dropper; + + private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBreaker"); + + public GuiDropper(InventoryPlayer inventory, TileEntityBase tile){ + super(new ContainerDropper(inventory, tile)); + this.dropper = (TileEntityDropper)tile; + this.xSize = 176; + this.ySize = 93+86; + } + + @Override + public void drawGuiContainerForegroundLayer(int x, int y){ + AssetUtil.displayNameAndInventoryString(this.fontRendererObj, xSize, 93-5, -10, this.dropper.getInventoryName()); + } + + @Override + public void drawGuiContainerBackgroundLayer(float f, int x, int y){ + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); + this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); + + this.mc.getTextureManager().bindTexture(resLoc); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); + } + + @Override + public void drawScreen(int x, int y, float f){ + super.drawScreen(x, y, f); + } +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java index 57b74302c..7a3e81c66 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java @@ -43,6 +43,9 @@ public class GuiHandler implements IGuiHandler{ case BREAKER_ID: TileEntityBase tileBreaker = (TileEntityBase)world.getTileEntity(x, y, z); return new ContainerBreaker(entityPlayer.inventory, tileBreaker); + case DROPPER_ID: + TileEntityBase tileDropper = (TileEntityBase)world.getTileEntity(x, y, z); + return new ContainerDropper(entityPlayer.inventory, tileDropper); default: return null; } @@ -80,6 +83,9 @@ public class GuiHandler implements IGuiHandler{ case BREAKER_ID: TileEntityBase tileBreaker = (TileEntityBase)world.getTileEntity(x, y, z); return new GuiBreaker(entityPlayer.inventory, tileBreaker); + case DROPPER_ID: + TileEntityBase tileDropper = (TileEntityBase)world.getTileEntity(x, y, z); + return new GuiDropper(entityPlayer.inventory, tileDropper); default: return null; } @@ -95,6 +101,7 @@ public class GuiHandler implements IGuiHandler{ public static final int REPAIRER_ID = 7; public static final int INPUTTER_ADVANCED_ID = 8; public static final int BREAKER_ID = 9; + public static final int DROPPER_ID = 10; public static void init(){ Util.logInfo("Initializing GuiHandler..."); diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemDust.java b/src/main/java/ellpeck/actuallyadditions/items/ItemDust.java index 5d439b5e0..97e9b7dfd 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemDust.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemDust.java @@ -61,7 +61,7 @@ public class ItemDust extends Item implements INameableItem{ @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ - ItemUtil.addInformation(this, list, 1, allDusts[stack.getItemDamage()].getName(), allDusts[stack.getItemDamage()].getOredictName()); + ItemUtil.addInformation(this, list, 1, allDusts[stack.getItemDamage()].getName()); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemFoods.java b/src/main/java/ellpeck/actuallyadditions/items/ItemFoods.java index 2f88d4c0f..0492eb531 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemFoods.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemFoods.java @@ -104,8 +104,6 @@ public class ItemFoods extends ItemFood implements INameableItem{ list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".saturation.desc") + ": " + allFoods[stack.getItemDamage()].saturation); } else list.add(ItemUtil.shiftForInfo()); - - if(KeyUtil.isControlPressed()) ItemUtil.addOredictName(allFoods[stack.getItemDamage()].getOredictName(), list); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemJams.java b/src/main/java/ellpeck/actuallyadditions/items/ItemJams.java index e8b4631a8..5ce347cd3 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemJams.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemJams.java @@ -111,8 +111,6 @@ public class ItemJams extends ItemFood implements INameableItem{ list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".saturation.desc") + ": " + allJams[stack.getItemDamage()].saturation); } else list.add(ItemUtil.shiftForInfo()); - - if(KeyUtil.isControlPressed()) ItemUtil.addOredictName(allJams[stack.getItemDamage()].getOredictName(), list); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemKnife.java b/src/main/java/ellpeck/actuallyadditions/items/ItemKnife.java index 0c22c527c..a73b250a2 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemKnife.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemKnife.java @@ -58,8 +58,6 @@ public class ItemKnife extends Item implements INameableItem{ } else list.add(ItemUtil.shiftForInfo()); - if(KeyUtil.isControlPressed()) ItemUtil.addOredictName(this.getOredictName(), list); - } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemLeafBlower.java b/src/main/java/ellpeck/actuallyadditions/items/ItemLeafBlower.java index a1a246a69..945a1ae9b 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemLeafBlower.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemLeafBlower.java @@ -111,8 +111,6 @@ public class ItemLeafBlower extends Item implements INameableItem{ list.add(StringUtil.ITALIC + StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".itemLeafBlower.desc.3")); } else list.add(ItemUtil.shiftForInfo()); - - if(KeyUtil.isControlPressed()) ItemUtil.addOredictName(this.getOredictName(), list); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemMisc.java b/src/main/java/ellpeck/actuallyadditions/items/ItemMisc.java index ab9bbc2bc..2cf6110b6 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemMisc.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemMisc.java @@ -62,7 +62,7 @@ public class ItemMisc extends Item implements INameableItem{ @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ - ItemUtil.addInformation(this, list, 1, allMiscItems[stack.getItemDamage()].getName(), allMiscItems[stack.getItemDamage()].getOredictName()); + ItemUtil.addInformation(this, list, 1, allMiscItems[stack.getItemDamage()].getName()); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemPotionRing.java b/src/main/java/ellpeck/actuallyadditions/items/ItemPotionRing.java index 7f855ff2d..785608fd1 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemPotionRing.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemPotionRing.java @@ -91,7 +91,7 @@ public class ItemPotionRing extends Item implements INameableItem{ @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ - ItemUtil.addInformation(this, list, 2, "", this.getOredictName()); + ItemUtil.addInformation(this, list, 2, ""); if(KeyUtil.isShiftPressed()){ if(stack.getItemDamage() == ThePotionRings.SATURATION.ordinal()){ diff --git a/src/main/java/ellpeck/actuallyadditions/items/ItemSpecialDrop.java b/src/main/java/ellpeck/actuallyadditions/items/ItemSpecialDrop.java index b3e2aa817..200273019 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemSpecialDrop.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemSpecialDrop.java @@ -76,7 +76,7 @@ public class ItemSpecialDrop extends Item implements INameableItem{ @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ - ItemUtil.addInformation(this, list, 1, allDrops[stack.getItemDamage()].getName(), allDrops[stack.getItemDamage()].getOredictName()); + ItemUtil.addInformation(this, list, 1, allDrops[stack.getItemDamage()].getName()); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/tools/ItemAxeAA.java b/src/main/java/ellpeck/actuallyadditions/items/tools/ItemAxeAA.java index 3ee50bdbb..6287b62f6 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/tools/ItemAxeAA.java +++ b/src/main/java/ellpeck/actuallyadditions/items/tools/ItemAxeAA.java @@ -40,8 +40,6 @@ public class ItemAxeAA extends ItemAxe implements INameableItem{ list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".durability.desc") + ": " + (this.getMaxDamage()-this.getDamage(stack)) + "/" + this.getMaxDamage()); } else list.add(ItemUtil.shiftForInfo()); - - if(KeyUtil.isControlPressed()) ItemUtil.addOredictName(this.getOredictName(), list); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/tools/ItemHoeAA.java b/src/main/java/ellpeck/actuallyadditions/items/tools/ItemHoeAA.java index 9e3fd9f8d..4adf9cf67 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/tools/ItemHoeAA.java +++ b/src/main/java/ellpeck/actuallyadditions/items/tools/ItemHoeAA.java @@ -40,8 +40,6 @@ public class ItemHoeAA extends ItemHoe implements INameableItem{ list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".durability.desc") + ": " + (this.getMaxDamage()-this.getDamage(stack)) + "/" + this.getMaxDamage()); } else list.add(ItemUtil.shiftForInfo()); - - if(KeyUtil.isControlPressed()) ItemUtil.addOredictName(this.getOredictName(), list); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/tools/ItemPickaxeAA.java b/src/main/java/ellpeck/actuallyadditions/items/tools/ItemPickaxeAA.java index f2f21159e..04bf68c14 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/tools/ItemPickaxeAA.java +++ b/src/main/java/ellpeck/actuallyadditions/items/tools/ItemPickaxeAA.java @@ -40,8 +40,6 @@ public class ItemPickaxeAA extends ItemPickaxe implements INameableItem{ list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".durability.desc") + ": " + (this.getMaxDamage()-this.getDamage(stack)) + "/" + this.getMaxDamage()); } else list.add(ItemUtil.shiftForInfo()); - - if(KeyUtil.isControlPressed()) ItemUtil.addOredictName(this.getOredictName(), list); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/tools/ItemShovelAA.java b/src/main/java/ellpeck/actuallyadditions/items/tools/ItemShovelAA.java index 56dc2115f..f805278c0 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/tools/ItemShovelAA.java +++ b/src/main/java/ellpeck/actuallyadditions/items/tools/ItemShovelAA.java @@ -40,8 +40,6 @@ public class ItemShovelAA extends ItemSpade implements INameableItem{ list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".durability.desc") + ": " + (this.getMaxDamage()-this.getDamage(stack)) + "/" + this.getMaxDamage()); } else list.add(ItemUtil.shiftForInfo()); - - if(KeyUtil.isControlPressed()) ItemUtil.addOredictName(this.getOredictName(), list); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/items/tools/ItemSwordAA.java b/src/main/java/ellpeck/actuallyadditions/items/tools/ItemSwordAA.java index b4c09e7fe..2b4a84b32 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/tools/ItemSwordAA.java +++ b/src/main/java/ellpeck/actuallyadditions/items/tools/ItemSwordAA.java @@ -40,8 +40,6 @@ public class ItemSwordAA extends ItemSword implements INameableItem{ list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".durability.desc") + ": " + (this.getMaxDamage()-this.getDamage(stack)) + "/" + this.getMaxDamage()); } else list.add(ItemUtil.shiftForInfo()); - - if(KeyUtil.isControlPressed()) ItemUtil.addOredictName(this.getOredictName(), list); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipeHandler.java b/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipeHandler.java new file mode 100644 index 000000000..192270f4f --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipeHandler.java @@ -0,0 +1,112 @@ +package ellpeck.actuallyadditions.recipe; + +import ellpeck.actuallyadditions.config.values.ConfigBoolValues; +import ellpeck.actuallyadditions.util.ModUtil; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; +import org.apache.logging.log4j.Level; + +import java.util.ArrayList; + +public class GrinderRecipeHandler{ + + private static final GrinderRecipeHandler instance = new GrinderRecipeHandler(); + + public static GrinderRecipeHandler instance(){ + return instance; + } + + public ArrayList searchCases = new ArrayList(); + public ArrayList exceptions = new ArrayList(); + public ArrayList specialOreCases = new ArrayList(); + + public static class SearchCase{ + + public final String name; + public final int resultAmount; + + public SearchCase(String name, int resultAmount){ + this.name = name; + this.resultAmount = resultAmount; + } + } + + public static class SpecialOreCase{ + + public final String inputName; + public final String secondResultName; + public final int secondResultChance; + + public SpecialOreCase(String inputName, String secondResultName, int secondResultChance){ + this.inputName = inputName; + this.secondResultChance = secondResultChance; + this.secondResultName = secondResultName; + } + + } + + public void registerFinally(){ + String[] names = OreDictionary.getOreNames(); + for(String inputName : names){ + + if(!this.exceptions.contains(inputName)){ + int resultAmount = 1; + String inputNameWithoutPrefix = null; + + for(SearchCase searchCase : searchCases){ + String toSearch = searchCase.name; + if(inputName.length() > toSearch.length() && inputName.substring(0, toSearch.length()).equals(toSearch)){ + inputNameWithoutPrefix = inputName.substring(toSearch.length()); + resultAmount = searchCase.resultAmount; + break; + } + } + + if(inputNameWithoutPrefix != null){ + String inputWithDustPrefix = "dust" + inputNameWithoutPrefix; + ArrayList allOresOfInitialInputName = OreDictionary.getOres(inputName); + ArrayList allOresWithDustPrefix = OreDictionary.getOres(inputWithDustPrefix); + if(allOresOfInitialInputName != null && allOresOfInitialInputName.size() > 0){ + if(allOresWithDustPrefix != null && allOresWithDustPrefix.size() > 0){ + for(ItemStack theInput : allOresOfInitialInputName){ + for(ItemStack theDust : allOresWithDustPrefix){ + ItemStack input = theInput.copy(); + ItemStack output = theDust.copy(); + output.stackSize = resultAmount; + if(!GrinderRecipes.instance().hasExactRecipe(input, output)){ + ArrayList specialStacks = null; + int specialAmount = 0; + + for(SpecialOreCase theCase : specialOreCases){ + if(inputName.equals(theCase.inputName)){ + specialStacks = OreDictionary.getOres(theCase.secondResultName); + specialAmount = theCase.secondResultChance; + } + } + if(specialStacks != null && specialStacks.size() > 0){ + for(ItemStack theSpecial : specialStacks){ + ItemStack special = theSpecial.copy(); + GrinderRecipes.instance().registerRecipe(input, output, special, specialAmount); + } + } + else GrinderRecipes.instance().registerRecipe(input, output, null, 0); + } + } + } + } + else{ + if(ConfigBoolValues.DO_CRUSHER_SPAM.isEnabled()) + ModUtil.AA_LOGGER.log(Level.INFO, "Couldn't register Crusher Recipe! An Item with OreDictionary Registry '" + inputWithDustPrefix + "' doesn't exist! It should correspond to '" + inputName + "'! This is not an Error, just a bit sad :("); + } + + } + else{ + if(ConfigBoolValues.DO_CRUSHER_SPAM.isEnabled()) + ModUtil.AA_LOGGER.log(Level.WARN, "Couldn't register Crusher Recipe! Didn't find Items registered as '" + inputName + "'! This shouldn't happen as there is something registered as '" + inputName + "' that doesn't exist!"); + } + } + } + } + } + +} diff --git a/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java b/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java index f2210abfb..d0a2ebab2 100644 --- a/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java +++ b/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java @@ -27,6 +27,15 @@ public class GrinderRecipes{ return null; } + public boolean hasExactRecipe(ItemStack input, ItemStack outputOne){ + for(GrinderRecipe recipe : recipes){ + if(recipe.input.isItemEqual(input) && recipe.firstOutput.isItemEqual(outputOne)){ + return true; + } + } + return false; + } + public int getSecondChance(ItemStack input){ for(GrinderRecipe recipe : recipes){ if(recipe.input.isItemEqual(input)){ diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java index d676a87f0..cfde380a7 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java @@ -41,6 +41,10 @@ public class TileEntityBase extends TileEntity{ GameRegistry.registerTileEntity(TileEntityItemRepairer.class, ModUtil.MOD_ID_LOWER + ":tileEntityRepairer"); GameRegistry.registerTileEntity(TileEntityGreenhouseGlass.class, ModUtil.MOD_ID_LOWER + ":tileEntityGreenhouseGlass"); GameRegistry.registerTileEntity(TileEntityBreaker.class, ModUtil.MOD_ID_LOWER + ":tileEntityBreaker"); + GameRegistry.registerTileEntity(TileEntityDropper.class, ModUtil.MOD_ID_LOWER + ":tileEntityDropper"); + GameRegistry.registerTileEntity(TileEntityInputter.TileEntityInputterAdvanced.class, ModUtil.MOD_ID_LOWER + ":tileEntityInputterAdvanced"); + GameRegistry.registerTileEntity(TileEntityBreaker.TileEntityPlacer.class, ModUtil.MOD_ID_LOWER + ":tileEntityPlacer"); + GameRegistry.registerTileEntity(TileEntityGrinder.TileEntityGrinderDouble.class, ModUtil.MOD_ID_LOWER + ":tileEntityGrinderDouble"); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java index b2641ffc5..27ef4bfb3 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java @@ -7,24 +7,33 @@ import net.minecraft.block.BlockAir; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChunkCoordinates; +import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; public class TileEntityBreaker extends TileEntityInventoryBase{ - private boolean isPlacer; + public static class TileEntityPlacer extends TileEntityBreaker{ + + public TileEntityPlacer(){ + super(9, "placer"); + this.isPlacer = true; + } + + } + + public boolean isPlacer; private final int timeNeeded = ConfigIntValues.BREAKER_TIME_NEEDED.getValue(); private int currentTime; - @SuppressWarnings("unused") - public TileEntityBreaker(){ - super(9, ""); + public TileEntityBreaker(int slots, String name){ + super(slots, name); } - public TileEntityBreaker(boolean isPlacer){ - super(9, isPlacer ? "placer" : "breaker"); - this.isPlacer = isPlacer; + public TileEntityBreaker(){ + super(9, "breaker"); + this.isPlacer = false; } @Override @@ -35,37 +44,27 @@ public class TileEntityBreaker extends TileEntityInventoryBase{ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ - int sideToBreak = -1; + ForgeDirection sideToManipulate = ForgeDirection.getOrientation(worldObj.getBlockMetadata(xCoord, yCoord, zCoord)); - int metaOfCurrentBlock = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - if(metaOfCurrentBlock == 0) sideToBreak = 1; - else if(metaOfCurrentBlock == 1) sideToBreak = 0; - else if(metaOfCurrentBlock == 2) sideToBreak = 2; - else if(metaOfCurrentBlock == 3) sideToBreak = 4; - else if(metaOfCurrentBlock == 4) sideToBreak = 5; - else if(metaOfCurrentBlock == 5) sideToBreak = 3; - - ChunkCoordinates coordsOfBlockToBreak = WorldUtil.getCoordsFromSide(sideToBreak, xCoord, yCoord, zCoord); - if(coordsOfBlockToBreak != null){ - Block blockToBreak = worldObj.getBlock(coordsOfBlockToBreak.posX, coordsOfBlockToBreak.posY, coordsOfBlockToBreak.posZ); - if(!this.isPlacer && blockToBreak != null && blockToBreak.getBlockHardness(worldObj, coordsOfBlockToBreak.posX, coordsOfBlockToBreak.posY, coordsOfBlockToBreak.posZ) > -1.0F){ + ChunkCoordinates coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, xCoord, yCoord, zCoord); + if(coordsBlock != null){ + Block blockToBreak = worldObj.getBlock(coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ); + if(!this.isPlacer && blockToBreak != null && blockToBreak.getBlockHardness(worldObj, coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ) > -1.0F){ ArrayList drops = new ArrayList(); - int meta = worldObj.getBlockMetadata(coordsOfBlockToBreak.posX, coordsOfBlockToBreak.posY, coordsOfBlockToBreak.posZ); - drops.addAll(blockToBreak.getDrops(worldObj, coordsOfBlockToBreak.posX, coordsOfBlockToBreak.posY, coordsOfBlockToBreak.posZ, meta, 0)); + int meta = worldObj.getBlockMetadata(coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ); + drops.addAll(blockToBreak.getDrops(worldObj, coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ, meta, 0)); if(this.addToInventory(drops, false)){ - worldObj.playAuxSFX(2001, coordsOfBlockToBreak.posX, coordsOfBlockToBreak.posY, coordsOfBlockToBreak.posZ, Block.getIdFromBlock(blockToBreak) + (meta << 12)); - WorldUtil.breakBlockAtSide(sideToBreak, worldObj, xCoord, yCoord, zCoord); + worldObj.playAuxSFX(2001, coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ, Block.getIdFromBlock(blockToBreak) + (meta << 12)); + WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, xCoord, yCoord, zCoord); this.addToInventory(drops, true); this.markDirty(); } } - else if(this.isPlacer && (worldObj.getBlock(coordsOfBlockToBreak.posX, coordsOfBlockToBreak.posY, coordsOfBlockToBreak.posZ).isReplaceable(worldObj, coordsOfBlockToBreak.posX, coordsOfBlockToBreak.posY, coordsOfBlockToBreak.posZ))){ + else if(this.isPlacer && (worldObj.getBlock(coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ).isReplaceable(worldObj, coordsBlock.posX, coordsBlock.posY, coordsBlock.posZ))){ ItemStack removeFalse = this.removeFromInventory(false); - if(removeFalse != null && Block.getBlockFromItem(removeFalse.getItem()) != blockToBreak && Block.getBlockFromItem(removeFalse.getItem()).canPlaceBlockAt(worldObj, coordsOfBlockToBreak.posX, coordsOfBlockToBreak.posY, coordsOfBlockToBreak.posZ)){ - ItemStack stack = this.removeFromInventory(true); - //TODO insert sound effect - WorldUtil.placeBlockAtSide(sideToBreak, worldObj, xCoord, yCoord, zCoord, stack); + if(removeFalse != null && Block.getBlockFromItem(removeFalse.getItem()) != blockToBreak && WorldUtil.placeBlockAtSide(sideToManipulate, worldObj, xCoord, yCoord, zCoord, removeFalse)){ + this.removeFromInventory(true); } } } @@ -79,16 +78,12 @@ public class TileEntityBreaker extends TileEntityInventoryBase{ @Override public void writeToNBT(NBTTagCompound compound){ super.writeToNBT(compound); - compound.setBoolean("IsPlacer", this.isPlacer); - compound.setString("Name", this.name); compound.setInteger("CurrentTime", this.currentTime); } @Override public void readFromNBT(NBTTagCompound compound){ super.readFromNBT(compound); - this.isPlacer = compound.getBoolean("IsPlacer"); - this.name = compound.getString("Name"); this.currentTime = compound.getInteger("CurrentTime"); } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDropper.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDropper.java new file mode 100644 index 000000000..eeed05a36 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityDropper.java @@ -0,0 +1,80 @@ +package ellpeck.actuallyadditions.tile; + +import ellpeck.actuallyadditions.config.values.ConfigIntValues; +import ellpeck.actuallyadditions.util.WorldUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityDropper extends TileEntityInventoryBase{ + + private final int timeNeeded = ConfigIntValues.DROPPER_TIME_NEEDED.getValue(); + private int currentTime; + + @SuppressWarnings("unused") + public TileEntityDropper(){ + super(9, "dropper"); + } + + @Override + @SuppressWarnings("unchecked") + public void updateEntity(){ + if(!worldObj.isRemote){ + if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(this.currentTime > 0){ + this.currentTime--; + if(this.currentTime <= 0){ + if(this.removeFromInventory(false) != null){ + ItemStack stack = this.removeFromInventory(true); + stack.stackSize = 1; + WorldUtil.dropItemAtSide(ForgeDirection.getOrientation(worldObj.getBlockMetadata(xCoord, yCoord, zCoord)), worldObj, xCoord, yCoord, zCoord, stack); + } + } + } + else this.currentTime = this.timeNeeded; + } + } + } + + @Override + public void writeToNBT(NBTTagCompound compound){ + super.writeToNBT(compound); + compound.setInteger("CurrentTime", this.currentTime); + } + + @Override + public void readFromNBT(NBTTagCompound compound){ + super.readFromNBT(compound); + this.currentTime = compound.getInteger("CurrentTime"); + } + + public ItemStack removeFromInventory(boolean actuallyDo){ + for(int i = 0; i < this.slots.length; i++){ + if(this.slots[i] != null){ + ItemStack slot = this.slots[i].copy(); + if(actuallyDo){ + this.slots[i].stackSize--; + if(this.slots[i].stackSize <= 0) this.slots[i] = null; + } + return slot; + } + } + return null; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack){ + return true; + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, int side){ + return this.isItemValidForSlot(slot, stack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, int side){ + return true; + } + +} diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGrinder.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGrinder.java index 14151d0d3..6c80adcdd 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGrinder.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityGrinder.java @@ -13,6 +13,17 @@ import java.util.Random; public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcceptor{ + public static class TileEntityGrinderDouble extends TileEntityGrinder{ + + public TileEntityGrinderDouble(){ + super(8, "grinderDouble"); + this.isDouble = true; + this.maxCrushTime = this.getStandardSpeed(); + this.speedUpgradeSlot = 7; + } + + } + public static final int SLOT_COAL = 0; public static final int SLOT_INPUT_1 = 1; public static final int SLOT_OUTPUT_1_1 = 2; @@ -31,15 +42,15 @@ public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcc public boolean isDouble; - public TileEntityGrinder(){ - super(0, ""); + public TileEntityGrinder(int slots, String name){ + super(slots, name); } - public TileEntityGrinder(boolean isDouble){ - super(isDouble ? 8 : 5, isDouble ? "grinderDouble" : "grinder"); + public TileEntityGrinder(){ + super(5, "grinder"); + this.isDouble = false; this.maxCrushTime = this.getStandardSpeed(); - this.isDouble = isDouble; - this.speedUpgradeSlot = isDouble ? 7 : 4; + this.speedUpgradeSlot = 4; } @Override @@ -139,9 +150,6 @@ public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcc compound.setInteger("CoalTimeLeft", this.coalTimeLeft); compound.setInteger("FirstCrushTime", this.firstCrushTime); compound.setInteger("SecondCrushTime", this.secondCrushTime); - compound.setBoolean("IsDouble", this.isDouble); - compound.setString("Name", this.name); - compound.setInteger("Slots", this.slots.length); super.writeToNBT(compound); } @@ -151,12 +159,6 @@ public class TileEntityGrinder extends TileEntityUpgradable implements IPowerAcc this.coalTimeLeft = compound.getInteger("CoalTimeLeft"); this.firstCrushTime = compound.getInteger("FirstCrushTime"); this.secondCrushTime = compound.getInteger("SecondCrushTime"); - this.isDouble = compound.getBoolean("IsDouble"); - this.name = compound.getString("Name"); - this.maxCrushTime = this.getStandardSpeed(); - this.speedUpgradeSlot = isDouble ? 7 : 4; - int slots = compound.getInteger("Slots"); - this.initializeSlots(slots == 0 ? 5 : slots); super.readFromNBT(compound); } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInputter.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInputter.java index 037c61d80..c96d5953f 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInputter.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInputter.java @@ -9,6 +9,15 @@ import net.minecraft.tileentity.TileEntity; public class TileEntityInputter extends TileEntityInventoryBase{ + public static class TileEntityInputterAdvanced extends TileEntityInputter{ + + public TileEntityInputterAdvanced(){ + super(13, "inputterAdvanced"); + this.isAdvanced = true; + } + + } + public static final int PUT_FILTER_START = 1; public static final int PULL_FILTER_START = 7; @@ -24,13 +33,13 @@ public class TileEntityInputter extends TileEntityInventoryBase{ public boolean isAdvanced; - public TileEntityInputter(){ - super(0, ""); + public TileEntityInputter(int slots, String name){ + super(slots, name); } - public TileEntityInputter(boolean isAdvanced){ - super(isAdvanced ? 13 : 1, isAdvanced ? "inputterAdvanced" : "inputter"); - this.isAdvanced = isAdvanced; + public TileEntityInputter(){ + super(1, "inputter"); + this.isAdvanced = false; } @Override @@ -177,8 +186,9 @@ public class TileEntityInputter extends TileEntityInventoryBase{ } public void initVars(){ - this.placeToPull = WorldUtil.getTileEntityFromSide(this.sideToPull, this.worldObj, this.xCoord, this.yCoord, this.zCoord); - this.placeToPut = WorldUtil.getTileEntityFromSide(this.sideToPut, this.worldObj, this.xCoord, this.yCoord, this.zCoord); + + this.placeToPull = WorldUtil.getTileEntityFromSide(WorldUtil.getDirectionByRotatingSide(this.sideToPull), this.worldObj, this.xCoord, this.yCoord, this.zCoord); + this.placeToPut = WorldUtil.getTileEntityFromSide(WorldUtil.getDirectionByRotatingSide(this.sideToPut), this.worldObj, this.xCoord, this.yCoord, this.zCoord); if(this.placeToPull != null && this.placeToPull instanceof IInventory){ this.placeToPullSlotAmount = ((IInventory)this.placeToPull).getSizeInventory(); @@ -225,21 +235,14 @@ public class TileEntityInputter extends TileEntityInventoryBase{ compound.setInteger("SlotToPut", this.slotToPut); compound.setInteger("SideToPull", this.sideToPull); compound.setInteger("SlotToPull", this.slotToPull); - compound.setBoolean("IsAdvanced", this.isAdvanced); - compound.setString("Name", this.name); - compound.setInteger("Slots", this.slots.length); } @Override public void readFromNBT(NBTTagCompound compound){ - int slots = compound.getInteger("Slots"); - this.initializeSlots(slots == 0 ? 1 : slots); this.sideToPut = compound.getInteger("SideToPut"); this.slotToPut = compound.getInteger("SlotToPut"); this.sideToPull = compound.getInteger("SideToPull"); this.slotToPull = compound.getInteger("SlotToPull"); - this.isAdvanced = compound.getBoolean("IsAdvanced"); - this.name = compound.getString("Name"); super.readFromNBT(compound); } diff --git a/src/main/java/ellpeck/actuallyadditions/update/UpdateChecker.java b/src/main/java/ellpeck/actuallyadditions/update/UpdateChecker.java index 209abe198..8d96556a1 100644 --- a/src/main/java/ellpeck/actuallyadditions/update/UpdateChecker.java +++ b/src/main/java/ellpeck/actuallyadditions/update/UpdateChecker.java @@ -17,6 +17,7 @@ import java.net.URL; public class UpdateChecker{ public boolean doneChecking = false; + public boolean checkFailed = false; public boolean notified = false; public String onlineVersion; @@ -29,9 +30,11 @@ public class UpdateChecker{ @SubscribeEvent public void onTick(TickEvent.ClientTickEvent event){ if(doneChecking && event.phase == TickEvent.Phase.END && Minecraft.getMinecraft().thePlayer != null && !notified){ - if(onlineVersion.length() > 0){ - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + if(checkFailed){ + player.addChatComponentMessage(IChatComponent.Serializer.func_150699_a(StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".update.failed.desc"))); + } + else if(onlineVersion.length() > 0){ int update = Integer.parseInt(onlineVersion.replace("-", "").replace(".", "")); int client = Integer.parseInt(ModUtil.VERSION.replace("-", "").replace(".", "")); @@ -69,6 +72,7 @@ public class UpdateChecker{ } catch(Exception e){ ModUtil.AA_LOGGER.log(Level.ERROR, "Update Check failed!"); + checkFailed = true; e.printStackTrace(); } doneChecking = true; diff --git a/src/main/java/ellpeck/actuallyadditions/util/BlockUtil.java b/src/main/java/ellpeck/actuallyadditions/util/BlockUtil.java index dcfe94660..86fc9e727 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/BlockUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/BlockUtil.java @@ -17,26 +17,13 @@ public class BlockUtil{ } @SuppressWarnings("unchecked") - public static void addInformation(Block block, List list, int lines, String extraName, String extraOredictName){ + public static void addInformation(Block block, List list, int lines, String extraName){ if(KeyUtil.isShiftPressed()){ for(int i = 0; i < lines; i++){ list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + "." + ((INameableItem)block).getName() + extraName + ".desc" + (lines > 1 ? "." +(i+1) : ""))); } } else list.add(ItemUtil.shiftForInfo()); - - if(KeyUtil.isControlPressed()){ - addOredictName(extraOredictName, list); - } - } - - public static void addInformation(Block block, List list, int lines, String extraName){ - addInformation(block, list, lines, extraName, ((INameableItem)block).getOredictName()); - } - - @SuppressWarnings("unchecked") - public static void addOredictName(String name, List list){ - list.add(StringUtil.GRAY + StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".oredictName.desc") + ": " + name); } public static void register(Block block, Class itemBlock, Enum[] list){ @@ -52,7 +39,7 @@ public class BlockUtil{ block.setCreativeTab(CreativeTab.instance); block.setBlockName(createUnlocalizedName(block)); GameRegistry.registerBlock(block, itemBlock, ((INameableItem)block).getName()); - if(!((INameableItem)block).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)block).getOredictName(), block); + if(!((INameableItem)block).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)block).getOredictName(), new ItemStack(block, 1, Util.WILDCARD)); } } diff --git a/src/main/java/ellpeck/actuallyadditions/util/FakePlayerUtil.java b/src/main/java/ellpeck/actuallyadditions/util/FakePlayerUtil.java new file mode 100644 index 000000000..d61199c55 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/util/FakePlayerUtil.java @@ -0,0 +1,21 @@ +package ellpeck.actuallyadditions.util; + +import com.mojang.authlib.GameProfile; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.util.FakePlayer; + +import java.util.UUID; + +public class FakePlayerUtil{ + + public static final String fakeName = "EllpecksActuallyAdditionsFakePlayer"; + public static GameProfile fakeProfile = new GameProfile(UUID.nameUUIDFromBytes(fakeName.getBytes()), fakeName); + + public static FakePlayer newFakePlayer(World world){ + if(world instanceof WorldServer){ + return new FakePlayer((WorldServer)world, fakeProfile); + } + else return null; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/util/ItemUtil.java b/src/main/java/ellpeck/actuallyadditions/util/ItemUtil.java index 0614892cd..cfe583ece 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/ItemUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/ItemUtil.java @@ -11,42 +11,27 @@ import java.util.List; public class ItemUtil{ - public static void addInformation(Item item, List list, int lines, String extraName){ - addInformation(item, list, lines, extraName, ((INameableItem)item).getOredictName()); - } - @SuppressWarnings("unchecked") - public static void addInformation(Item item, List list, int lines, String extraName, String extraOredictName){ + public static void addInformation(Item item, List list, int lines, String extraName){ if(KeyUtil.isShiftPressed()){ for(int i = 0; i < lines; i++){ list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + "." + ((INameableItem)item).getName() + extraName + ".desc" + (lines > 1 ? "." +(i+1) : ""))); } } else list.add(shiftForInfo()); - - if(KeyUtil.isControlPressed()){ - addOredictName(extraOredictName, list); - } } - - public static void registerItems(Item[] items){ for(Item item : items){ register(item); } } - @SuppressWarnings("unchecked") - public static void addOredictName(String name, List list){ - list.add(StringUtil.GRAY + StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".oredictName.desc") + ": " + name); - } - public static void register(Item item){ item.setCreativeTab(CreativeTab.instance); item.setUnlocalizedName(createUnlocalizedName(item)); GameRegistry.registerItem(item, ((INameableItem)item).getName()); - if(!((INameableItem)item).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)item).getOredictName(), item); + if(!((INameableItem)item).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)item).getOredictName(), new ItemStack(item, 1, Util.WILDCARD)); } public static void register(Item item, Enum[] list){ diff --git a/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java b/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java index 3097c271b..94584f60d 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java @@ -5,7 +5,7 @@ import org.apache.logging.log4j.Logger; public class ModUtil{ - public static final String VERSION = "1.7.10-0.0.4.2"; + public static final String VERSION = "1.7.10-0.0.4.3"; public static final String MOD_ID = "ActuallyAdditions"; public static final String NAME = "Actually Additions"; diff --git a/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java b/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java index 5bc1bfa98..05966627c 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java @@ -1,45 +1,66 @@ package ellpeck.actuallyadditions.util; -import net.minecraft.block.Block; +import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.util.ForgeDirection; public class WorldUtil{ - public static ChunkCoordinates getCoordsFromSide(int side, int x, int y, int z){ - if(side == 0) return new ChunkCoordinates(x, y + 1, z); - if(side == 1) return new ChunkCoordinates(x, y - 1, z); - if(side == 2) return new ChunkCoordinates(x, y, z - 1); - if(side == 3) return new ChunkCoordinates(x + 1, y, z); - if(side == 4) return new ChunkCoordinates(x, y, z + 1); - if(side == 5) return new ChunkCoordinates(x - 1, y, z); - else return null; + public static ChunkCoordinates getCoordsFromSide(ForgeDirection side, int x, int y, int z){ + if(side == ForgeDirection.UNKNOWN) return null; + return new ChunkCoordinates(x+side.offsetX, y+side.offsetY, z+side.offsetZ); } - public static void breakBlockAtSide(int side, World world, int x, int y, int z){ + public static void breakBlockAtSide(ForgeDirection side, World world, int x, int y, int z){ ChunkCoordinates c = getCoordsFromSide(side, x, y, z); if(c != null){ world.setBlockToAir(c.posX, c.posY, c.posZ); } } - public static void placeBlockAtSide(int side, World world, int x, int y, int z, ItemStack stack){ - Block block = Block.getBlockFromItem(stack.getItem()); - int meta = stack.getItem().getDamage(stack); - ChunkCoordinates c = getCoordsFromSide(side, x, y, z); - if(c != null){ - world.setBlock(c.posX, c.posY, c.posZ, block, meta, 2); + public static boolean placeBlockAtSide(ForgeDirection side, World world, int x, int y, int z, ItemStack stack){ + if(world instanceof WorldServer){ + if(side != ForgeDirection.UNKNOWN){ + return stack.tryPlaceItemIntoWorld(FakePlayerUtil.newFakePlayer(world), world, x, y, z, side.ordinal(), 0, 0, 0); + } } + return false; } - public static TileEntity getTileEntityFromSide(int side, World world, int x, int y, int z){ + public static boolean dropItemAtSide(ForgeDirection side, World world, int x, int y, int z, ItemStack stack){ + if(side != ForgeDirection.UNKNOWN){ + ChunkCoordinates coords = getCoordsFromSide(side, x, y, z); + if(coords != null){ + EntityItem item = new EntityItem(world, coords.posX+0.5, coords.posY+0.5, coords.posZ+0.5, stack); + item.motionX = 0; + item.motionY = 0; + item.motionZ = 0; + world.spawnEntityInWorld(item); + } + } + return false; + } + + public static TileEntity getTileEntityFromSide(ForgeDirection side, World world, int x, int y, int z){ ChunkCoordinates c = getCoordsFromSide(side, x, y, z); if(c != null){ return world.getTileEntity(c.posX, c.posY, c.posZ); } - else return null; + return null; + } + + public static ForgeDirection getDirectionByRotatingSide(int side){ + if(side == 0) return ForgeDirection.UP; + if(side == 1) return ForgeDirection.DOWN; + if(side == 2) return ForgeDirection.NORTH; + if(side == 3) return ForgeDirection.EAST; + if(side == 4) return ForgeDirection.SOUTH; + if(side == 5) return ForgeDirection.WEST; + else return ForgeDirection.UNKNOWN; } } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 424f8fee3..9c5c10455 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -19,8 +19,10 @@ tile.actuallyadditions.blockItemRepairer.name=Item Repairer tile.actuallyadditions.blockMiscWoodCasing.name=Wood Casing tile.actuallyadditions.blockMiscStoneCasing.name=Stone Casing tile.actuallyadditions.blockGreenhouseGlass.name=Greenhouse Glass -tile.actuallyadditions.blockBreaker.name=Breaker -tile.actuallyadditions.blockPlacer.name=Placer + +tile.actuallyadditions.blockBreaker.name=Auto-Breaker +tile.actuallyadditions.blockPlacer.name=Auto-Placer +tile.actuallyadditions.blockDropper.name=Automatic Precision Dropper tile.actuallyadditions.blockInputter.name=ESD tile.actuallyadditions.blockInputterAdvanced.name=Advanced ESD @@ -88,7 +90,7 @@ item.actuallyadditions.itemFoodCarrotJuice.name=Carrot Juice item.actuallyadditions.itemFoodPumpkinStew.name=Pumpkin Stew item.actuallyadditions.itemFoodCheese.name=Cheese -item.actuallyadditions.itemUpgradeSpeed=Speed Upgrade +item.actuallyadditions.itemUpgradeSpeed.name=Speed Upgrade item.actuallyadditions.itemMiscCoil.name=Basic Coil item.actuallyadditions.itemMiscCoilAdvanced.name=Advanced Coil @@ -116,7 +118,9 @@ tooltip.actuallyadditions.shiftForInfo.desc=Press Shift for Info tooltip.actuallyadditions.hunger.desc=Fills tooltip.actuallyadditions.saturation.desc=Saturation tooltip.actuallyadditions.durability.desc=Durability -tooltip.actuallyadditions.oredictName.desc=OreDictionary Name + +tooltip.actuallyadditions.oredictName.desc=OreDictionary Entries +tooltip.actuallyadditions.noOredictNameAvail.desc=Has No OreDictionary Entries tooltip.actuallyadditions.itemJam.desc.1=A delicious Jam consisting of tooltip.actuallyadditions.itemJam.desc.2=Also gives you some Effects! @@ -127,6 +131,54 @@ tooltip.actuallyadditions.itemJamChApCi.desc=Cherry, Apple and Cinnamon tooltip.actuallyadditions.itemJamHoMeKi.desc=Honeydew Melon and Kiwi tooltip.actuallyadditions.itemJamPiCo.desc=Pineapple and Coconut +tile.actuallyadditions.blockCompactIronSingle.name=Single Compact Iron +tile.actuallyadditions.blockCompactIronDouble.name=Double Compact Iron +tile.actuallyadditions.blockCompactIronTriple.name=Triple Compact Iron +tile.actuallyadditions.blockCompactIronQuadruple.name=Quadruple Compact Iron +tile.actuallyadditions.blockCompactIronQuintuple.name=Quintuple Compact Iron +tile.actuallyadditions.blockCompactIronSextuple.name=Sextuple Compact Iron +tooltip.actuallyadditions.blockCompactIron.desc=Iron, but bunched together! + +tile.actuallyadditions.blockCompactGoldSingle.name=Single Compact Gold +tile.actuallyadditions.blockCompactGoldDouble.name=Double Compact Gold +tile.actuallyadditions.blockCompactGoldTriple.name=Triple Compact Gold +tile.actuallyadditions.blockCompactGoldQuadruple.name=Quadruple Compact Gold +tile.actuallyadditions.blockCompactGoldQuintuple.name=Quintuple Compact Gold +tile.actuallyadditions.blockCompactGoldSextuple.name=Sextuple Compact Gold +tooltip.actuallyadditions.blockCompactGold.desc=Gold, but bunched together! + +tile.actuallyadditions.blockCompactDiamondSingle.name=Single Compact Diamond +tile.actuallyadditions.blockCompactDiamondDouble.name=Double Compact Diamond +tile.actuallyadditions.blockCompactDiamondTriple.name=Triple Compact Diamond +tile.actuallyadditions.blockCompactDiamondQuadruple.name=Quadruple Compact Diamond +tile.actuallyadditions.blockCompactDiamondQuintuple.name=Quintuple Compact Diamond +tile.actuallyadditions.blockCompactDiamondSextuple.name=Sextuple Compact Diamond +tooltip.actuallyadditions.blockCompactDiamond.desc=Diamond, but bunched together! + +tile.actuallyadditions.blockCompactRedstoneSingle.name=Single Compact Redstone +tile.actuallyadditions.blockCompactRedstoneDouble.name=Double Compact Redstone +tile.actuallyadditions.blockCompactRedstoneTriple.name=Triple Compact Redstone +tile.actuallyadditions.blockCompactRedstoneQuadruple.name=Quadruple Compact Redstone +tile.actuallyadditions.blockCompactRedstoneQuintuple.name=Quintuple Compact Redstone +tile.actuallyadditions.blockCompactRedstoneSextuple.name=Sextuple Compact Redstone +tooltip.actuallyadditions.blockCompactRedstone.desc=Redstone, but bunched together! + +tile.actuallyadditions.blockCompactCoalSingle.name=Single Compact Coal +tile.actuallyadditions.blockCompactCoalDouble.name=Double Compact Coal +tile.actuallyadditions.blockCompactCoalTriple.name=Triple Compact Coal +tile.actuallyadditions.blockCompactCoalQuadruple.name=Quadruple Compact Coal +tile.actuallyadditions.blockCompactCoalQuintuple.name=Quintuple Compact Coal +tile.actuallyadditions.blockCompactCoalSextuple.name=Sextuple Compact Coal +tooltip.actuallyadditions.blockCompactCoal.desc=Coal, but bunched together! + +tile.actuallyadditions.blockCompactLapisSingle.name=Single Compact Lapis +tile.actuallyadditions.blockCompactLapisDouble.name=Double Compact Lapis +tile.actuallyadditions.blockCompactLapisTriple.name=Triple Compact Lapis +tile.actuallyadditions.blockCompactLapisQuadruple.name=Quadruple Compact Lapis +tile.actuallyadditions.blockCompactLapisQuintuple.name=Quintuple Compact Lapis +tile.actuallyadditions.blockCompactLapisSextuple.name=Sextuple Compact Lapis +tooltip.actuallyadditions.blockCompactLapis.desc=Lapis, but bunched together! + tooltip.actuallyadditions.itemUpgradeSpeed.desc.1=Speeds up Machines when placed in their Upgrade Slot tooltip.actuallyadditions.itemUpgradeSpeed.desc.2=Works in: tooltip.actuallyadditions.itemUpgradeSpeed.desc.3=-Double Furnace @@ -161,8 +213,10 @@ tooltip.actuallyadditions.blockHeatCollector.desc.1=Powers Actually Additions Ma tooltip.actuallyadditions.blockHeatCollector.desc.2=Needs a bunch of Lava around it tooltip.actuallyadditions.blockHeatCollector.desc.3=Occasionally steals the Lava. Watch out! tooltip.actuallyadditions.blockItemRepairer.desc=Repairs Tools and Armor automatically + tooltip.actuallyadditions.blockBreaker.desc=Breaks Blocks and stores them in its internal Inventory tooltip.actuallyadditions.blockPlacer.desc=Places Blocks stored in its internal Inventory +tooltip.actuallyadditions.blockDropper.desc=Drops Items automatically (Without spewing them all over the Place!) tooltip.actuallyadditions.itemMiscMashedFood.desc=Used to make Fertilizer tooltip.actuallyadditions.itemFertilizer.desc=Om nom nom. Don't eat it. Made in a Compost. @@ -277,6 +331,7 @@ container.actuallyadditions.giantChest.name=Storage Crate container.actuallyadditions.repairer.name=Repairer container.actuallyadditions.placer.name=Placer container.actuallyadditions.breaker.name=Breaker +container.actuallyadditions.dropper.name=Precision Dropper container.actuallyadditions.crafting.name=Crafting Table On A Stick container.actuallyadditions.nei.crushing.name=Crusher @@ -288,6 +343,7 @@ gui.actuallyadditions.waila.compostConverting.name=Converting... info.actuallyadditions.update.generic.desc=[{"text":"There is an "},{"text":"Update ","bold":"true"},{"text":"for ","bold":"false"},{"text":"Actually Additions ","color":"dark_green","bold":"true"},{"text":"available!","color":"none","bold":"false"}] info.actuallyadditions.update.versionComp.desc=[{"text":"You have Version "},{"text":"%s","color":"dark_red","italic":"false"},{"text":", the newest one is ","color":"none","italic":"false"},{"text":"%s","color":"dark_green","underlined":"false"},{"text":"!","color":"none","underlined":"false"}] info.actuallyadditions.update.download.desc=[{"text":"Download the newest Version "},{"text":"here! (Click me!)","color":"dark_green","underlined":"true","clickEvent":{"action":"open_url","value":"%s"},"hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Click here to open your Browser and download the newest Version!"}]}}}] +info.actuallyadditions.update.failed.desc=[{"text":"The Update Check for "},{"text":"Actually Additions ","color":"dark_green","bold":"true"},{"text":"failed! Check your Internet Connection and the Logs for more Info!","color":"none"}] achievement.actuallyadditions.pickUpSolidXP=Hard and Rich and Stuff achievement.actuallyadditions.pickUpSolidXP.desc=Pick up some Solidified Experience diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockDropper.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockDropper.png new file mode 100644 index 000000000..1b700624e Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockDropper.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockDropperFront.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockDropperFront.png new file mode 100644 index 000000000..3ee2f356c Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockDropperFront.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockDropperTop.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockDropperTop.png new file mode 100644 index 000000000..819a89861 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/blocks/blockDropperTop.png differ diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 7ed413355..435c78154 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "ActuallyAdditions", "name": "Actually Additions", "description": "Actually Additions is a Mod that offers a bunch of things from Machines for Automation and tons of food to advanced Hopper Mechanisms and Effect Rings!", - "version": "0.0.4.2", + "version": "0.0.4.3", "mcversion": "1.7.10", "url": "https://github.com/Ellpeck/ActuallyAdditions", "updateUrl": "",