From f7c27289b74b36a88e747853e564e9df06fb9e41 Mon Sep 17 00:00:00 2001 From: Mohammad-Ali Minaie Date: Sun, 16 Dec 2018 17:15:16 -0500 Subject: [PATCH] update feature branch --- kfc/To-Dos.md | 13 ++++- .../blocks/CustomContainerFacingActive.java | 3 ++ .../forgecraft/blocks/machine/MachineSaw.java | 34 +++++++++++++ .../blocks/machine/RedstoneEngine.java | 34 +++++++++++++ .../crafting/registery/RecipesMachineSaw.java | 48 +++++++++++++----- .../forgecraft/tiles/TileNBTCrucible.java | 6 +++ .../item/redstone_engine_combined.cubik | Bin 0 -> 4703 bytes .../models/item/redstoneengine.json | 10 ++++ 8 files changed, 132 insertions(+), 16 deletions(-) create mode 100644 kfc/src/main/resources/assets/forgecraft/models/item/redstone_engine_combined.cubik create mode 100644 kfc/src/main/resources/assets/forgecraft/models/item/redstoneengine.json diff --git a/kfc/To-Dos.md b/kfc/To-Dos.md index 4489a846..c98ef156 100644 --- a/kfc/To-Dos.md +++ b/kfc/To-Dos.md @@ -10,8 +10,15 @@ - [ ] Grinding wheel rotate ## Current Feature -- [ ] Recipe Handler for saw -- [ ] Sound for block break +- [x] Test Redstone Engine drops +- [x] Figure out tile update for crucible after cooking. +- [ ] Item Render for engine +- [ ] Item Render for Saw Block +- [ ] Machine Chassis Recipe +- [ ] Redstone Engine Recipe +- [ ] Gear recipes +- [ ] Gearbox recipe +- [ ] Saw Recipe ## Feature Optimizations - [ ] Untick Bloomery and Forge @@ -56,6 +63,8 @@ rename s/iron/steel/ iron* ``` ### Completed +- [x] Recipe Handler for saw +- [x] Sound for block break - [x] Redstone Engine Model - [x] Engine Refactor - [x] Slots for Engines diff --git a/kfc/src/main/java/nmd/primal/forgecraft/blocks/CustomContainerFacingActive.java b/kfc/src/main/java/nmd/primal/forgecraft/blocks/CustomContainerFacingActive.java index 09b5e8a1..1b8f2fb5 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/blocks/CustomContainerFacingActive.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/blocks/CustomContainerFacingActive.java @@ -8,6 +8,7 @@ import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -16,7 +17,9 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import nmd.primal.core.api.PrimalAPI; +import nmd.primal.core.common.helper.PlayerHelper; import nmd.primal.forgecraft.ModInfo; +import nmd.primal.forgecraft.tiles.TileBaseSlot; /** * Created by kitsu on 12/3/2016. diff --git a/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/MachineSaw.java b/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/MachineSaw.java index caed582d..d8d6a748 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/MachineSaw.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/MachineSaw.java @@ -97,6 +97,40 @@ public class MachineSaw extends CustomContainerFacingActive { return new TileMachineSaw(); } + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + this.onBlockHarvested(world, pos, state, player); + return this.destroyBlock(world, pos, state, EnumFacing.UP, player); + } + + public boolean destroyBlock(World world, BlockPos pos, IBlockState state, EnumFacing face, EntityPlayer player) + { + if (!world.isRemote) { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileRedstoneEngine) { + //PlayerHelper.playerTakeItem(world, pos, EnumFacing.DOWN, player, player.getActiveHand(), this.getCrucibleItem(world, pos, state, player)); + ItemStack dropStack = new ItemStack(ModBlocks.redstoneengine, 1); + PlayerHelper.spawnItemOnPlayer(world, player, dropStack); + //world.setBlockState(pos, this.getReplacementBlock(world, pos, state)); + world.setBlockToAir(pos); + world.markTileEntityForRemoval(tile); + return true; + } + } + return false; + } + + @Override + public void onBlockHarvested(World world, BlockPos pos, IBlockState state, EntityPlayer player) + { + if (!world.isRemote) { + TileRedstoneEngine tile = (TileRedstoneEngine) world.getTileEntity(pos); + PlayerHelper.spawnItemOnPlayer(world, player, tile.getSlotList()); + } + } + + private void sawThings(World world, BlockPos pos, IBlockState state, TileMachineSaw tile, BlockPos fromPos){ if(state.getValue(PrimalAPI.States.ACTIVE) && tile.getTransfer() ){ if(fromPos.equals(pos.up())) { diff --git a/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/RedstoneEngine.java b/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/RedstoneEngine.java index e16acb81..8d4fe475 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/RedstoneEngine.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/RedstoneEngine.java @@ -19,6 +19,7 @@ import nmd.primal.core.api.PrimalAPI; import nmd.primal.core.common.helper.PlayerHelper; import nmd.primal.core.common.helper.RecipeHelper; import nmd.primal.forgecraft.blocks.CustomContainerFacingActive; +import nmd.primal.forgecraft.init.ModBlocks; import nmd.primal.forgecraft.tiles.TileRedstoneEngine; import javax.annotation.Nullable; @@ -106,6 +107,39 @@ public class RedstoneEngine extends CustomContainerFacingActive { } } + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + this.onBlockHarvested(world, pos, state, player); + return this.destroyBlock(world, pos, state, EnumFacing.UP, player); + } + + public boolean destroyBlock(World world, BlockPos pos, IBlockState state, EnumFacing face, EntityPlayer player) + { + if (!world.isRemote) { + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileRedstoneEngine) { + //PlayerHelper.playerTakeItem(world, pos, EnumFacing.DOWN, player, player.getActiveHand(), this.getCrucibleItem(world, pos, state, player)); + ItemStack dropStack = new ItemStack(ModBlocks.redstoneengine, 1); + PlayerHelper.spawnItemOnPlayer(world, player, dropStack); + //world.setBlockState(pos, this.getReplacementBlock(world, pos, state)); + world.setBlockToAir(pos); + world.markTileEntityForRemoval(tile); + return true; + } + } + return false; + } + + @Override + public void onBlockHarvested(World world, BlockPos pos, IBlockState state, EntityPlayer player) + { + if (!world.isRemote) { + TileRedstoneEngine tile = (TileRedstoneEngine) world.getTileEntity(pos); + PlayerHelper.spawnItemOnPlayer(world, player, tile.getSlotList()); + } + } + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { diff --git a/kfc/src/main/java/nmd/primal/forgecraft/crafting/registery/RecipesMachineSaw.java b/kfc/src/main/java/nmd/primal/forgecraft/crafting/registery/RecipesMachineSaw.java index 69e50947..1861602e 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/crafting/registery/RecipesMachineSaw.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/crafting/registery/RecipesMachineSaw.java @@ -36,41 +36,61 @@ public final class RecipesMachineSaw { recipes.register(new MachineSawCrafting( new OreIngredient("logOak"), - RecipeHelper.buildList((new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 4, 0)), + RecipeHelper.buildList( + (new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 4, 0)), (new ItemStack(PrimalAPI.Items.BARK_OAK, 4)), sticks)) - .setRecipeName("oakPlanks")); + .setRecipeName("planksOak")); recipes.register(new MachineSawCrafting( new OreIngredient("logSpruce"), - RecipeHelper.buildList((new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 4, 1)), + RecipeHelper.buildList( + (new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 4, 1)), (new ItemStack(PrimalAPI.Items.BARK_SPRUCE, 4)), sticks)) - .setRecipeName("sprucePlanks")); + .setRecipeName("planksSpruce")); recipes.register(new MachineSawCrafting( new OreIngredient("logBirch"), - RecipeHelper.buildList( (new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 4, 2)), + RecipeHelper.buildList( + (new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 4, 2)), (new ItemStack(PrimalAPI.Items.BARK_BIRCH, 4)), sticks)) - .setRecipeName("birchPlanks")); + .setRecipeName("planksBirch")); recipes.register(new MachineSawCrafting( new OreIngredient("logJungle"), - RecipeHelper.buildList(new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 4, 3))) - .setRecipeName("junglePlanks")); + RecipeHelper.buildList( + (new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 4, 3)), + (new ItemStack(PrimalAPI.Items.BARK_JUNGLE, 4)), + sticks)) + .setRecipeName("planksJungle")); recipes.register(new MachineSawCrafting( new OreIngredient("logAcacia"), - RecipeHelper.buildList(new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 4, 0))) - .setRecipeName("acaciaPlanks")); + RecipeHelper.buildList( + (new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 4, 0)), + (new ItemStack(PrimalAPI.Items.BARK_ACACIA, 4)), + sticks)) + .setRecipeName("planksAcacia")); recipes.register(new MachineSawCrafting( new OreIngredient("logIronwood"), - RecipeHelper.buildList(new ItemStack(Item.getItemFromBlock(PrimalAPI.Blocks.PLANKS), 4, 0))) - .setRecipeName("ironwoodPlanks")); + RecipeHelper.buildList( + (new ItemStack(Item.getItemFromBlock(PrimalAPI.Blocks.PLANKS), 4, 0)), + (new ItemStack(PrimalAPI.Items.BARK_IRONWOOD, 4)), + (new ItemStack(PrimalAPI.Items.IRONWOOD_STICK, 2)) + )) + .setRecipeName("planksIronwood")); recipes.register(new MachineSawCrafting( new OreIngredient("logYew"), - RecipeHelper.buildList(new ItemStack(Item.getItemFromBlock(PrimalAPI.Blocks.PLANKS), 4, 1))) + RecipeHelper.buildList( + (new ItemStack(Item.getItemFromBlock(PrimalAPI.Blocks.PLANKS), 4, 1)), + (new ItemStack(PrimalAPI.Items.BARK_YEW, 4)), + (new ItemStack(PrimalAPI.Items.YEW_STICK, 2)) + )) .setRecipeName("yewPlanks")); recipes.register(new MachineSawCrafting( new OreIngredient("logCorypha"), - RecipeHelper.buildList(new ItemStack(Item.getItemFromBlock(PrimalAPI.Blocks.PLANKS), 4, 3))) + RecipeHelper.buildList( + (new ItemStack(Item.getItemFromBlock(PrimalAPI.Blocks.PLANKS), 4, 3)), + (new ItemStack(PrimalAPI.Items.BARK_CORYPHA, 4)), + (new ItemStack(PrimalAPI.Items.CORYPHA_STICK, 2)))) .setRecipeName("coryphaPlanks")); recipes.register(new MachineSawCrafting( diff --git a/kfc/src/main/java/nmd/primal/forgecraft/tiles/TileNBTCrucible.java b/kfc/src/main/java/nmd/primal/forgecraft/tiles/TileNBTCrucible.java index a2600f92..abbc06d1 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/tiles/TileNBTCrucible.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/tiles/TileNBTCrucible.java @@ -79,8 +79,12 @@ public class TileNBTCrucible extends BaseTile implements ITickable { if(recipe!=null){ if( (this.getHot() == 15) && (this.getStatus()) ){ this.setDrops(recipe.getDropsCooked()); + this.updateBlock(); + this.markDirty(); } else if ((this.getHot() == 15) && (!this.getStatus())){ this.setDrops(recipe.getDropsRaw()); + this.updateBlock(); + this.markDirty(); } } } @@ -91,6 +95,8 @@ public class TileNBTCrucible extends BaseTile implements ITickable { if(this.getHeat() > 0){ this.setHeat( this.getHeat() - 1); world.setBlockState(pos, state.withProperty(PrimalAPI.States.LAYERS, 15), 2); + this.updateBlock(); + this.markDirty(); } if(this.getHeat() == 0){ this.setHot(6); diff --git a/kfc/src/main/resources/assets/forgecraft/models/item/redstone_engine_combined.cubik b/kfc/src/main/resources/assets/forgecraft/models/item/redstone_engine_combined.cubik new file mode 100644 index 0000000000000000000000000000000000000000..ae83dcd9cef78c4bd4f354c547c20c4842af7a81 GIT binary patch literal 4703 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 IjRXMv2U0m_kpKVy literal 0 HcmV?d00001 diff --git a/kfc/src/main/resources/assets/forgecraft/models/item/redstoneengine.json b/kfc/src/main/resources/assets/forgecraft/models/item/redstoneengine.json new file mode 100644 index 00000000..2fdd1ad5 --- /dev/null +++ b/kfc/src/main/resources/assets/forgecraft/models/item/redstoneengine.json @@ -0,0 +1,10 @@ +{ + "forge_marker":1, + "defaults": { + "textures": { + "particle": "blocks/planks_oak", + "texture": "blocks/planks_oak" + } + }, + "parent": "forgecraft:block/redstone_engine_model" +} \ No newline at end of file