mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-12-22 19:39:24 +01:00
-Precision Droppers
-Bugs fixed
This commit is contained in:
parent
fb13a20feb
commit
3649bdd29c
54 changed files with 812 additions and 263 deletions
|
@ -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"
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
1.7.10-0.0.4.2
|
||||
1.7.10-0.0.4.3
|
|
@ -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;
|
||||
|
|
132
src/main/java/ellpeck/actuallyadditions/blocks/BlockDropper.java
Normal file
132
src/main/java/ellpeck/actuallyadditions/blocks/BlockDropper.java
Normal file
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<ItemStack> allDusts;
|
||||
String nameToGetFrom = "dust" + nameOfOre;
|
||||
|
||||
allDusts = OreDictionary.getOres(nameToGetFrom);
|
||||
|
||||
if(allDusts != null && allDusts.size() > 0){
|
||||
ArrayList<ItemStack> 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<ItemStack> 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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -11,6 +11,7 @@ public class InitEvents{
|
|||
Util.registerEvent(new CraftEvent());
|
||||
Util.registerEvent(new KilledEvent());
|
||||
Util.registerEvent(new PickupEvent());
|
||||
Util.registerEvent(new TooltipEvent());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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){
|
||||
|
|
|
@ -15,47 +15,71 @@ import java.util.Random;
|
|||
|
||||
public class JamVillagerTradeHandler implements VillagerRegistry.IVillageTradeHandler{
|
||||
|
||||
private ArrayList<ItemStack> villagerWants = new ArrayList<ItemStack>();
|
||||
private ArrayList<Trade> trades = new ArrayList<Trade>();
|
||||
|
||||
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<ItemStack> 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<ItemStack> wants = new ArrayList<ItemStack>();
|
||||
public final int baseStackSize;
|
||||
public final int extraStackSize;
|
||||
|
||||
public Trade(ArrayList<ItemStack> 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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...");
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()){
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<SearchCase> searchCases = new ArrayList<SearchCase>();
|
||||
public ArrayList<String> exceptions = new ArrayList<String>();
|
||||
public ArrayList<SpecialOreCase> specialOreCases = new ArrayList<SpecialOreCase>();
|
||||
|
||||
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<ItemStack> allOresOfInitialInputName = OreDictionary.getOres(inputName);
|
||||
ArrayList<ItemStack> 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<ItemStack> 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!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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)){
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<ItemStack> drops = new ArrayList<ItemStack>();
|
||||
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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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<? extends ItemBlock> 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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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){
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 524 B |
Binary file not shown.
After Width: | Height: | Size: 651 B |
Binary file not shown.
After Width: | Height: | Size: 575 B |
|
@ -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": "",
|
||||
|
|
Loading…
Reference in a new issue