From ccee6533f443e38be90400e1e79f990ceba07286 Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Tue, 13 Jan 2015 05:59:51 -0500 Subject: [PATCH 01/10] Fix chisel being able to be moved when the GUI is open. Closes #128 --- .../com/cricketcraft/chisel/inventory/ContainerChisel.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java b/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java index 682d565c..3f9df4a4 100644 --- a/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java +++ b/src/main/java/com/cricketcraft/chisel/inventory/ContainerChisel.java @@ -62,7 +62,8 @@ public class ContainerChisel extends Container { @Override public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer par4EntityPlayer) { - if (par3 == 2 && par2 == currentIndex) + // we need to subtract away all the other slots + if (par1 - inventory.getSizeInventory() - 27 == currentIndex) return null; return super.slotClick(par1, par2, par3, par4EntityPlayer); From 01cd474a3f344e137da430dbe8a31d0fb849e037 Mon Sep 17 00:00:00 2001 From: warlordjones Date: Tue, 13 Jan 2015 20:59:20 +0000 Subject: [PATCH 02/10] Autochisel Upgrade Recipes, (mostly) as suggested by Neodark7 The Stacks upgrade probably needs to be made more expensive than the speed upgrade, otherwise the speed upgrade is redundant --- src/main/java/com/cricketcraft/chisel/Features.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/cricketcraft/chisel/Features.java b/src/main/java/com/cricketcraft/chisel/Features.java index b916e08a..f77a1925 100644 --- a/src/main/java/com/cricketcraft/chisel/Features.java +++ b/src/main/java/com/cricketcraft/chisel/Features.java @@ -197,6 +197,13 @@ public enum Features { ItemUpgrade upgrade = (ItemUpgrade) new ItemUpgrade("upgrade").setCreativeTab(ChiselTabs.tabChisel); GameRegistry.registerItem(upgrade, "upgrade"); } + @Override + void addRecipes() + { + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselItems.upgrade, 1, 0), new Object[]{"IEI", "EUE", "RRR", 'I', "ingotIron", 'E', Items.emerald, 'R', Items.redstone, 'U', Items.sugar})); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselItems.upgrade, 1, 1), new Object[]{"IEI", "EUE", "RRR", 'I', "ingotIron", 'E', Items.emerald, 'R', Items.redstone, 'U', Blocks.hopper})); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselItems.upgrade, 1, 2), new Object[]{"IEI", "EUE", "RRR", 'I', "ingotIron", 'E', Items.emerald, 'R', Items.redstone, 'U', Blocks.crafting_table})); + } }, BALL_OF_MOSS { From 6d1530b23e794c29d0b2d5524f020f2670edaa82 Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Tue, 13 Jan 2015 20:17:20 -0500 Subject: [PATCH 03/10] Fix top slabs (Closes #127) and rewrite slab placement code --- .../com/cricketcraft/chisel/Features.java | 17 +-- .../chisel/block/BlockCarvableSlab.java | 1 + .../chisel/item/ItemCarvableSlab.java | 72 ++++++++++++ .../chisel/item/ItemMarbleSlab.java | 108 ------------------ 4 files changed, 83 insertions(+), 115 deletions(-) create mode 100644 src/main/java/com/cricketcraft/chisel/item/ItemCarvableSlab.java delete mode 100644 src/main/java/com/cricketcraft/chisel/item/ItemMarbleSlab.java diff --git a/src/main/java/com/cricketcraft/chisel/Features.java b/src/main/java/com/cricketcraft/chisel/Features.java index b916e08a..ff8df7c1 100644 --- a/src/main/java/com/cricketcraft/chisel/Features.java +++ b/src/main/java/com/cricketcraft/chisel/Features.java @@ -63,8 +63,8 @@ import com.cricketcraft.chisel.init.ChiselItems; import com.cricketcraft.chisel.init.ChiselTabs; import com.cricketcraft.chisel.item.ItemBallOMoss; import com.cricketcraft.chisel.item.ItemCarvable; +import com.cricketcraft.chisel.item.ItemCarvableSlab; import com.cricketcraft.chisel.item.ItemCloudInABottle; -import com.cricketcraft.chisel.item.ItemMarbleSlab; import com.cricketcraft.chisel.item.ItemSmashingRock; import com.cricketcraft.chisel.item.ItemUpgrade; import com.cricketcraft.chisel.item.chisel.ItemChisel; @@ -1279,7 +1279,7 @@ public enum Features { OreDictionary.registerOre("limestone", limestone); Carving.chisel.registerOre("limestone", "limestone"); - BlockCarvable limestone_slab = (BlockCarvableSlab) new BlockCarvableSlab(limestone).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F); + BlockCarvableSlab limestone_slab = (BlockCarvableSlab) new BlockCarvableSlab(limestone).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F); limestone_slab.carverHelper.setChiselBlockName("Limestone Slab"); limestone_slab.carverHelper.addVariation("tile.limestoneSlab.0.desc", 0, "limestone"); limestone_slab.carverHelper.addVariation("tile.limestoneSlab.1.desc", 1, "limestone/terrain-cobbsmalltilelight"); @@ -1297,7 +1297,8 @@ public enum Features { limestone_slab.carverHelper.addVariation("tile.limestoneSlab.13.desc", 13, "limestone/terrain-pistonback-lightfour"); limestone_slab.carverHelper.addVariation("tile.limestoneSlab.14.desc", 14, "limestone/terrain-pistonback-lightmarker"); limestone_slab.carverHelper.addVariation("tile.limestoneSlab.15.desc", 15, "limestone/terrain-pistonback-lightpanel"); - limestone_slab.carverHelper.register(limestone_slab, "limestone_slab", ItemMarbleSlab.class); + limestone_slab.carverHelper.register(limestone_slab, "limestone_slab", ItemCarvableSlab.class); + GameRegistry.registerBlock(limestone_slab.top, Block.blockRegistry.getNameForObject(limestone_slab) + "_top"); Carving.chisel.registerOre("limestone_slab", "limestone_slab"); BlockMarbleStairsMaker makerLimestoneStairs = new BlockMarbleStairsMaker(limestone); @@ -1356,7 +1357,7 @@ public enum Features { OreDictionary.registerOre("blockMarble", marble); Carving.chisel.registerOre("marble", "marble"); - BlockCarvable marble_slab = (BlockCarvableSlab) new BlockCarvableSlab(marble).setHardness(2.0F).setResistance(10F); + BlockCarvableSlab marble_slab = (BlockCarvableSlab) new BlockCarvableSlab(marble).setHardness(2.0F).setResistance(10F); marble_slab.carverHelper.setChiselBlockName("Marble Slab"); marble_slab.carverHelper.addVariation("tile.marbleSlab.0.desc", 0, "marble"); marble_slab.carverHelper.addVariation("tile.marbleSlab.1.desc", 1, "marbleslab/a1-stoneornamental-marblebrick"); @@ -1374,7 +1375,8 @@ public enum Features { marble_slab.carverHelper.addVariation("tile.marbleSlab.13.desc", 13, "marbleslab/marble-arranged-bricks"); marble_slab.carverHelper.addVariation("tile.marbleSlab.14.desc", 14, "marbleslab/marble-fancy-bricks"); marble_slab.carverHelper.addVariation("tile.marbleSlab.15.desc", 15, "marbleslab/marble-blocks"); - marble_slab.carverHelper.register(marble_slab, "marble_slab", ItemMarbleSlab.class); + marble_slab.carverHelper.register(marble_slab, "marble_slab", ItemCarvableSlab.class); + GameRegistry.registerBlock(marble_slab.top, Block.blockRegistry.getNameForObject(marble_slab) + "_top"); Carving.chisel.registerOre("marble_slab", "marble_slab"); BlockMarbleStairsMaker makerMarbleStairs = new BlockMarbleStairsMaker(marble); @@ -1455,7 +1457,7 @@ public enum Features { marble_pillar.carverHelper.register(marble_pillar, "marble_pillar"); Carving.chisel.setGroupClass("marble_pillar", "marble"); - BlockCarvable marble_pillar_slab = (BlockCarvableSlab) new BlockCarvableSlab(marble_pillar).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F) + BlockCarvableSlab marble_pillar_slab = (BlockCarvableSlab) new BlockCarvableSlab(marble_pillar).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(2.0F).setResistance(10F) .setStepSound(Block.soundTypeStone); marble_pillar_slab.carverHelper.setChiselBlockName("Marble Pillar Slab"); if (Configurations.oldPillars) { @@ -1493,7 +1495,8 @@ public enum Features { marble_pillar_slab.carverHelper.addVariation("tile.marblePillarSlab.14.desc", 14, "marblepillarslab/carved"); marble_pillar_slab.carverHelper.addVariation("tile.marblePillarSlab.15.desc", 15, "marblepillarslab/ornamental"); } - marble_pillar_slab.carverHelper.register(marble_pillar_slab, "marble_pillar_slab", ItemMarbleSlab.class); + marble_pillar_slab.carverHelper.register(marble_pillar_slab, "marble_pillar_slab", ItemCarvableSlab.class); + GameRegistry.registerBlock(marble_pillar_slab.top, Block.blockRegistry.getNameForObject(marble_pillar_slab) + "_top"); } @Override diff --git a/src/main/java/com/cricketcraft/chisel/block/BlockCarvableSlab.java b/src/main/java/com/cricketcraft/chisel/block/BlockCarvableSlab.java index 34dc90df..23d4afcc 100644 --- a/src/main/java/com/cricketcraft/chisel/block/BlockCarvableSlab.java +++ b/src/main/java/com/cricketcraft/chisel/block/BlockCarvableSlab.java @@ -13,6 +13,7 @@ import net.minecraft.util.IIcon; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/cricketcraft/chisel/item/ItemCarvableSlab.java b/src/main/java/com/cricketcraft/chisel/item/ItemCarvableSlab.java new file mode 100644 index 00000000..a7e02f45 --- /dev/null +++ b/src/main/java/com/cricketcraft/chisel/item/ItemCarvableSlab.java @@ -0,0 +1,72 @@ +package com.cricketcraft.chisel.item; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.cricketcraft.chisel.block.BlockCarvableSlab; + +public class ItemCarvableSlab extends ItemCarvable { + + public ItemCarvableSlab(Block block) { + super(block); + } + + @Override + public boolean func_150936_a(World world, int x, int y, int z, int side, EntityPlayer player, ItemStack stack) { + return true; + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hx, float hy, float hz) { + BlockCarvableSlab block = (BlockCarvableSlab) Block.getBlockFromItem(this); + int meta = stack.getItemDamage(); + + ForgeDirection dir = ForgeDirection.VALID_DIRECTIONS[side]; + Block clicked = world.getBlock(x, y, z); + + // the position of the block that we are attempting to place at + int x2 = x + dir.offsetX; + int y2 = y + dir.offsetY; + int z2 = z + dir.offsetZ; + + Block at = world.getBlock(x2, y2, z2); + + boolean metaEquals = world.getBlockMetadata(x2, y2, z2) == meta; + // if the metadata at the place target matches, and the block there matches either the top of bottom slab, try to fill in the rest of the block + if (metaEquals && ((at == block.top && (dir == ForgeDirection.DOWN || hy == 1.0D)) || (at == block.bottom && (dir == ForgeDirection.UP || hy == 0)))) { + place(stack, world, x2, y2, z2, block.master, meta); + return true; + } + + // else if the block clicked on is a top or bottom slab of this type, try to fill in that block if possible + boolean clickedMetaEquals = world.getBlockMetadata(x, y, z) == meta; + if (clickedMetaEquals && ((clicked == block.bottom && dir == ForgeDirection.UP) || (clicked == block.top && dir == ForgeDirection.DOWN))) { + place(stack, world, x, y, z, block.master, meta); + return true; + } + + // finally just try to place a normal slab + if (metaEquals || at.isReplaceable(world, x, y, z)) { + boolean top = hy > 0.5D && dir != ForgeDirection.UP || dir == ForgeDirection.DOWN; + Block toPlace = top ? block.top : block.bottom; + // if we can replace the clicked block do so + if (clicked.isReplaceable(world, x, y, z)) { + place(stack, world, x, y, z, toPlace, meta); + } else { + place(stack, world, x2, y2, z2, toPlace, meta); + } + return true; + } + return false; + } + + private void place(ItemStack stack, World world, int x, int y, int z, Block toPlace, int metadata) { + world.setBlock(x, y, z, toPlace, metadata, 2); + stack.stackSize -= 1; + world.playSoundEffect(x + 0.5f, y + 0.5f, z + 0.5f, this.field_150939_a.stepSound.func_150496_b(), (this.field_150939_a.stepSound.getVolume() + 1.0F) / 2.0F, + this.field_150939_a.stepSound.getPitch() * 0.8F); + } +} diff --git a/src/main/java/com/cricketcraft/chisel/item/ItemMarbleSlab.java b/src/main/java/com/cricketcraft/chisel/item/ItemMarbleSlab.java deleted file mode 100644 index 884e364c..00000000 --- a/src/main/java/com/cricketcraft/chisel/item/ItemMarbleSlab.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.cricketcraft.chisel.item; - -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import com.cricketcraft.chisel.block.BlockCarvableSlab; - -public class ItemMarbleSlab extends ItemCarvable { - - public ItemMarbleSlab(Block block) { - super(block); - } - - @Override - public boolean func_150936_a(World world, int x, int y, int z, int side, EntityPlayer player, ItemStack stack) { - BlockCarvableSlab block = (BlockCarvableSlab) Block.getBlockFromItem(this); - - switch (side) { - case 0: - --y; - break; - case 1: - ++y; - break; - case 2: - --z; - break; - case 3: - ++z; - break; - case 4: - --x; - break; - case 5: - ++x; - break; - } - - Block targetBlock = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - return (targetBlock.equals(block) || targetBlock.equals(block.top)) && meta == stack.getItemDamage() || world.canPlaceEntityOnSide(block, x, y, z, false, side, (Entity) null, stack); - - } - - @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hx, float hy, float hz) { - BlockCarvableSlab block = (BlockCarvableSlab) Block.getBlockFromItem(this); - - Block targetBlock = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - boolean metaMatches = meta == stack.getItemDamage(); - - if (metaMatches && side == 0 && targetBlock.equals(block.top)) { - world.setBlock(x, y, z, block.master, meta, 2); - stack.stackSize -= 1; - return true; - } else if (metaMatches && side == 1 && targetBlock.equals(block.bottom)) { - world.setBlock(x, y, z, block.master, meta, 2); - stack.stackSize -= 1; - return true; - } - - boolean result = super.onItemUse(stack, player, world, x, y, z, side, hz, hy, hz); - - switch (side) { - case 0: - --y; - break; - case 1: - ++y; - break; - case 2: - --z; - break; - case 3: - ++z; - break; - case 4: - --x; - break; - case 5: - ++x; - break; - } - - targetBlock = world.getBlock(x, y, z); - meta = world.getBlockMetadata(x, y, z); - - if (!result && (targetBlock.equals(block.top) || targetBlock.equals(block.bottom)) && meta == stack.getItemDamage()) { - world.setBlock(x, y, z, block.master, meta, 2); - return true; - } - - if (!result) - return false; - - if (side != 0 && (side == 1 || hy <= 0.5D)) - return true; - - // TODO allow top slabs - // world.setBlock(x, y, z, block.top, meta, 2); - return true; - } -} From ae713adcd8a1d2ba93d875fbf840d97ffbc218bf Mon Sep 17 00:00:00 2001 From: Drullkus Date: Tue, 13 Jan 2015 17:34:59 -0800 Subject: [PATCH 04/10] Update horribly outdated mods in Gradle.properties --- gradle.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index e4c88c93..c44b0c99 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,9 +3,9 @@ minecraft_version=1.7.10 forge_version=10.13.2.1277 waila_version=1.5.3 -ccl_version=1.1.1.95 -ccc_version=1.0.2.11 -nei_version=1.0.2.26 -fmp_version=1.1.0.297 +ccl_version=1.1.1.110 +ccc_version=1.0.4.29 +nei_version=1.0.3.74 +fmp_version=1.1.1.320 projectId='225236' \ No newline at end of file From c251f318851f463f0f7d358b6b48ef53e281bedd Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Tue, 13 Jan 2015 20:50:39 -0500 Subject: [PATCH 05/10] Fix all issues with ghost items on the autochisel render --- .../tileentity/TileEntityAutoChisel.java | 1 - .../chisel/inventory/ContainerAutoChisel.java | 25 ++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java b/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java index 02ab2c8d..11a14ec5 100644 --- a/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java +++ b/src/main/java/com/cricketcraft/chisel/block/tileentity/TileEntityAutoChisel.java @@ -272,7 +272,6 @@ public class TileEntityAutoChisel extends TileEntity implements ISidedInventory if (worldObj.isRemote && slot == BASE && stack != null) { lastBase = stack.copy(); - lastBase.stackSize++; } if (!worldObj.isRemote) { diff --git a/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java b/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java index 4b116c2a..b6cee9ae 100644 --- a/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java +++ b/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java @@ -8,15 +8,17 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import com.cricketcraft.chisel.block.tileentity.TileEntityAutoChisel; +import com.cricketcraft.chisel.network.PacketHandler; +import com.cricketcraft.chisel.network.message.MessageAutoChisel; public class ContainerAutoChisel extends Container { - public static TileEntityAutoChisel autoChisel; - public static EntityPlayer player; + public TileEntityAutoChisel autoChisel; + public EntityPlayer player; public ContainerAutoChisel(InventoryPlayer player, TileEntityAutoChisel tileEntityAutoChisel) { - ContainerAutoChisel.player = player.player; + this.player = player.player; autoChisel = tileEntityAutoChisel; addSlot(tileEntityAutoChisel, 0, 53, 15); @@ -92,6 +94,23 @@ public class ContainerAutoChisel extends Container { return itemStack; } + @Override + public ItemStack slotClick(int slotId, int p_75144_2_, int p_75144_3_, EntityPlayer player) { + if (slotId >= 0 && slotId < this.inventorySlots.size()) { + Slot slot = (Slot) this.inventorySlots.get(slotId); + ItemStack stack = slot.getStack(); + ItemStack ret = super.slotClick(slotId, p_75144_2_, p_75144_3_, player); + + if (!player.worldObj.isRemote && slot.slotNumber == TileEntityAutoChisel.BASE && !ItemStack.areItemStacksEqual(stack, slot.getStack())) { + int chiseled = stack == null ? 0 : slot.getStack() == null ? stack.stackSize : stack.stackSize - slot.getStack().stackSize; + PacketHandler.INSTANCE.sendToDimension(new MessageAutoChisel(autoChisel, chiseled, false), player.worldObj.provider.dimensionId); + } + + return ret; + } + return super.slotClick(slotId, p_75144_2_, p_75144_3_, player); + } + /** * Added validation of slot input * From 938b79ae468deaca54fd920f96cac6d115f8d9ae Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Tue, 13 Jan 2015 20:51:54 -0500 Subject: [PATCH 06/10] Fix #140 sand has incorrect sound --- .../java/com/cricketcraft/chisel/Features.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/cricketcraft/chisel/Features.java b/src/main/java/com/cricketcraft/chisel/Features.java index 8bc8d7fd..b8dd83ef 100644 --- a/src/main/java/com/cricketcraft/chisel/Features.java +++ b/src/main/java/com/cricketcraft/chisel/Features.java @@ -197,12 +197,15 @@ public enum Features { ItemUpgrade upgrade = (ItemUpgrade) new ItemUpgrade("upgrade").setCreativeTab(ChiselTabs.tabChisel); GameRegistry.registerItem(upgrade, "upgrade"); } + @Override - void addRecipes() - { - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselItems.upgrade, 1, 0), new Object[]{"IEI", "EUE", "RRR", 'I', "ingotIron", 'E', Items.emerald, 'R', Items.redstone, 'U', Items.sugar})); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselItems.upgrade, 1, 1), new Object[]{"IEI", "EUE", "RRR", 'I', "ingotIron", 'E', Items.emerald, 'R', Items.redstone, 'U', Blocks.hopper})); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselItems.upgrade, 1, 2), new Object[]{"IEI", "EUE", "RRR", 'I', "ingotIron", 'E', Items.emerald, 'R', Items.redstone, 'U', Blocks.crafting_table})); + void addRecipes() { + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselItems.upgrade, 1, 0), new Object[] { "IEI", "EUE", "RRR", 'I', "ingotIron", 'E', Items.emerald, 'R', Items.redstone, 'U', + Items.sugar })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselItems.upgrade, 1, 1), new Object[] { "IEI", "EUE", "RRR", 'I', "ingotIron", 'E', Items.emerald, 'R', Items.redstone, 'U', + Blocks.hopper })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselItems.upgrade, 1, 2), new Object[] { "IEI", "EUE", "RRR", 'I', "ingotIron", 'E', Items.emerald, 'R', Items.redstone, 'U', + Blocks.crafting_table })); } }, @@ -488,7 +491,7 @@ public enum Features { @Override void addBlocks() { - BlockCarvableSand colored_sand = (BlockCarvableSand) new BlockCarvableSand().setCreativeTab(ChiselTabs.tabOtherChiselBlocks); + BlockCarvableSand colored_sand = (BlockCarvableSand) new BlockCarvableSand().setCreativeTab(ChiselTabs.tabOtherChiselBlocks).setStepSound(Block.soundTypeSand); colored_sand.carverHelper.setChiselBlockName("Colored Sand"); for (int i = 0; i < 16; i++) From c8621250f99b3dc6e1422dcf3828a30f8542b477 Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Tue, 13 Jan 2015 21:01:10 -0500 Subject: [PATCH 07/10] Hide top slabs from NEI --- .../chisel/compat/NEIChiselConfig.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/com/cricketcraft/chisel/compat/NEIChiselConfig.java diff --git a/src/main/java/com/cricketcraft/chisel/compat/NEIChiselConfig.java b/src/main/java/com/cricketcraft/chisel/compat/NEIChiselConfig.java new file mode 100644 index 00000000..cc2c0a7f --- /dev/null +++ b/src/main/java/com/cricketcraft/chisel/compat/NEIChiselConfig.java @@ -0,0 +1,29 @@ +package com.cricketcraft.chisel.compat; + +import net.minecraft.item.ItemStack; +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; + +import com.cricketcraft.chisel.Chisel; + +import cpw.mods.fml.common.registry.GameRegistry; + +public class NEIChiselConfig implements IConfigureNEI { + + @Override + public String getName() { + return "Chisel NEI Plugin"; + } + + @Override + public String getVersion() { + return Chisel.VERSION; + } + + @Override + public void loadConfig() { + API.hideItem(new ItemStack(GameRegistry.findBlock("chisel", "limestone_slab_top"))); + API.hideItem(new ItemStack(GameRegistry.findBlock("chisel", "marble_slab_top"))); + API.hideItem(new ItemStack(GameRegistry.findBlock("chisel", "marble_pillar_slab_top"))); + } +} From 80f6bbf1568b4d34e131a42fca14eecfd286415c Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Tue, 13 Jan 2015 21:37:04 -0500 Subject: [PATCH 08/10] Make all background slot images overlays, only render if slot is empty --- .../chisel/client/gui/GuiAutoChisel.java | 17 +++++++++++++++++ .../chisel/client/gui/GuiChisel.java | 8 ++++++++ .../chisel/inventory/ContainerAutoChisel.java | 2 +- .../assets/chisel/textures/autochisel-gui.png | Bin 8266 -> 1050910 bytes .../assets/chisel/textures/chisel2Gui.png | Bin 4080 -> 266140 bytes 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/cricketcraft/chisel/client/gui/GuiAutoChisel.java b/src/main/java/com/cricketcraft/chisel/client/gui/GuiAutoChisel.java index 81ecdf03..4584664e 100644 --- a/src/main/java/com/cricketcraft/chisel/client/gui/GuiAutoChisel.java +++ b/src/main/java/com/cricketcraft/chisel/client/gui/GuiAutoChisel.java @@ -2,10 +2,12 @@ package com.cricketcraft.chisel.client.gui; import java.util.List; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; @@ -59,5 +61,20 @@ public class GuiAutoChisel extends GuiContainer { int x = (width - xSize) / 2; int y = (height - ySize) / 2; this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); + + for (int i = TileEntityAutoChisel.BASE; i < TileEntityAutoChisel.CHISEL; i++) { + if (autochisel.getStackInSlot(i) == null) { + drawSlotOverlay(this, x, y, inventorySlots.getSlot(i), xSize, 0, 8); + } + } + + if (autochisel.getStackInSlot(TileEntityAutoChisel.CHISEL) == null) { + drawSlotOverlay(this, x, y, inventorySlots.getSlot(TileEntityAutoChisel.CHISEL), xSize, 24, 0); + } + } + + public static void drawSlotOverlay(GuiContainer gui, int x, int y, Slot slot, int u, int v, int padding) { + padding /= 2; + gui.drawTexturedModalRect(x + (slot.xDisplayPosition - padding), y + (slot.yDisplayPosition - padding), u, v, 18 + padding, 18 + padding); } } diff --git a/src/main/java/com/cricketcraft/chisel/client/gui/GuiChisel.java b/src/main/java/com/cricketcraft/chisel/client/gui/GuiChisel.java index 301368d9..38353a33 100644 --- a/src/main/java/com/cricketcraft/chisel/client/gui/GuiChisel.java +++ b/src/main/java/com/cricketcraft/chisel/client/gui/GuiChisel.java @@ -53,6 +53,14 @@ public class GuiChisel extends GuiContainer { GeneralClient.bind(texture); drawTexturedModalRect(i, j, 0, 0, xSize, ySize); + + int x = (width - xSize) / 2; + int y = (height - ySize) / 2; + + Slot main = (Slot) container.inventorySlots.get(InventoryChiselSelection.normalSlots); + if (main.getStack() == null) { + GuiAutoChisel.drawSlotOverlay(this, x + 14, y + 14, main, 0, ySize, 60); + } } @Override diff --git a/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java b/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java index b6cee9ae..7081e191 100644 --- a/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java +++ b/src/main/java/com/cricketcraft/chisel/inventory/ContainerAutoChisel.java @@ -22,7 +22,7 @@ public class ContainerAutoChisel extends Container { autoChisel = tileEntityAutoChisel; addSlot(tileEntityAutoChisel, 0, 53, 15); - addSlot(tileEntityAutoChisel, 1, 78, 51); + addSlot(tileEntityAutoChisel, 1, 78, 52); addSlot(tileEntityAutoChisel, 2, 103, 15); addSlot(tileEntityAutoChisel, 3, 8, 62); addSlot(tileEntityAutoChisel, 4, 151, 11); diff --git a/src/main/resources/assets/chisel/textures/autochisel-gui.png b/src/main/resources/assets/chisel/textures/autochisel-gui.png index 05503451f19f58490a556917f7a3ce1db5c6783b..9fad5cead04970b4b1ff7721b3ced438e012e918 100644 GIT binary patch literal 1050910 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 Mnz4_+`pq~0f3mB}G5`Po literal 8266 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 EA8(-GkpKVy diff --git a/src/main/resources/assets/chisel/textures/chisel2Gui.png b/src/main/resources/assets/chisel/textures/chisel2Gui.png index c581c6050ead6c6b368742350eabd45aafb0e281..ef0f58525741891d425dfaaf49870a5623ca169b 100644 GIT binary patch literal 266140 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 IdDyi71F8^Y0ssI2 literal 4080 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 Y0r4U2;*rbVUjXsZ*EZ2A({#D@KMP~;-T(jq From 93465884ab7fd474aa3593984a8305be7649bc1b Mon Sep 17 00:00:00 2001 From: Tonius Date: Wed, 14 Jan 2015 11:10:29 +0100 Subject: [PATCH 09/10] Un-hardcoded smooth stone chiseling and made it configurable --- src/main/java/com/cricketcraft/chisel/Features.java | 2 ++ src/main/java/com/cricketcraft/chisel/carving/Carving.java | 3 --- .../java/com/cricketcraft/chisel/config/Configurations.java | 2 ++ 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/cricketcraft/chisel/Features.java b/src/main/java/com/cricketcraft/chisel/Features.java index 946b1f50..8eca5f10 100644 --- a/src/main/java/com/cricketcraft/chisel/Features.java +++ b/src/main/java/com/cricketcraft/chisel/Features.java @@ -2021,6 +2021,8 @@ public enum Features { void addBlocks() { BlockCarvable stonebricksmooth = (BlockCarvable) new BlockCarvable(Material.rock).setCreativeTab(ChiselTabs.tabStoneChiselBlocks).setHardness(1.5F).setResistance(10.0F) .setStepSound(Block.soundTypeStone); + if (Configurations.allowSmoothStone) + Carving.chisel.addVariation("stonebricksmooth", Blocks.stone, 0, -1); for (int i = 0; i < 4; i++) { if (i == 1) { if (Configurations.allowMossy) diff --git a/src/main/java/com/cricketcraft/chisel/carving/Carving.java b/src/main/java/com/cricketcraft/chisel/carving/Carving.java index 1d6d7e17..1d39af2e 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/Carving.java +++ b/src/main/java/com/cricketcraft/chisel/carving/Carving.java @@ -100,9 +100,6 @@ public class Carving { } public CarvingGroup getGroup(Block block, int metadata) { - if (block.equals(Blocks.stone)) - block = Blocks.stonebrick; - // Check name first CarvingGroup res; int i = OreDictionary.getOreID(block.getUnlocalizedName()); diff --git a/src/main/java/com/cricketcraft/chisel/config/Configurations.java b/src/main/java/com/cricketcraft/chisel/config/Configurations.java index 06b9d95a..dfb63382 100644 --- a/src/main/java/com/cricketcraft/chisel/config/Configurations.java +++ b/src/main/java/com/cricketcraft/chisel/config/Configurations.java @@ -18,6 +18,7 @@ public class Configurations { public static boolean ghostCloud; public static int factoryBlockAmount; public static boolean allowMossy; + public static boolean allowSmoothStone; public static boolean chiselRecipe; public static boolean enableFMP; public static boolean chiselStoneToCobbleBricks; @@ -54,6 +55,7 @@ public class Configurations { ghostCloud = config.get(category, "doesCloudRenderLikeGhost", true).getBoolean(true); factoryBlockAmount = config.get(category, "amountYouGetFromFactoryBlockCrafting", 32).getInt(32); allowMossy = config.get(category, "allowCobbleToMossyInChisel", true).getBoolean(true); + allowSmoothStone = config.get(category, "allowSmoothStoneToStoneBricksAndBack", true).getBoolean(true); chiselRecipe = config.get(category, "chiselAlternateRecipe", false, "Use alternative crafting recipe for the chisel").getBoolean(false); enableFMP = config.get(category, "enableFMP", true, "Do you want to enable FMP").getBoolean(true); chiselStoneToCobbleBricks = config.get(category, "chiselStoneToCobbleBricks", true, "Chisel stone to cobblestone and bricks by left clicking.").getBoolean(false); From bd9ee178139fed569459ed879951fad5d10fc05f Mon Sep 17 00:00:00 2001 From: Tonius Date: Wed, 14 Jan 2015 11:31:12 +0100 Subject: [PATCH 10/10] Fixed up NEI handler --- .../cricketcraft/chisel/carving/Carving.java | 14 +- .../chisel/carving/CarvingGroup.java | 13 +- .../chisel/carving/CarvingVariation.java | 6 + .../chisel/compat/nei/NEIChiselConfig.java | 27 +++ .../compat/nei/RecipeHandlerChisel.java | 211 ++++++++++++------ .../assets/chisel/textures/chiselNEI.png | Bin 0 -> 1882 bytes 6 files changed, 199 insertions(+), 72 deletions(-) create mode 100644 src/main/java/com/cricketcraft/chisel/compat/nei/NEIChiselConfig.java create mode 100644 src/main/resources/assets/chisel/textures/chiselNEI.png diff --git a/src/main/java/com/cricketcraft/chisel/carving/Carving.java b/src/main/java/com/cricketcraft/chisel/carving/Carving.java index 1d39af2e..05366412 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/Carving.java +++ b/src/main/java/com/cricketcraft/chisel/carving/Carving.java @@ -1,12 +1,11 @@ package com.cricketcraft.chisel.carving; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.List; import net.minecraft.block.Block; -import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; @@ -121,7 +120,7 @@ public class Carving { return null; } - CarvingGroup getGroup(String name) { + public CarvingGroup getGroup(String name) { CarvingGroup group = carvingGroupsByName.get(name); if (group == null) { group = new CarvingGroup(name); @@ -178,7 +177,12 @@ public class Carving { return blockGroup.sound; } - public Collection getGroups() { - return carvingGroupsByVariation.values(); + public List getSortedGroupNames() { + List names = new ArrayList(); + for (String s : carvingGroupsByName.keySet()) { + names.add(s); + } + Collections.sort(names); + return names; } } diff --git a/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java b/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java index 73e4c10d..09c40808 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java +++ b/src/main/java/com/cricketcraft/chisel/carving/CarvingGroup.java @@ -17,8 +17,17 @@ public class CarvingGroup { String oreName; List variations = new ArrayList(); - + public List getVariations() { return ImmutableList.copyOf(variations); } -} \ No newline at end of file + + public String getName() { + return name; + } + + public String getOreName() { + return oreName; + } + +} diff --git a/src/main/java/com/cricketcraft/chisel/carving/CarvingVariation.java b/src/main/java/com/cricketcraft/chisel/carving/CarvingVariation.java index 20fa16ca..99da0f9e 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/CarvingVariation.java +++ b/src/main/java/com/cricketcraft/chisel/carving/CarvingVariation.java @@ -1,6 +1,7 @@ package com.cricketcraft.chisel.carving; import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; public class CarvingVariation implements Comparable { @@ -20,4 +21,9 @@ public class CarvingVariation implements Comparable { public Block block; public int meta; public int damage; + + public ItemStack getStack() { + return new ItemStack(block, 1, damage); + } + } diff --git a/src/main/java/com/cricketcraft/chisel/compat/nei/NEIChiselConfig.java b/src/main/java/com/cricketcraft/chisel/compat/nei/NEIChiselConfig.java new file mode 100644 index 00000000..4e1a85fc --- /dev/null +++ b/src/main/java/com/cricketcraft/chisel/compat/nei/NEIChiselConfig.java @@ -0,0 +1,27 @@ +package com.cricketcraft.chisel.compat.nei; + +import com.cricketcraft.chisel.Chisel; + +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; + +public class NEIChiselConfig implements IConfigureNEI { + + @Override + public String getName() { + return Chisel.MOD_NAME; + } + + @Override + public String getVersion() { + return Chisel.VERSION; + } + + @Override + public void loadConfig() { + RecipeHandlerChisel handler = new RecipeHandlerChisel(); + API.registerRecipeHandler(handler); + API.registerUsageHandler(handler); + } + +} diff --git a/src/main/java/com/cricketcraft/chisel/compat/nei/RecipeHandlerChisel.java b/src/main/java/com/cricketcraft/chisel/compat/nei/RecipeHandlerChisel.java index 272a09dc..1fb59e3e 100644 --- a/src/main/java/com/cricketcraft/chisel/compat/nei/RecipeHandlerChisel.java +++ b/src/main/java/com/cricketcraft/chisel/compat/nei/RecipeHandlerChisel.java @@ -1,105 +1,186 @@ package com.cricketcraft.chisel.compat.nei; +import java.awt.Point; import java.awt.Rectangle; +import java.util.ArrayList; import java.util.List; -import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; import org.lwjgl.opengl.GL11; import codechicken.lib.gui.GuiDraw; +import codechicken.nei.NEIServerUtils; import codechicken.nei.PositionedStack; import codechicken.nei.recipe.TemplateRecipeHandler; import com.cricketcraft.chisel.carving.Carving; import com.cricketcraft.chisel.carving.CarvingGroup; import com.cricketcraft.chisel.carving.CarvingVariation; -import com.cricketcraft.chisel.client.gui.GuiChisel; -import com.google.common.collect.Lists; public class RecipeHandlerChisel extends TemplateRecipeHandler { + private static final int SLOTS_PER_PAGE = 45; + + public class CachedChiselRecipe extends CachedRecipe { + + private List input = new ArrayList(); + private List outputs = new ArrayList(); + public Point focus; + + public CachedChiselRecipe(List variations, ItemStack base, ItemStack focus) { + PositionedStack pStack = new PositionedStack(base != null ? base : variations, 74, 4); + pStack.setMaxSize(1); + this.input.add(pStack); + + int row = 0; + int col = 0; + for (ItemStack v : variations) { + this.outputs.add(new PositionedStack(v, 3 + 18 * col, 37 + 18 * row)); + + if (focus != null && NEIServerUtils.areStacksSameTypeCrafting(focus, v)) { + this.focus = new Point(2 + 18 * col, 36 + 18 * row); + } + + col++; + if (col > 8) { + col = 0; + row++; + } + } + } + + public CachedChiselRecipe(List variations) { + this(variations, null, null); + } + + @Override + public List getIngredients() { + return this.getCycledIngredients(cycleticks / 20, this.input); + } + + @Override + public List getOtherStacks() { + return this.outputs; + } + + @Override + public PositionedStack getResult() { + return null; + } + + } + @Override public String getRecipeName() { - return "Chiseling"; + return "Chisel"; } @Override public String getGuiTexture() { - return "Chisel:textures/chisel2Gui.png"; - } - - public PositionedStack getResult() { - return null; - } - - @Override - public Class getGuiClass() { - return GuiChisel.class; - } - - @Override - public String getOverlayIdentifier() { - return "EnderIOSagMill"; - } - - @Override - public void loadTransferRects() { - transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(149, 32, 16, 16), "ChiselRecipes", new Object[0])); - } - - public void loadCraftingRecipes(String outputId, Object... results) { - // is this right? idk - for (CarvingGroup g : Carving.chisel.getGroups()) { - arecipes.add(new CachedChiselRecipe(g)); - } - } - - @Override - public void loadCraftingRecipes(final ItemStack result) { - // unfinished - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - // unfinished + return "Chisel:textures/chiselNEI.png"; } @Override public void drawBackground(int recipeIndex) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(0, 0, 0, 0, 166, 65); + GuiDraw.drawTexturedModalRect(0, 0, 0, 0, 166, 130); + + Point focus = ((CachedChiselRecipe) this.arecipes.get(recipeIndex)).focus; + if (focus != null) { + GuiDraw.drawTexturedModalRect(focus.x, focus.y, 166, 0, 18, 18); + } } - public class CachedChiselRecipe extends TemplateRecipeHandler.CachedRecipe { + @Override + public int recipiesPerPage() { + return 1; + } - private PositionedStack input; - private List outputs; + @Override + public void loadTransferRects() { + this.transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(75, 22, 15, 13), "chisel2.chisel", new Object[0])); + } - @Override - public List getIngredients() { - return Lists.newArrayList(input); - } - - @Override - public PositionedStack getResult() { - return outputs.size() > 0 ? outputs.get(0) : null; - } - - public CachedChiselRecipe(CarvingGroup group) { - this.outputs = Lists.newArrayList(); - for (CarvingVariation v : group.getVariations()) { - if (this.input == null) { - this.input = new PositionedStack(stack(v), 10, 10); + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals("chisel2.chisel")) { + for (String name : Carving.chisel.getSortedGroupNames()) { + CarvingGroup g = Carving.chisel.getGroup(name); + if (!g.getVariations().isEmpty()) { + addCached(getVariationStacks(g)); + } + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + for (String name : Carving.chisel.getSortedGroupNames()) { + CarvingGroup g = Carving.chisel.getGroup(name); + List variations = getVariationStacks(g); + for (ItemStack stack : variations) { + if (NEIServerUtils.areStacksSameTypeCrafting(stack, result)) { + addCached(variations, null, result); } - outputs.add(new PositionedStack(stack(v), 50, 10)); } } - - private ItemStack stack(CarvingVariation v) { - return new ItemStack(v.block, 1, v.damage); + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + for (String name : Carving.chisel.getSortedGroupNames()) { + CarvingGroup g = Carving.chisel.getGroup(name); + List variations = getVariationStacks(g); + for (ItemStack stack : variations) { + if (NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)) { + addCached(variations, ingredient, null); + } + } } } -} \ No newline at end of file + + private void addCached(List variations, ItemStack base, ItemStack focus) { + if (variations.size() > SLOTS_PER_PAGE) { + List> parts = new ArrayList>(); + int size = variations.size(); + for (int i = 0; i < size; i += SLOTS_PER_PAGE) { + parts.add(new ArrayList(variations.subList(i, Math.min(size, i + SLOTS_PER_PAGE)))); + } + for (List part : parts) { + this.arecipes.add(new CachedChiselRecipe(part, base, focus)); + } + } else { + this.arecipes.add(new CachedChiselRecipe(variations, base, focus)); + } + } + + private void addCached(List variations) { + addCached(variations, null, null); + } + + private static List getVariationStacks(CarvingGroup g) { + List stacks = new ArrayList(); + for (CarvingVariation v : g.getVariations()) { + stacks.add(v.getStack()); + } + String oreName = g.getOreName(); + if (oreName != null) { + check: for (ItemStack ore : OreDictionary.getOres(oreName)) { + for (ItemStack stack : stacks) { + if (NEIServerUtils.areStacksSameTypeCrafting(stack, ore)) { + continue check; + } + } + stacks.add(ore.copy()); + } + } + return stacks; + } + +} diff --git a/src/main/resources/assets/chisel/textures/chiselNEI.png b/src/main/resources/assets/chisel/textures/chiselNEI.png new file mode 100644 index 0000000000000000000000000000000000000000..f74a713da36150b5e57860f044cc6e15b2a1c8ad GIT binary patch literal 1882 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6^OGp*#H0kf#RcJGz5ly2!zjbnGeb+B|(0{z+^v? z0YmV2c2!`6a~60+7BevL9RguSQ4OyKprAyFYeY$Kep*R+Vo@qXL1JcJiC$i6iGqoq zfu3>Cv*`g03`_?+T^vIy;@-|Wop;DVfMv47ga7+y*n}i0cQa2~F1lvjE)yyFZQGxG zO+0%0sX$GR<=r-mu7=BP{=eS4F|OG#|GRFwoKFD<<8$6{IiCd#-)h|%zufO-ib%BQ zO1NJxa-f-0z9*-ak`d%8+&dne(}nn_q1~ zZi6LbAXvoU`1hC3uPbcfUBD1F!(^4eo;Oh0mH0IdS* zV|~))k6r%_3zL|Xs= literal 0 HcmV?d00001