diff --git a/build.gradle b/build.gradle index 7526bf9ef..f4c2ae758 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ buildscript { apply plugin: 'forge' apply plugin: 'maven' -version = "1.7.10-0.0.5.1" +version = "1.7.10-0.0.5.2" group = "ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/newestVersion.txt b/newestVersion.txt index 6b0a207ec..da8ef1323 100644 --- a/newestVersion.txt +++ b/newestVersion.txt @@ -1 +1 @@ -1.7.10-0.0.5.1 \ No newline at end of file +1.7.10-0.0.5.2 \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/PLANNED.txt b/src/main/java/ellpeck/actuallyadditions/PLANNED.txt index 8f389e4b3..06c52a7ef 100644 --- a/src/main/java/ellpeck/actuallyadditions/PLANNED.txt +++ b/src/main/java/ellpeck/actuallyadditions/PLANNED.txt @@ -75,12 +75,16 @@ -Produces Lava from Cobblestone -Has Upgrade Slots --Phantom Chest - -Is bound to Inventory on Right-Click - -Allows you to open the bound Inventory when placed down - -Range of 10, Range Upgrade adds 15 Range - -Nether Star allows direct GUI Access and adds 50 Range - -Thermopile -Needs a hot and a cold fluid - -Depending on the fluids, it generates more power \ No newline at end of file + -Depending on the fluids, it generates more power + +-More Effect Rings + -Ring of Growth: Lets Plants grow, more Reach with Tier 2 + -Ring of Thorns: Hurts Attackers when they hit you with a Projectile + -Ring of Water Walking + -Ring of Flight + -Ring of Aquadive: Fast underwater movement + -Ring of Suction: Sucks up Items in the area + -Ring of Water Absorption: Removes Water around + -Ring of Striptease (Or something like that): Attacker lose parts of their Armor \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockCompost.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockCompost.java index 2fb26fdc5..8953a197e 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockCompost.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockCompost.java @@ -53,8 +53,6 @@ public class BlockCompost extends BlockContainerBase implements INameableItem{ else if(tile.slots[0] != null && (stackPlayer == null || (stackPlayer.getItem() instanceof ItemFertilizer && stackPlayer.stackSize <= stackPlayer.getMaxStackSize() - tile.slots[0].stackSize)) && tile.slots[0].getItem() instanceof ItemFertilizer){ if(stackPlayer == null) player.inventory.setInventorySlotContents(player.inventory.currentItem, tile.slots[0].copy()); else player.getCurrentEquippedItem().stackSize+=tile.slots[0].stackSize; - //TODO Add again when readding Achievements - //player.addStat(InitAchievements.achievementCraftFertilizer, 1); tile.slots[0] = null; } } diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockContainerBase.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockContainerBase.java index f7000482d..001823ba0 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockContainerBase.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockContainerBase.java @@ -4,8 +4,11 @@ import ellpeck.actuallyadditions.tile.TileEntityInventoryBase; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import java.util.Random; @@ -38,4 +41,16 @@ public abstract class BlockContainerBase extends BlockContainer{ } return tileEntity; } + + @Override + public boolean hasComparatorInputOverride(){ + return true; + } + + @Override + public int getComparatorInputOverride(World world, int x, int y, int z, int meta){ + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof IInventory) return Container.calcRedstoneFromInventory((IInventory)tile); + return 0; + } } diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockPhantomface.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockPhantomface.java index da7866f6a..f04cf625c 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockPhantomface.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockPhantomface.java @@ -2,6 +2,9 @@ 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.TileEntityPhantomPlacer; import ellpeck.actuallyadditions.tile.TileEntityPhantomface; import ellpeck.actuallyadditions.util.BlockUtil; import ellpeck.actuallyadditions.util.INameableItem; @@ -23,13 +26,26 @@ import java.util.List; public class BlockPhantomface extends BlockContainerBase implements INameableItem{ - public BlockPhantomface(){ + public static final int FACE = 0; + public static final int PLACER = 1; + public static final int BREAKER = 2; + + public int type; + + public BlockPhantomface(int type){ super(Material.rock); + this.type = type; this.setHarvestLevel("pickaxe", 0); this.setHardness(1.0F); this.setStepSound(soundTypeStone); } + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int par6){ + if(this.type == PLACER || this.type == BREAKER) this.dropInventory(world, x, y, z); + super.breakBlock(world, x, y, z, block, par6); + } + @Override public String getOredictName(){ return this.getName(); @@ -38,26 +54,47 @@ public class BlockPhantomface extends BlockContainerBase implements INameableIte @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int hitSide, float hitX, float hitY, float hitZ){ if(!world.isRemote){ - TileEntityPhantomface tile = (TileEntityPhantomface)world.getTileEntity(x, y, z); + TileEntity tile = world.getTileEntity(x, y, z); if(tile != null){ - if(tile.hasBoundTile()){ - if(tile.isBoundTileInRage()){ - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedBlock.desc", tile.boundTile.xCoord, tile.boundTile.yCoord, tile.boundTile.zCoord))); - return true; + if(tile instanceof TileEntityPhantomface){ + TileEntityPhantomface phantom = (TileEntityPhantomface)tile; + if(phantom.hasBoundTile()){ + if(phantom.isBoundTileInRage()){ + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedBlock.desc", phantom.boundTile.xCoord, phantom.boundTile.yCoord, phantom.boundTile.zCoord))); + } + else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc", phantom.boundTile.xCoord, phantom.boundTile.yCoord, phantom.boundTile.zCoord))); } - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc", tile.boundTile.xCoord, tile.boundTile.yCoord, tile.boundTile.zCoord))); - return true; + else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.notConnected.desc"))); + } + + else if(tile instanceof TileEntityPhantomPlacer){ + if(player.isSneaking()){ + TileEntityPhantomPlacer phantom = (TileEntityPhantomPlacer)tile; + if(phantom.hasBoundPosition()){ + if(phantom.isBoundPositionInRange()){ + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedBlock.desc", phantom.boundPosition.posX, phantom.boundPosition.posY, phantom.boundPosition.posZ))); + } + else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc", phantom.boundPosition.posX, phantom.boundPosition.posY, phantom.boundPosition.posZ))); + } + else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.notConnected.desc"))); + } + else player.openGui(ActuallyAdditions.instance, GuiHandler.PHANTOM_PLACER_ID, world, x, y, z); } - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.notConnected.desc"))); - return true; } } - return false; + return true; } @Override public TileEntity createNewTileEntity(World world, int par2){ - return new TileEntityPhantomface(); + switch(this.type){ + case PLACER: + return new TileEntityPhantomPlacer(); + case BREAKER: + return new TileEntityPhantomPlacer.TileEntityPhantomBreaker(); + default: + return new TileEntityPhantomface(); + } } @Override @@ -73,7 +110,7 @@ public class BlockPhantomface extends BlockContainerBase implements INameableIte @Override public String getName(){ - return "blockPhantomface"; + return this.type == PLACER ? "blockPhantomPlacer" : (this.type == BREAKER ? "blockPhantomBreaker" : "blockPhantomface"); } public static class TheItemBlock extends ItemBlock{ diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java b/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java index 1835c493e..3423e75f8 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/InitBlocks.java @@ -46,6 +46,8 @@ public class InitBlocks{ public static Block blockOilGenerator; public static Block blockPhantomface; + //public static Block blockPhantomPlacer; + //public static Block blockPhantomBreaker; public static void init(){ Util.logInfo("Initializing Blocks..."); @@ -63,9 +65,15 @@ public class InitBlocks{ blockCanolaPress = new BlockCanolaPress(); BlockUtil.register(blockCanolaPress, BlockCanolaPress.TheItemBlock.class); - blockPhantomface = new BlockPhantomface(); + blockPhantomface = new BlockPhantomface(BlockPhantomface.FACE); BlockUtil.register(blockPhantomface, BlockPhantomface.TheItemBlock.class); + //blockPhantomPlacer = new BlockPhantomface(BlockPhantomface.PLACER); + //BlockUtil.register(blockPhantomPlacer, BlockPhantomface.TheItemBlock.class); + + //blockPhantomBreaker = new BlockPhantomface(BlockPhantomface.BREAKER); + //BlockUtil.register(blockPhantomBreaker, BlockPhantomface.TheItemBlock.class); + blockCoalGenerator = new BlockCoalGenerator(); BlockUtil.register(blockCoalGenerator, BlockCoalGenerator.TheItemBlock.class); diff --git a/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java b/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java index 4f5703b1c..3ef1a8d0b 100644 --- a/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java +++ b/src/main/java/ellpeck/actuallyadditions/crafting/GrinderCrafting.java @@ -3,8 +3,8 @@ package ellpeck.actuallyadditions.crafting; import ellpeck.actuallyadditions.items.InitItems; import ellpeck.actuallyadditions.items.metalists.TheDusts; import ellpeck.actuallyadditions.items.metalists.TheFoods; -import ellpeck.actuallyadditions.recipe.GrinderRecipeHandler; -import ellpeck.actuallyadditions.recipe.GrinderRecipeHandler.SearchCase; +import ellpeck.actuallyadditions.recipe.GrinderRecipeRegistry; +import ellpeck.actuallyadditions.recipe.GrinderRecipeRegistry.SearchCase; import ellpeck.actuallyadditions.recipe.GrinderRecipes; import ellpeck.actuallyadditions.util.Util; import net.minecraft.init.Blocks; @@ -13,7 +13,7 @@ import net.minecraft.item.ItemStack; public class GrinderCrafting{ - private static GrinderRecipeHandler grindRecHan = GrinderRecipeHandler.instance(); + private static GrinderRecipeRegistry grindRecReg = GrinderRecipeRegistry.instance(); private static GrinderRecipes grindRec = GrinderRecipes.instance(); public static void init(){ @@ -32,15 +32,15 @@ public class GrinderCrafting{ grindRec.registerRecipe("oreNickel", "dustNickel", "dustPlatinum", 30, 2); grindRec.registerRecipe("oreIron", "dustIron", "dustGold", 20, 2); - grindRecHan.searchCases.add(new SearchCase("oreNether", 6)); - grindRecHan.searchCases.add(new SearchCase("denseore", 8)); - grindRecHan.searchCases.add(new SearchCase("ingot", 1)); - grindRecHan.searchCases.add(new SearchCase("gem", 1)); - grindRecHan.searchCases.add(new SearchCase("ore", 2)); + grindRecReg.searchCases.add(new SearchCase("oreNether", 6)); + grindRecReg.searchCases.add(new SearchCase("denseore", 8)); + grindRecReg.searchCases.add(new SearchCase("ingot", 1)); + grindRecReg.searchCases.add(new SearchCase("gem", 1)); + grindRecReg.searchCases.add(new SearchCase("ore", 2)); - grindRecHan.exceptions.add("ingotBrick"); - grindRecHan.exceptions.add("ingotBrickNether"); + grindRecReg.exceptions.add("ingotBrick"); + grindRecReg.exceptions.add("ingotBrickNether"); - grindRecHan.registerFinally(); + grindRecReg.registerFinally(); } } diff --git a/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java b/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java index 3ce8bed67..91dd6468e 100644 --- a/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java +++ b/src/main/java/ellpeck/actuallyadditions/creative/CreativeTab.java @@ -26,9 +26,12 @@ public class CreativeTab extends CreativeTabs{ public void displayAllReleventItems(List list){ this.list = list; + this.addBlock(InitBlocks.blockPhantomface); + //this.addBlock(InitBlocks.blockPhantomPlacer); + //this.addBlock(InitBlocks.blockPhantomBreaker); this.addBlock(InitBlocks.blockInputter); this.addBlock(InitBlocks.blockInputterAdvanced); - this.addBlock(InitBlocks.blockPhantomface); + this.addBlock(InitBlocks.blockGreenhouseGlass); this.addBlock(InitBlocks.blockGrinder); this.addBlock(InitBlocks.blockGrinderDouble); diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/ContainerPhantomPlacer.java b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerPhantomPlacer.java new file mode 100644 index 000000000..613eb0628 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/ContainerPhantomPlacer.java @@ -0,0 +1,80 @@ +package ellpeck.actuallyadditions.inventory; + +import ellpeck.actuallyadditions.tile.TileEntityBase; +import ellpeck.actuallyadditions.tile.TileEntityPhantomPlacer; +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 ContainerPhantomPlacer extends Container{ + + private TileEntityPhantomPlacer placer; + + public ContainerPhantomPlacer(InventoryPlayer inventory, TileEntityBase tile){ + this.placer = (TileEntityPhantomPlacer)tile; + + for (int i = 0; i < 3; i++){ + for (int j = 0; j < 3; j++){ + this.addSlotToContainer(new Slot(this.placer, 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.placer.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(currentStack.getItem() != null){ + if(slot <= hotbarEnd && slot >= inventoryStart){ + this.mergeItemStack(newStack, 0, 9, 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/GuiHandler.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java index bfefb5ec4..d09f57ba6 100644 --- a/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiHandler.java @@ -58,6 +58,9 @@ public class GuiHandler implements IGuiHandler{ case OIL_GENERATOR_ID: TileEntityBase tileOilGen = (TileEntityBase)world.getTileEntity(x, y, z); return new ContainerOilGenerator(entityPlayer.inventory, tileOilGen); + case PHANTOM_PLACER_ID: + TileEntityBase tilePlacer = (TileEntityBase)world.getTileEntity(x, y, z); + return new ContainerPhantomPlacer(entityPlayer.inventory, tilePlacer); default: return null; } @@ -110,6 +113,9 @@ public class GuiHandler implements IGuiHandler{ case OIL_GENERATOR_ID: TileEntityBase tileOilGen = (TileEntityBase)world.getTileEntity(x, y, z); return new GuiOilGenerator(entityPlayer.inventory, tileOilGen); + case PHANTOM_PLACER_ID: + TileEntityBase tilePlacer = (TileEntityBase)world.getTileEntity(x, y, z); + return new GuiPhantomPlacer(entityPlayer.inventory, tilePlacer); default: return null; } @@ -130,6 +136,7 @@ public class GuiHandler implements IGuiHandler{ public static final int FERMENTING_BARREL_ID = 12; public static final int COAL_GENERATOR_ID = 13; public static final int OIL_GENERATOR_ID = 14; + public static final int PHANTOM_PLACER_ID = 15; public static void init(){ Util.logInfo("Initializing GuiHandler..."); diff --git a/src/main/java/ellpeck/actuallyadditions/inventory/GuiPhantomPlacer.java b/src/main/java/ellpeck/actuallyadditions/inventory/GuiPhantomPlacer.java new file mode 100644 index 000000000..9c0a99f9e --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/inventory/GuiPhantomPlacer.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.TileEntityPhantomPlacer; +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 GuiPhantomPlacer extends GuiContainer{ + + private TileEntityPhantomPlacer placer; + + private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBreaker"); + + public GuiPhantomPlacer(InventoryPlayer inventory, TileEntityBase tile){ + super(new ContainerPhantomPlacer(inventory, tile)); + this.placer = (TileEntityPhantomPlacer)tile; + this.xSize = 176; + this.ySize = 93+86; + } + + @Override + public void drawGuiContainerForegroundLayer(int x, int y){ + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.placer.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/items/ItemPhantomConnector.java b/src/main/java/ellpeck/actuallyadditions/items/ItemPhantomConnector.java index 28165a6c2..4fbe46e4e 100644 --- a/src/main/java/ellpeck/actuallyadditions/items/ItemPhantomConnector.java +++ b/src/main/java/ellpeck/actuallyadditions/items/ItemPhantomConnector.java @@ -2,6 +2,7 @@ package ellpeck.actuallyadditions.items; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import ellpeck.actuallyadditions.tile.TileEntityPhantomPlacer; import ellpeck.actuallyadditions.tile.TileEntityPhantomface; import ellpeck.actuallyadditions.util.INameableItem; import ellpeck.actuallyadditions.util.ItemUtil; @@ -10,13 +11,13 @@ import ellpeck.actuallyadditions.util.ModUtil; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; import net.minecraft.world.World; @@ -33,34 +34,56 @@ public class ItemPhantomConnector extends Item implements INameableItem{ @Override public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int par7, float par8, float par9, float par10){ if(!world.isRemote){ + //Passing Data to Phantoms TileEntity tile = world.getTileEntity(x, y, z); - - if(tile != null && tile instanceof TileEntityPhantomface && this.getStoredConnection(stack) != null){ - TileEntity stored = this.getStoredConnection(stack); - if(stored != null && stored.getWorldObj().getTileEntity(stored.xCoord, stored.yCoord, stored.zCoord) == stored){ - ((TileEntityPhantomface)tile).boundTile = stored.getWorldObj().getTileEntity(stored.xCoord, stored.yCoord, stored.zCoord); - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.connected.desc"))); - this.clearStorage(stack); - return true; + if(tile != null){ + //Passing to Face + if(tile instanceof TileEntityPhantomface){ + if(this.checkHasConnection(stack, player)){ + ChunkCoordinates coords = this.getStoredPosition(stack); + TileEntity toStore = this.getStoredWorld(stack).getTileEntity(coords.posX, coords.posY, coords.posZ); + if(toStore != null){ + ((TileEntityPhantomface)tile).boundTile = toStore; + this.clearStorage(stack); + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connected.desc"))); + return true; + } + else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.notInventory.desc"))); + } + return false; + } + //Passing to Placer + else if(tile instanceof TileEntityPhantomPlacer){ + if(this.checkHasConnection(stack, player)){ + ((TileEntityPhantomPlacer)tile).boundPosition = this.getStoredPosition(stack); + ((TileEntityPhantomPlacer)tile).boundWorld = this.getStoredWorld(stack); + this.clearStorage(stack); + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connected.desc"))); + return true; + } + return false; } } - - if(tile != null && !(tile instanceof TileEntityPhantomface) && tile instanceof IInventory){ - this.storeConnection(stack, tile); - player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.stored.desc"))); - return true; - } - else{ - if(tile instanceof TileEntityPhantomface) player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.noBound.desc"))); - else player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.notInventory.desc"))); - } + //Storing Connections + this.storeConnection(stack, x, y, z, world); + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.stored.desc"))); + } + return true; + } + + public boolean checkHasConnection(ItemStack stack, EntityPlayer player){ + if(this.getStoredPosition(stack) != null && this.getStoredWorld(stack) != null){ + return true; + } + else{ + player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.noBound.desc"))); + return false; } - return super.onItemUse(stack, player, world, x, y, z, par7, par8, par9, par10); } @Override public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5){ - if(this.getStoredConnection(stack) == null) this.clearStorage(stack); + if(this.getStoredPosition(stack) == null || this.getStoredWorld(stack) == null) this.clearStorage(stack); } @Override @@ -69,27 +92,35 @@ public class ItemPhantomConnector extends Item implements INameableItem{ return stack; } - public TileEntity getStoredConnection(ItemStack stack){ + public ChunkCoordinates getStoredPosition(ItemStack stack){ NBTTagCompound tag = stack.getTagCompound(); if(tag != null){ int x = tag.getInteger("XCoordOfTileStored"); int y = tag.getInteger("YCoordOfTileStored"); int z = tag.getInteger("ZCoordOfTileStored"); - World world = DimensionManager.getWorld(tag.getInteger("WorldOfTileStored")); - return world.getTileEntity(x, y, z); + if(x == 0 && y == 0 && z == 0) return null; + return new ChunkCoordinates(x, y, z); } return null; } - public void storeConnection(ItemStack stack, TileEntity tile){ + public World getStoredWorld(ItemStack stack){ + NBTTagCompound tag = stack.getTagCompound(); + if(tag != null){ + return DimensionManager.getWorld(tag.getInteger("WorldOfTileStored")); + } + return null; + } + + public void storeConnection(ItemStack stack, int x, int y, int z, World world){ NBTTagCompound tag = stack.getTagCompound(); if(tag == null) tag = new NBTTagCompound(); - tag.setInteger("XCoordOfTileStored", tile.xCoord); - tag.setInteger("YCoordOfTileStored", tile.yCoord); - tag.setInteger("ZCoordOfTileStored", tile.zCoord); - tag.setInteger("WorldOfTileStored", tile.getWorldObj().provider.dimensionId); + tag.setInteger("XCoordOfTileStored", x); + tag.setInteger("YCoordOfTileStored", y); + tag.setInteger("ZCoordOfTileStored", z); + tag.setInteger("WorldOfTileStored", world.provider.dimensionId); stack.setTagCompound(tag); } @@ -108,13 +139,14 @@ public class ItemPhantomConnector extends Item implements INameableItem{ @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) { ItemUtil.addInformation(this, list, 2, ""); - TileEntity tile = this.getStoredConnection(stack); - if(tile != null){ + ChunkCoordinates coords = this.getStoredPosition(stack); + World world = this.getStoredWorld(stack); + if(coords != null && world != null){ list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.boundTo.desc") + ":"); - list.add("X: " + tile.xCoord); - list.add("Y: " + tile.yCoord); - list.add("Z: " + tile.zCoord); - list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.inWorld.desc") + " " + tile.getWorldObj().provider.dimensionId); + list.add("X: " + coords.posX); + list.add("Y: " + coords.posY); + list.add("Z: " + coords.posZ); + list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".phantom.inWorld.desc") + " " + world.provider.dimensionId); } } diff --git a/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipeHandler.java b/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipeRegistry.java similarity index 94% rename from src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipeHandler.java rename to src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipeRegistry.java index 801c315e1..ad3741758 100644 --- a/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipeHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipeRegistry.java @@ -8,11 +8,11 @@ import org.apache.logging.log4j.Level; import java.util.ArrayList; -public class GrinderRecipeHandler{ +public class GrinderRecipeRegistry{ - private static final GrinderRecipeHandler instance = new GrinderRecipeHandler(); + private static final GrinderRecipeRegistry instance = new GrinderRecipeRegistry(); - public static GrinderRecipeHandler instance(){ + public static GrinderRecipeRegistry instance(){ return instance; } @@ -58,7 +58,7 @@ public class GrinderRecipeHandler{ ItemStack input = theInput.copy(); ItemStack output = theDust.copy(); output.stackSize = resultAmount; - if(!GrinderRecipes.instance().hasRecipe(inputName, inputWithDustPrefix)){ + if(!GrinderRecipes.instance().hasRecipe(input, output)){ GrinderRecipes.instance().registerRecipe(input, output, null, 0); } } @@ -78,4 +78,4 @@ public class GrinderRecipeHandler{ } } } -} +} \ No newline at end of file diff --git a/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java b/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java index 28cdafd63..da55d9e4e 100644 --- a/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java +++ b/src/main/java/ellpeck/actuallyadditions/recipe/GrinderRecipes.java @@ -57,30 +57,11 @@ public class GrinderRecipes{ return null; } - public boolean hasRecipe(String input, String outputOne){ - boolean containsInput = false; - boolean containsOutput = false; - + public boolean hasRecipe(ItemStack input, ItemStack outputOne){ for(GrinderRecipe recipe : recipes){ - int[] recipeInputIDs = OreDictionary.getOreIDs(recipe.input); - for(int recipeInputID : recipeInputIDs){ - if(input.equals(OreDictionary.getOreName(recipeInputID))){ - containsInput = true; - break; - } - } - - int[] recipeOutputIDs = OreDictionary.getOreIDs(recipe.firstOutput); - for(int recipeOutputID : recipeOutputIDs){ - if(outputOne.equals(OreDictionary.getOreName(recipeOutputID))){ - containsOutput = true; - break; - } - } - - if(containsInput && containsOutput) break; + if(recipe.input.isItemEqual(input) && recipe.firstOutput.isItemEqual(outputOne)) return true; } - return containsInput && containsOutput; + return false; } public int getSecondChance(ItemStack input){ diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java index 202429ee6..dd32a2e02 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBase.java @@ -32,6 +32,8 @@ public class TileEntityBase extends TileEntity{ GameRegistry.registerTileEntity(TileEntityOilGenerator.class, ModUtil.MOD_ID_LOWER + ":tileEntityOilGenerator"); GameRegistry.registerTileEntity(TileEntityCoalGenerator.class, ModUtil.MOD_ID_LOWER + ":tileEntityCoalGenerator"); GameRegistry.registerTileEntity(TileEntityPhantomface.class, ModUtil.MOD_ID_LOWER + ":tileEntityPhantomface"); + GameRegistry.registerTileEntity(TileEntityPhantomPlacer.class, ModUtil.MOD_ID_LOWER + ":tileEntityPhantomPlacer"); + GameRegistry.registerTileEntity(TileEntityPhantomPlacer.TileEntityPhantomBreaker.class, ModUtil.MOD_ID_LOWER + ":tileEntityPhantomBreaker"); } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java index ed1893a36..d06e178b4 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityBreaker.java @@ -62,17 +62,17 @@ public class TileEntityBreaker extends TileEntityInventoryBase{ 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)){ + if(addToInventory(this.slots, drops, false)){ 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); + addToInventory(this.slots, drops, true); this.markDirty(); } } 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); + ItemStack removeFalse = removeFromInventory(this.slots, false); if(removeFalse != null && WorldUtil.placeBlockAtSide(sideToManipulate, worldObj, xCoord, yCoord, zCoord, removeFalse)){ - this.removeFromInventory(true); + removeFromInventory(this.slots, true); } } } @@ -95,15 +95,15 @@ public class TileEntityBreaker extends TileEntityInventoryBase{ this.currentTime = compound.getInteger("CurrentTime"); } - public boolean addToInventory(ArrayList stacks, boolean actuallyDo){ + public static boolean addToInventory(ItemStack[] slots, ArrayList stacks, boolean actuallyDo){ int working = 0; for(ItemStack stack : stacks){ - for(int i = 0; i < this.slots.length; i++){ - if(this.slots[i] == null || (this.slots[i].isItemEqual(stack) && this.slots[i].stackSize <= stack.getMaxStackSize()-stack.stackSize)){ + for(int i = 0; i < slots.length; i++){ + if(slots[i] == null || (slots[i].isItemEqual(stack) && slots[i].stackSize <= stack.getMaxStackSize()-stack.stackSize)){ working++; if(actuallyDo){ - if(this.slots[i] == null) this.slots[i] = stack.copy(); - else this.slots[i].stackSize += stack.stackSize; + if(slots[i] == null) slots[i] = stack.copy(); + else slots[i].stackSize += stack.stackSize; } break; } @@ -112,13 +112,13 @@ public class TileEntityBreaker extends TileEntityInventoryBase{ return working >= stacks.size(); } - 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(); + public static ItemStack removeFromInventory(ItemStack[] slots, boolean actuallyDo){ + for(int i = 0; i < slots.length; i++){ + if(slots[i] != null){ + ItemStack slot = slots[i].copy(); if(actuallyDo){ - this.slots[i].stackSize--; - if(this.slots[i].stackSize <= 0) this.slots[i] = null; + slots[i].stackSize--; + if(slots[i].stackSize <= 0) slots[i] = null; } return slot; } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java index 19255fb29..868b34ee3 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCanolaPress.java @@ -143,7 +143,7 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain){ - if(resource.getFluid() == FluidRegistry.getFluid(InitBlocks.fluidCanolaOil.getName())) return this.tank.drain(resource.amount, doDrain); + if(resource.getFluid() == InitBlocks.fluidCanolaOil) return this.tank.drain(resource.amount, doDrain); return null; } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCompost.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCompost.java index 1959426ff..6bd5ae80d 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCompost.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityCompost.java @@ -24,9 +24,12 @@ public class TileEntityCompost extends TileEntityInventoryBase{ if(!worldObj.isRemote){ if(this.slots[0] != null && this.slots[0].stackSize > 0){ - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, this.slots[0].stackSize + (this.slots[0].getItem() instanceof ItemFertilizer ? 1 : 0), 2); + int toSet = this.slots[0].stackSize + (this.slots[0].getItem() instanceof ItemFertilizer ? 1 : 0); + if(worldObj.getBlockMetadata(xCoord, yCoord, zCoord) != toSet) worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, toSet, 2); + } + else{ + if(worldObj.getBlockMetadata(xCoord, yCoord, zCoord) != 0) worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, 0, 2); } - else worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, 0, 2); boolean theFlag = this.conversionTime > 0; if(this.slots[0] != null && !(this.slots[0].getItem() instanceof ItemFertilizer) && this.slots[0].stackSize >= this.amountNeededToConvert){ diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java index cb9e2883b..901ffda4f 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityFermentingBarrel.java @@ -116,13 +116,13 @@ public class TileEntityFermentingBarrel extends TileEntityInventoryBase implemen @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill){ - if(from != ForgeDirection.DOWN && resource.getFluid() == FluidRegistry.getFluid(InitBlocks.fluidCanolaOil.getName())) return this.canolaTank.fill(resource, doFill); + if(from != ForgeDirection.DOWN && resource.getFluid() == InitBlocks.fluidCanolaOil) return this.canolaTank.fill(resource, doFill); return 0; } @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain){ - if(resource.getFluid() == FluidRegistry.getFluid(InitBlocks.fluidOil.getName())) return this.oilTank.drain(resource.amount, doDrain); + if(resource.getFluid() == InitBlocks.fluidOil) return this.oilTank.drain(resource.amount, doDrain); return null; } @@ -133,12 +133,12 @@ public class TileEntityFermentingBarrel extends TileEntityInventoryBase implemen @Override public boolean canFill(ForgeDirection from, Fluid fluid){ - return from != ForgeDirection.DOWN && fluid == FluidRegistry.getFluid(InitBlocks.fluidCanolaOil.getName()); + return from != ForgeDirection.DOWN && fluid == InitBlocks.fluidCanolaOil; } @Override public boolean canDrain(ForgeDirection from, Fluid fluid){ - return fluid == FluidRegistry.getFluid(InitBlocks.fluidOil.getName()); + return fluid == InitBlocks.fluidOil; } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOilGenerator.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOilGenerator.java index bb89e77f8..c76cc79b6 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOilGenerator.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityOilGenerator.java @@ -138,7 +138,7 @@ public class TileEntityOilGenerator extends TileEntityInventoryBase implements I @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill){ - if(resource.getFluid() == FluidRegistry.getFluid(InitBlocks.fluidOil.getName())) return this.tank.fill(resource, doFill); + if(resource.getFluid() == InitBlocks.fluidOil) return this.tank.fill(resource, doFill); return 0; } @@ -154,7 +154,7 @@ public class TileEntityOilGenerator extends TileEntityInventoryBase implements I @Override public boolean canFill(ForgeDirection from, Fluid fluid){ - return fluid == FluidRegistry.getFluid(InitBlocks.fluidOil.getName()); + return fluid == InitBlocks.fluidOil; } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomPlacer.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomPlacer.java new file mode 100644 index 000000000..c570254d8 --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomPlacer.java @@ -0,0 +1,154 @@ +package ellpeck.actuallyadditions.tile; + +import ellpeck.actuallyadditions.util.WorldUtil; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.ArrayList; + +public class TileEntityPhantomPlacer extends TileEntityInventoryBase{ + + public static class TileEntityPhantomBreaker extends TileEntityPhantomPlacer{ + + public TileEntityPhantomBreaker(){ + super(9, "phantomBreaker"); + this.isBreaker = true; + } + + } + + public ChunkCoordinates boundPosition; + public World boundWorld; + + public int currentTime; + public final int timeNeeded = 30; + + public final int range = 3; + + public boolean isBreaker; + + public TileEntityPhantomPlacer(int slots, String name){ + super(slots, name); + } + + public TileEntityPhantomPlacer(){ + super(9, "phantomPlacer"); + this.isBreaker = false; + } + + @Override + public void updateEntity(){ + if(!worldObj.isRemote){ + + if(!this.hasBoundPosition()){ + this.boundPosition = null; + this.boundWorld = null; + } + + if(this.isBoundPositionInRange()){ + if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){ + if(this.currentTime > 0){ + this.currentTime--; + if(this.currentTime <= 0){ + if(this.isBreaker){ + Block blockToBreak = boundWorld.getBlock(boundPosition.posX, boundPosition.posY, boundPosition.posZ); + if(blockToBreak != null && blockToBreak.getBlockHardness(boundWorld, boundPosition.posX, boundPosition.posY, boundPosition.posZ) > -1.0F){ + ArrayList drops = new ArrayList(); + int meta = boundWorld.getBlockMetadata(boundPosition.posX, boundPosition.posY, boundPosition.posZ); + drops.addAll(blockToBreak.getDrops(boundWorld, boundPosition.posX, boundPosition.posY, boundPosition.posZ, meta, 0)); + + if(TileEntityBreaker.addToInventory(this.slots, drops, false)){ + boundWorld.playAuxSFX(2001, boundPosition.posX, boundPosition.posY, boundPosition.posZ, Block.getIdFromBlock(blockToBreak) + (meta << 12)); + WorldUtil.breakBlockAtSide(ForgeDirection.UNKNOWN, boundWorld, boundPosition.posX, boundPosition.posY, boundPosition.posZ); + TileEntityBreaker.addToInventory(this.slots, drops, true); + this.markDirty(); + } + } + } + else{ + if(boundWorld.getBlock(boundPosition.posX, boundPosition.posY, boundPosition.posZ).isReplaceable(boundWorld, boundPosition.posX, boundPosition.posY, boundPosition.posZ)){ + ItemStack removeFalse = TileEntityBreaker.removeFromInventory(this.slots, false); + if(removeFalse != null && WorldUtil.placeBlockAtSide(ForgeDirection.UNKNOWN, boundWorld, boundPosition.posX, boundPosition.posY, boundPosition.posZ, removeFalse)){ + TileEntityBreaker.removeFromInventory(this.slots, true); + } + } + } + } + } + else this.currentTime = this.timeNeeded; + } + } + } + } + + public boolean isBoundPositionInRange(){ + if(this.hasBoundPosition()){ + int xDif = this.boundPosition.posX-this.xCoord; + int yDif = this.boundPosition.posY-this.yCoord; + int zDif = this.boundPosition.posZ-this.zCoord; + + if(xDif >= -this.range && xDif <= this.range){ + if(yDif >= -this.range && yDif <= this.range){ + if(zDif >= -this.range && zDif <= this.range) return true; + } + } + } + return false; + } + + public boolean hasBoundPosition(){ + if(this.boundPosition != null && this.boundWorld != null){ + if(this.xCoord == this.boundPosition.posX && this.yCoord == this.boundPosition.posY && this.zCoord == this.boundPosition.posZ && this.worldObj == this.boundWorld){ + this.boundPosition = null; + this.boundWorld = null; + return false; + } + return this.boundWorld == this.worldObj; + } + return false; + } + + @Override + public void writeToNBT(NBTTagCompound compound){ + super.writeToNBT(compound); + compound.setInteger("Time", currentTime); + if(this.hasBoundPosition()){ + compound.setInteger("XCoordOfTileStored", boundPosition.posX); + compound.setInteger("YCoordOfTileStored", boundPosition.posY); + compound.setInteger("ZCoordOfTileStored", boundPosition.posZ); + compound.setInteger("WorldOfTileStored", boundWorld.provider.dimensionId); + } + } + + @Override + public void readFromNBT(NBTTagCompound compound){ + super.readFromNBT(compound); + int x = compound.getInteger("XCoordOfTileStored"); + int y = compound.getInteger("YCoordOfTileStored"); + int z = compound.getInteger("ZCoordOfTileStored"); + if(x != 0 && y != 0 && z != 0){ + this.boundPosition = new ChunkCoordinates(x, y, z); + this.boundWorld = DimensionManager.getWorld(compound.getInteger("WorldOfTileStored")); + } + } + + @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 false; + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomface.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomface.java index 424ffbe5a..881170494 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomface.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityPhantomface.java @@ -22,14 +22,16 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{ @Override public void updateEntity(){ - if(!this.hasBoundTile()) this.boundTile = null; + if(!worldObj.isRemote){ + if(!this.hasBoundTile()) this.boundTile = null; - if(this.tempX > 0 || this.tempY > 0 || this.tempZ > 0){ - this.boundTile = tempWorld.getTileEntity(tempX, tempY, tempZ); - this.tempX = 0; - this.tempY = 0; - this.tempZ = 0; - this.tempWorld = null; + if(this.tempX > 0 || this.tempY > 0 || this.tempZ > 0){ + this.boundTile = tempWorld.getTileEntity(tempX, tempY, tempZ); + this.tempX = 0; + this.tempY = 0; + this.tempZ = 0; + this.tempWorld = null; + } } } @@ -49,7 +51,14 @@ public class TileEntityPhantomface extends TileEntityInventoryBase{ } public boolean hasBoundTile(){ - return this.boundTile != null && boundTile.getWorldObj().getTileEntity(boundTile.xCoord, boundTile.yCoord, boundTile.zCoord) != null && boundTile.getWorldObj() == this.getWorldObj() && boundTile instanceof IInventory; + if(this.boundTile != null){ + if(this.xCoord == this.boundTile.xCoord && this.yCoord == this.boundTile.yCoord && this.zCoord == this.boundTile.zCoord && this.worldObj == this.boundTile.getWorldObj()){ + this.boundTile = null; + return false; + } + return boundTile instanceof IInventory && boundTile.getWorldObj().getTileEntity(boundTile.xCoord, boundTile.yCoord, boundTile.zCoord) == boundTile && boundTile.getWorldObj() == this.worldObj; + } + return false; } @Override diff --git a/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java b/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java index d62825ba3..ebfdedb00 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.5.0"; + public static final String VERSION = "1.7.10-0.0.5.2"; 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 ccb40a609..c7037353f 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/WorldUtil.java @@ -10,7 +10,6 @@ import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.IFluidHandler; @@ -22,6 +21,10 @@ public class WorldUtil{ } public static void breakBlockAtSide(ForgeDirection side, World world, int x, int y, int z){ + if(side == ForgeDirection.UNKNOWN){ + world.setBlockToAir(x, y, z); + return; + } ChunkCoordinates c = getCoordsFromSide(side, x, y, z); if(c != null){ world.setBlockToAir(c.posX, c.posY, c.posZ); @@ -52,18 +55,12 @@ public class WorldUtil{ public static boolean placeBlockAtSide(ForgeDirection side, World world, int x, int y, int z, ItemStack stack){ if(world instanceof WorldServer){ - if(FluidContainerRegistry.isBucket(stack) && stack.isItemEqual(FluidContainerRegistry.EMPTY_BUCKET)){ - //if() - return false; - } if(stack.getItem() instanceof IPlantable){ if(((IPlantable)stack.getItem()).getPlant(world, x, y, z).canPlaceBlockAt(world, x+side.offsetX, y+side.offsetY, z+side.offsetZ)){ return world.setBlock(x+side.offsetX, y+side.offsetY, z+side.offsetZ, ((IPlantable)stack.getItem()).getPlant(world, x, y, z)); } } - if(side != ForgeDirection.UNKNOWN){ - return stack.tryPlaceItemIntoWorld(FakePlayerUtil.newFakePlayer(world), world,x, y, z, side.ordinal(), 0, 0, 0); - } + return stack.tryPlaceItemIntoWorld(FakePlayerUtil.newFakePlayer(world), world,x, y, z, side == ForgeDirection.UNKNOWN ? 0 : side.ordinal(), 0, 0, 0); } return false; } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index f68e00458..fc0b2af1e 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -55,6 +55,14 @@ tile.actuallyadditions.blockPhantomface.name=Phantomface tooltip.actuallyadditions.blockPhantomface.desc.1=Like a Hopper-Chain, only Wireless! Connect me with a Phantom Connector! tooltip.actuallyadditions.blockPhantomface.desc.2=Input things into me to input into connected Blocks! +tile.actuallyadditions.blockPhantomPlacer.name=Phantom Placer +tooltip.actuallyadditions.blockPhantomPlacer.desc.1=Places Blocks from a distance! Connect me with a Phantom Connector! +tooltip.actuallyadditions.blockPhantomPlacer.desc.2=Shift-Right-Click with an empty hand to see its Connections! + +tile.actuallyadditions.blockPhantomBreaker.name=Phantom Breaker +tooltip.actuallyadditions.blockPhantomBreaker.desc.1=Breaks Blocks from a distance! Connect me with a Phantom Connector! +tooltip.actuallyadditions.blockPhantomBreaker.desc.2=Shift-Right-Click with an empty hand to see its Connections! + item.actuallyadditions.itemPhantomConnector.name=Phantom Connector tooltip.actuallyadditions.itemPhantomConnector.desc.1=Connects a Phantom Face to any Inventory Block! tooltip.actuallyadditions.itemPhantomConnector.desc.2=Hold ALT to clear the stored TileEntity @@ -108,15 +116,15 @@ tile.actuallyadditions.blockInputter.add.13.name=Efficient Sucking Dilettant tile.actuallyadditions.blockInputter.add.14.name=Extreme Sand Digger tile.actuallyadditions.blockInputter.add.15.name=MISSINGNO -tooltip.actuallyadditions.phantom.connected.desc= -tooltip.actuallyadditions.phantom.stored.desc= +tooltip.actuallyadditions.phantom.connected.desc= +tooltip.actuallyadditions.phantom.stored.desc= tooltip.actuallyadditions.phantom.noBound.desc=The Connector has no Information stored! -tooltip.actuallyadditions.phantom.notInventory.desc=This Block is not an Inventory! +tooltip.actuallyadditions.phantom.notInventory.desc=The stored Block is not an Inventory! tooltip.actuallyadditions.phantom.inWorld.desc=In World tooltip.actuallyadditions.phantom.boundTo.desc=Bound to -tooltip.actuallyadditions.phantom.connectedBlock.desc=Connected to TileEntity at %s, %s, %s -tooltip.actuallyadditions.phantom.connectedNoRange.desc=Connected to TileEntity at %s, %s, %s but it is not in Range! -tooltip.actuallyadditions.phantom.notConnected.desc=This Phantomface isn't connected to anything! +tooltip.actuallyadditions.phantom.connectedBlock.desc=Connected to Block at %s, %s, %s +tooltip.actuallyadditions.phantom.connectedNoRange.desc=Connected to Block at %s, %s, %s but it is not in Range! +tooltip.actuallyadditions.phantom.notConnected.desc=This isn't connected to anything! item.actuallyadditions.itemMiscMashedFood.name=Mashed Food item.actuallyadditions.itemFertilizer.name=Fertilizer @@ -372,6 +380,10 @@ container.actuallyadditions.canolaPress.name=Canola Press container.actuallyadditions.fermentingBarrel.name=Fermenting Barrel container.actuallyadditions.coalGenerator.name=Coal Generator container.actuallyadditions.oilGenerator.name=Oil Generator +container.actuallyadditions.phantomPlacer.name=Phantom Placer +container.actuallyadditions.phantomBreaker.name=Phantom Breaker +container.actuallyadditions.phantomface.name=Phantomface + container.actuallyadditions.nei.crushing.name=Crusher container.actuallyadditions.nei.ballOfHair.name=Ball Of Hair Usage diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index e76c2ffcc..87263fb92 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.5.1", + "version": "0.0.5.2", "mcversion": "1.7.10", "url": "https://github.com/Ellpeck/ActuallyAdditions", "updateUrl": "",