From 5d52195bda5e7cd79be99f1a3732c523e6b2f214 Mon Sep 17 00:00:00 2001 From: Mohammad-Ali Minaie Date: Sun, 28 Oct 2018 10:55:46 -0400 Subject: [PATCH] more Grinding bench stuff --- kfc/To-Dos.md | 3 + .../nmd/primal/forgecraft/CommonEvents.java | 18 +- .../blocks/CustomContainerFacingActive.java | 138 ++++++++++ .../forgecraft/blocks/machine/SharpBench.java | 153 +++++++++++ .../forgecraft/blocks/machine/Workbench.java | 28 +- .../nmd/primal/forgecraft/init/ModBlocks.java | 4 + .../nmd/primal/forgecraft/init/ModItems.java | 6 +- .../nmd/primal/forgecraft/init/ModTiles.java | 1 + .../forgecraft/items/parts/WeaponPart.java | 38 +-- .../forgecraft/items/weapons/CustomSword.java | 91 +++++-- .../forgecraft/tiles/TileSharpBench.java | 79 ++++++ .../nmd/primal/forgecraft/util/WeaponNBT.java | 66 +++-- .../forgecraft/blockstates/sharpbench.json | 12 + .../forgecraft/models/block/e_particle.png | Bin 159 -> 0 bytes .../forgecraft/models/block/e_texture.png | Bin 141 -> 0 bytes .../models/block/grinder_model.json | 255 ++++++++++++++++++ .../forgecraft/models/item/grindingwheel.json | 250 +++++++++++++++++ .../forgecraft/models/item/sharpbench.json | 9 + 18 files changed, 1086 insertions(+), 65 deletions(-) create mode 100644 kfc/src/main/java/nmd/primal/forgecraft/blocks/CustomContainerFacingActive.java create mode 100644 kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/SharpBench.java create mode 100644 kfc/src/main/java/nmd/primal/forgecraft/tiles/TileSharpBench.java create mode 100644 kfc/src/main/resources/assets/forgecraft/blockstates/sharpbench.json delete mode 100644 kfc/src/main/resources/assets/forgecraft/models/block/e_particle.png delete mode 100644 kfc/src/main/resources/assets/forgecraft/models/block/e_texture.png create mode 100644 kfc/src/main/resources/assets/forgecraft/models/block/grinder_model.json create mode 100644 kfc/src/main/resources/assets/forgecraft/models/item/grindingwheel.json create mode 100644 kfc/src/main/resources/assets/forgecraft/models/item/sharpbench.json diff --git a/kfc/To-Dos.md b/kfc/To-Dos.md index e07c1422..3725acd3 100644 --- a/kfc/To-Dos.md +++ b/kfc/To-Dos.md @@ -9,6 +9,9 @@ ## Current Feature - [ ] weapon upgrades +- [ ] Grinding Bench +- [ ] Grinding Wheel Crafting Slack, Clay, Sand +- [ ] Damascus Workblade Recipe - [ ] Untick Bloomery and Forge - [ ] Craft Tweaker Support - [ ] Recipe Handler for Block Breaker diff --git a/kfc/src/main/java/nmd/primal/forgecraft/CommonEvents.java b/kfc/src/main/java/nmd/primal/forgecraft/CommonEvents.java index 904df5f9..83973361 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/CommonEvents.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/CommonEvents.java @@ -58,22 +58,22 @@ public class CommonEvents implements WeaponNBT { if(inputStackItem != null) { if (inputStack.hasTagCompound()) { - if (getModifiers(inputStack) < WeaponNBT.materialModifiers.get(((WeaponPart) outputStack.getItem()).getMaterial()) ) { + if (WeaponNBT.getModifiers(inputStack) < WeaponNBT.materialModifiers.get(((WeaponPart) outputStack.getItem()).getMaterial()) ) { if (RecipeHelper.isOreName(modStack, "dustSilver")) { - setSmiteLevel(outputStack, getSmiteLevel(inputStack) + 1); - setModifiers(outputStack, getModifiers(inputStack) + 1); + WeaponNBT.setSmiteLevel(outputStack, WeaponNBT.getSmiteLevel(inputStack) + 1); + WeaponNBT.setModifiers(outputStack, WeaponNBT.getModifiers(inputStack) + 1); } if (RecipeHelper.isOreName(modStack, "foodPoison")) { - setBaneLevel(outputStack, getBaneLevel(inputStack) + 1); - setModifiers(outputStack, getModifiers(inputStack) + 1); + WeaponNBT.setBaneLevel(outputStack, WeaponNBT.getBaneLevel(inputStack) + 1); + WeaponNBT.setModifiers(outputStack, WeaponNBT.getModifiers(inputStack) + 1); } if (RecipeHelper.isOreName(modStack, "dustBlaze")) { - setFireLevel(outputStack, getFireLevel(inputStack) + 1); - setModifiers(outputStack, getModifiers(inputStack) + 1); + WeaponNBT.setFireLevel(outputStack, WeaponNBT.getFireLevel(inputStack) + 1); + WeaponNBT.setModifiers(outputStack, WeaponNBT.getModifiers(inputStack) + 1); } if (RecipeHelper.isOreName(modStack, "gemLapis")) { - setFortuneLevel(outputStack, getFortuneLevel(inputStack) + 1); - setModifiers(outputStack, getModifiers(inputStack) + 1); + WeaponNBT.setFortuneLevel(outputStack, WeaponNBT.getFortuneLevel(inputStack) + 1); + WeaponNBT.setModifiers(outputStack, WeaponNBT.getModifiers(inputStack) + 1); } } } diff --git a/kfc/src/main/java/nmd/primal/forgecraft/blocks/CustomContainerFacingActive.java b/kfc/src/main/java/nmd/primal/forgecraft/blocks/CustomContainerFacingActive.java new file mode 100644 index 00000000..69260063 --- /dev/null +++ b/kfc/src/main/java/nmd/primal/forgecraft/blocks/CustomContainerFacingActive.java @@ -0,0 +1,138 @@ +package nmd.primal.forgecraft.blocks; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +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.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +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.forgecraft.ModInfo; + +/** + * Created by kitsu on 12/3/2016. + */ +public abstract class CustomContainerFacingActive extends BlockContainer { + + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + protected CustomContainerFacingActive(Material material, String registryName) + { + super(material); + this.setRegistryName(registryName); + this.setUnlocalizedName(registryName); + this.setHardness(3.0f); + this.setResistance(4.0f); + setCreativeTab(ModInfo.TAB_FORGECRAFT); + } + + @Override + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + //if(!worldIn.isRemote) { + worldIn.setBlockState(pos, state.withProperty(FACING, placer.getHorizontalFacing()).withProperty(PrimalAPI.States.ACTIVE, false), 2); + //} + } + + @Override + public int getMetaFromState(IBlockState state) { + int i = 0; + + if(!state.getValue(PrimalAPI.States.ACTIVE)) { + if (state.getValue(FACING) == EnumFacing.EAST) { + i = 0; + return i; + } + if (state.getValue(FACING) == EnumFacing.WEST) { + i = 1; + return i; + } + if (state.getValue(FACING) == EnumFacing.SOUTH) { + i = 2; + return i; + } + if (state.getValue(FACING) == EnumFacing.NORTH) { + i = 3; + return i; + } + } + if(state.getValue(PrimalAPI.States.ACTIVE)) { + if (state.getValue(FACING) == EnumFacing.EAST) { + i = 4; + return i; + } + if (state.getValue(FACING) == EnumFacing.WEST) { + i = 5; + return i; + } + if (state.getValue(FACING) == EnumFacing.SOUTH) { + i = 6; + return i; + } + if (state.getValue(FACING) == EnumFacing.NORTH) { + i = 7; + return i; + } + } + return i; + } + + @Override + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState(); + + if (meta == 0){ + iblockstate = iblockstate.withProperty(FACING, EnumFacing.EAST); + } + if (meta == 1) { + iblockstate = iblockstate.withProperty(FACING, EnumFacing.WEST); + } + if (meta == 2) { + iblockstate = iblockstate.withProperty(FACING, EnumFacing.SOUTH); + } + if (meta == 3) { + iblockstate = iblockstate.withProperty(FACING, EnumFacing.NORTH); + } + return iblockstate; + } + + @Override + protected BlockStateContainer createBlockState() { + return new BlockStateContainer(this, new IProperty[] {FACING, PrimalAPI.States.ACTIVE}); + } + + @Override + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } +} diff --git a/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/SharpBench.java b/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/SharpBench.java new file mode 100644 index 00000000..4be5161a --- /dev/null +++ b/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/SharpBench.java @@ -0,0 +1,153 @@ +package nmd.primal.forgecraft.blocks.machine; + +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import nmd.primal.core.api.PrimalAPI; +import nmd.primal.core.common.helper.PlayerHelper; +import nmd.primal.forgecraft.blocks.CustomContainerFacingActive; +import nmd.primal.forgecraft.init.ModItems; +import nmd.primal.forgecraft.items.parts.WeaponPart; +import nmd.primal.forgecraft.items.weapons.CustomSword; +import nmd.primal.forgecraft.items.weapons.SlayerSword; +import nmd.primal.forgecraft.tiles.TileSharpBench; +import nmd.primal.forgecraft.util.WeaponNBT; + +import javax.annotation.Nullable; + +public class SharpBench extends CustomContainerFacingActive { + + + protected static final AxisAlignedBB boundBoxNorth = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 10 / 16D, 8 / 16D); + protected static final AxisAlignedBB boundBoxSouth = new AxisAlignedBB(0.0D, 0.0D, 8 / 16D, 1.0D, 10 / 16D, 1.0D); + protected static final AxisAlignedBB boundBoxEast = new AxisAlignedBB(8 / 16D, 0.0D, 0.0D, 1.0D, 10 / 16D, 1.0D); + protected static final AxisAlignedBB boundBoxWest = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 8 / 16D, 10 / 16D, 1.0D); + + public SharpBench(Material material, String registryName) { + super(material, registryName); + this.setHardness(4.0f); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + + if (!world.isRemote) { + if(player.getActiveHand().equals(EnumHand.MAIN_HAND)) { + TileSharpBench tile = (TileSharpBench) world.getTileEntity(pos); + if(player.getHeldItemMainhand().isEmpty()) { + if(tile.getSlotStack(0).getItem().equals(ModItems.grindingwheel)) { + world.setBlockState(pos, state.withProperty(PrimalAPI.States.ACTIVE, true), 2); + if (tile.getCharge() < 15) { + tile.setCharge(tile.getCharge() + 1); + return true; + } + } + } + if(player.getHeldItemMainhand().getItem().equals(ModItems.grindingwheel)) { + tile.setSlotStack(0, player.getHeldItemMainhand().copy()); + player.getHeldItemMainhand().shrink(1); + return true; + } + if(player.getHeldItemMainhand().isEmpty()) { + if(player.isSneaking()){ + if(tile.getSlotStack(0).getItem().equals(ModItems.grindingwheel)){ + PlayerHelper.spawnItemOnGround(world, pos, tile.getSlotStack(0)); + tile.clearSlot(0); + } + } + } + } + } + return false; + } + + @Override + public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity ent) + { + + if(ent instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer) ent; + TileSharpBench tile = (TileSharpBench) world.getTileEntity(pos); + if(state.getValue(PrimalAPI.States.ACTIVE) && tile.getSlotStack(0).getItem().equals(ModItems.grindingwheel)){ + ItemStack playerStack = player.inventory.getCurrentItem(); + if(playerStack.getItem() instanceof CustomSword || + playerStack.getItem() instanceof SlayerSword){ + if(playerStack.getItemDamage() > 0){ + if (!world.isRemote) { + if (PrimalAPI.getRandom().nextInt(1, 4) == 1) { + playerStack.setItemDamage(playerStack.getItemDamage() - 1); + tile.getSlotStack(0).setItemDamage(tile.getSlotStack(0).getItemDamage() + 1); + WeaponNBT.removeAndSetEnchantsForStack(playerStack); + } + } + if (world.isRemote) { + //TODO make sparks + } + } + } + } + } + } + + @Nullable + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + return new TileSharpBench(); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = state.getActualState(source, pos); + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + + switch (enumfacing) + { + case EAST: + default: + return boundBoxEast; + case SOUTH: + return boundBoxSouth; + case WEST: + return boundBoxWest; + case NORTH: + return boundBoxNorth; + } + } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) + { + if (!world.isRemote && world.getGameRules().getBoolean("doTileDrops")) + { + TileSharpBench tile = (TileSharpBench) world.getTileEntity(pos); + if (tile !=null) + { + for (ItemStack stack : tile.getSlotList()) + { + if (stack != null) { + float offset = 0.7F; + double offsetX = world.rand.nextFloat() * offset + (1.0F - offset) * 0.5D; + double offsetY = world.rand.nextFloat() * offset + (1.0F - offset) * 0.5D; + double offsetZ = world.rand.nextFloat() * offset + (1.0F - offset) * 0.5D; + EntityItem item = new EntityItem(world, pos.getX() + offsetX, pos.getY() + offsetY, pos.getZ() + offsetZ, stack); + item.setDefaultPickupDelay(); + world.spawnEntity(item); + } + } + } + } + super.breakBlock(world, pos, state); + } + +} \ No newline at end of file diff --git a/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/Workbench.java b/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/Workbench.java index 299988c0..a55114c0 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/Workbench.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/blocks/machine/Workbench.java @@ -2,6 +2,7 @@ package nmd.primal.forgecraft.blocks.machine; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -37,7 +38,7 @@ public class Workbench extends CustomContainerFacing { public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { if (!world.isRemote) { - if (hand.equals(hand.MAIN_HAND) ) { + if(player.getActiveHand().equals(EnumHand.MAIN_HAND)) { TileWorkbench tile = (TileWorkbench) world.getTileEntity(pos); ItemStack playerStack = player.inventory.getCurrentItem(); @@ -270,6 +271,31 @@ public class Workbench extends CustomContainerFacing { } } + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) + { + if (!world.isRemote && world.getGameRules().getBoolean("doTileDrops")) + { + TileWorkbench tile = (TileWorkbench) world.getTileEntity(pos); + if (tile !=null) + { + for (ItemStack stack : tile.getSlotList()) + { + if (stack != null) { + float offset = 0.7F; + double offsetX = world.rand.nextFloat() * offset + (1.0F - offset) * 0.5D; + double offsetY = world.rand.nextFloat() * offset + (1.0F - offset) * 0.5D; + double offsetZ = world.rand.nextFloat() * offset + (1.0F - offset) * 0.5D; + EntityItem item = new EntityItem(world, pos.getX() + offsetX, pos.getY() + offsetY, pos.getZ() + offsetZ, stack); + item.setDefaultPickupDelay(); + world.spawnEntity(item); + } + } + } + } + super.breakBlock(world, pos, state); + } + @Nullable @Override public TileEntity createNewTileEntity(World worldIn, int meta) { diff --git a/kfc/src/main/java/nmd/primal/forgecraft/init/ModBlocks.java b/kfc/src/main/java/nmd/primal/forgecraft/init/ModBlocks.java index 878d6275..98195b53 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/init/ModBlocks.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/init/ModBlocks.java @@ -48,6 +48,7 @@ public class ModBlocks { public static Block ironanvil; public static Block workbench; + public static Block sharpbench; public static Block yewstave; @@ -79,6 +80,7 @@ public class ModBlocks { //ironanvil = new AnvilIron(Material.ANVIL, "ironanvil", 6.0f, true); workbench = new Workbench(Material.WOOD, "toolbench"); + sharpbench = new SharpBench(Material.WOOD, "sharpbench"); yewstave = new YewStave(Material.WOOD, "yewstave", 3.0F); @@ -112,6 +114,7 @@ public class ModBlocks { //registerBlockWithItem(ironanvil); registerBlockWithItem(workbench); + registerBlockWithItem(sharpbench); registerBlockWithItem(yewstave); } @@ -144,6 +147,7 @@ public class ModBlocks { registerRender(stoneanvil); //registerRender(ironanvil); registerRender(workbench); + registerRender(sharpbench); registerRender(yewstave); diff --git a/kfc/src/main/java/nmd/primal/forgecraft/init/ModItems.java b/kfc/src/main/java/nmd/primal/forgecraft/init/ModItems.java index 391adbdf..0337370d 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/init/ModItems.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/init/ModItems.java @@ -35,7 +35,7 @@ public class ModItems { public static Item softcrucible; //public static Item stonetongs; public static Item castingmud; - + public static Item grindingwheel; public static Item bronzeingotball; @@ -191,7 +191,7 @@ public class ModItems { longbow = new Longbow("longbow"); //matchlockmusket = new Musket("matchlock_musket"); wootzworkblade = new Workblade("wootzworkblade", PrimalAPI.ToolMaterials.TOOL_WOOTZ_STEEL, -1.0F).setFireProof(true); - + grindingwheel = new BaseItem("grindingwheel").setMaxDamage(9000).setMaxStackSize(1).setNoRepair(); /********** TOOL PARTS @@ -348,6 +348,7 @@ public class ModItems { ForgeRegistries.ITEMS.register(softcrucible); ForgeRegistries.ITEMS.register(wootzworkblade); ForgeRegistries.ITEMS.register(forgehammer); + ForgeRegistries.ITEMS.register(grindingwheel); ForgeRegistries.ITEMS.register(bronzeingotball); ForgeRegistries.ITEMS.register(bronzechunk); @@ -502,6 +503,7 @@ public class ModItems { registerRender(softcrucible); registerRender(forgehammer); registerRender(wootzworkblade); + registerRender(grindingwheel); registerRender(bronzeingotball); registerRender(bronzechunk); diff --git a/kfc/src/main/java/nmd/primal/forgecraft/init/ModTiles.java b/kfc/src/main/java/nmd/primal/forgecraft/init/ModTiles.java index b791d777..543781b2 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/init/ModTiles.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/init/ModTiles.java @@ -18,6 +18,7 @@ public class ModTiles { registerTileEntity(TileCastingForm.class, "castingform"); registerTileEntity(TileNBTCrucible.class, "nbtcrucible"); registerTileEntity(TileWorkbench.class, "workbench"); + registerTileEntity(TileSharpBench.class, "sharpbench"); } private static void registerTileEntity(Class tile_class, String baseName) { diff --git a/kfc/src/main/java/nmd/primal/forgecraft/items/parts/WeaponPart.java b/kfc/src/main/java/nmd/primal/forgecraft/items/parts/WeaponPart.java index 9f09fc83..9b1aae36 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/items/parts/WeaponPart.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/items/parts/WeaponPart.java @@ -48,22 +48,22 @@ public class WeaponPart extends Item implements WeaponNBT { public float apply(ItemStack item, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) { if (item.hasTagCompound()) { Float returnFloat = 0.0F; - if(getSmiteLevel(item)>0){ + if(WeaponNBT.getSmiteLevel(item)>0){ returnFloat += 0.1F; } - if(getBaneLevel(item)>0){ + if(WeaponNBT.getBaneLevel(item)>0){ returnFloat += (0.01F); } - if(getFireLevel(item)>0){ + if(WeaponNBT.getFireLevel(item)>0){ returnFloat += (0.001F); } - if(getFortuneLevel(item)>0){ + if(WeaponNBT.getFortuneLevel(item)>0){ returnFloat += (0.0001F); } - if(getLeechLevel(item)>0){ + if(WeaponNBT.getLeechLevel(item)>0){ returnFloat += (0.00001F); } - if(getHot(item)){ + if(WeaponNBT.getHot(item)){ returnFloat += 1.0F; } return returnFloat; @@ -106,24 +106,24 @@ public class WeaponPart extends Item implements WeaponNBT { { if(stack.hasTagCompound()) { if (stack.getSubCompound("tags") != null) { - tooltip.add(ChatFormatting.GRAY + "Upgrades left: " + (WeaponNBT.materialModifiers.get(this.toolMaterial) - getModifiers(stack))); - if (getSmiteLevel(stack) > 0) { - tooltip.add(ChatFormatting.GOLD + "Holy: " + getSmiteLevel(stack)); + tooltip.add(ChatFormatting.GRAY + "Upgrades left: " + (WeaponNBT.materialModifiers.get(this.toolMaterial) - WeaponNBT.getModifiers(stack))); + if (WeaponNBT.getSmiteLevel(stack) > 0) { + tooltip.add(ChatFormatting.GOLD + "Holy: " + WeaponNBT.getSmiteLevel(stack)); } - if (getBaneLevel(stack) > 0) { - tooltip.add(ChatFormatting.GREEN + "Spider Killing: " + getBaneLevel(stack)); + if (WeaponNBT.getBaneLevel(stack) > 0) { + tooltip.add(ChatFormatting.GREEN + "Spider Killing: " + WeaponNBT.getBaneLevel(stack)); } - if (getFireLevel(stack) > 0) { - tooltip.add(ChatFormatting.RED + "Flame: " + getFireLevel(stack)); + if (WeaponNBT.getFireLevel(stack) > 0) { + tooltip.add(ChatFormatting.RED + "Flame: " + WeaponNBT.getFireLevel(stack)); } - if (getFortuneLevel(stack) > 0) { - tooltip.add(ChatFormatting.BLUE + "Thieving: " + getFortuneLevel(stack)); + if (WeaponNBT.getFortuneLevel(stack) > 0) { + tooltip.add(ChatFormatting.BLUE + "Thieving: " + WeaponNBT.getFortuneLevel(stack)); } - if (getLeechLevel(stack) > 0) { - tooltip.add(ChatFormatting.BLACK + "Life Steal: " + getLeechLevel(stack)); + if (WeaponNBT.getLeechLevel(stack) > 0) { + tooltip.add(ChatFormatting.BLACK + "Life Steal: " + WeaponNBT.getLeechLevel(stack)); } - if (getSharpnessLevel(stack) > 0) { - tooltip.add(ChatFormatting.WHITE + "Sharpness: " + getSharpnessLevel(stack)); + if (WeaponNBT.getSharpnessLevel(stack) > 0) { + tooltip.add(ChatFormatting.WHITE + "Sharpness: " + WeaponNBT.getSharpnessLevel(stack)); } } } diff --git a/kfc/src/main/java/nmd/primal/forgecraft/items/weapons/CustomSword.java b/kfc/src/main/java/nmd/primal/forgecraft/items/weapons/CustomSword.java index ba3aa53d..2d97c172 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/items/weapons/CustomSword.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/items/weapons/CustomSword.java @@ -3,14 +3,21 @@ package nmd.primal.forgecraft.items.weapons; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.mojang.realmsclient.gui.ChatFormatting; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentDamage; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; +import net.minecraft.nbt.NBTBase; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -57,9 +64,62 @@ public class CustomSword extends ItemSword implements WeaponNBT { return 0; } + @Override + public void onUpdate(ItemStack stack, World world, Entity playerin, int itemSlot, boolean isSelected) { + if(!world.isRemote){ + if(isSelected) { + + //System.out.println( + stack.getMaxDamage() * 0.6 + " : " + stack.getItemDamage() + " : " + stack.getMaxDamage() * 0.5); + //System.out.println(stack.getItemDamage() + ">" + stack.getMaxDamage() * 0.5); + //System.out.println(stack.getItemDamage() + "<" + stack.getMaxDamage() * 0.6); + //System.out.println(WeaponNBT.getSharpnessLevel(stack)); + if (stack.getItemDamage() < stack.getMaxDamage() * 0.5){ + WeaponNBT.setSharpnessLevel(stack, 5); + //System.out.println("Sharpness = 5"); + } + if (stack.getItemDamage() > stack.getMaxDamage() * 0.5 && stack.getItemDamage() < stack.getMaxDamage() * 0.6){ + WeaponNBT.setSharpnessLevel(stack, 4); + //System.out.println("Sharpness = 4"); + } + if (stack.getItemDamage() > stack.getMaxDamage() * 0.6 && stack.getItemDamage() < stack.getMaxDamage() * 0.7){ + WeaponNBT.setSharpnessLevel(stack, 3); + //System.out.println("Sharpness = 3"); + } + if (stack.getItemDamage() > stack.getMaxDamage() * 0.7 && stack.getItemDamage() < stack.getMaxDamage() * 0.8){ + WeaponNBT.setSharpnessLevel(stack, 2); + //System.out.println("Sharpness = 2"); + } + if (stack.getItemDamage() > stack.getMaxDamage() * 0.8 && stack.getItemDamage() < stack.getMaxDamage() * 0.9){ + WeaponNBT.setSharpnessLevel(stack, 1); + //System.out.println("Sharpness = 1"); + } + if (stack.getItemDamage() > stack.getMaxDamage() * 0.9 && stack.getItemDamage() < stack.getMaxDamage()){ + WeaponNBT.setSharpnessLevel(stack, 0); + //System.out.println("Sharpness = 0"); + } + //System.out.println(WeaponNBT.getSharpnessLevel(stack)); + } + } + } + @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { + if(!player.world.isRemote) { + WeaponNBT.removeAndSetEnchantsForStack(stack); + return false; + } + return false; + } + + @Override + public boolean onBlockStartBreak(ItemStack stack, BlockPos pos, EntityPlayer player) + { + if(!player.world.isRemote) { + System.out.println(WeaponNBT.getSharpnessLevel(stack)); + WeaponNBT.removeAndSetEnchantsForStack(stack); + return false; + } return false; } @@ -72,6 +132,7 @@ public class CustomSword extends ItemSword implements WeaponNBT { { multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", this.attack, 0)); multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", this.speed, 0)); + } return multimap; @@ -81,28 +142,28 @@ public class CustomSword extends ItemSword implements WeaponNBT { @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flagIn) { - //tooltip.add(ChatFormatting.GRAY + "Damage: " + item.getItemDamage() ); + tooltip.add(ChatFormatting.LIGHT_PURPLE + "Damage: " + stack.getItemDamage() ); if(stack.hasTagCompound()) { - tooltip.add(ChatFormatting.GRAY + "Upgrades left: " + (WeaponNBT.materialModifiers.get(this.toolMaterial) - getModifiers(stack))); - if (getSmiteLevel(stack) > 0) { - tooltip.add(ChatFormatting.GOLD + "Holy: " + getSmiteLevel(stack)); + tooltip.add(ChatFormatting.GRAY + "Upgrades left: " + (WeaponNBT.materialModifiers.get(this.toolMaterial) - WeaponNBT.getModifiers(stack))); + if (WeaponNBT.getSmiteLevel(stack) > 0) { + tooltip.add(ChatFormatting.GOLD + "Holy: " + WeaponNBT.getSmiteLevel(stack)); } - if (getBaneLevel(stack) > 0) { - tooltip.add(ChatFormatting.GREEN + "Spider Killing: " + getBaneLevel(stack)); + if (WeaponNBT.getBaneLevel(stack) > 0) { + tooltip.add(ChatFormatting.GREEN + "Spider Killing: " + WeaponNBT.getBaneLevel(stack)); } - if (getFireLevel(stack) > 0) { - tooltip.add(ChatFormatting.RED + "Flame: " + getFireLevel(stack)); + if (WeaponNBT.getFireLevel(stack) > 0) { + tooltip.add(ChatFormatting.RED + "Flame: " + WeaponNBT.getFireLevel(stack)); } - if (getFortuneLevel(stack) > 0) { - tooltip.add(ChatFormatting.BLUE + "Thieving: " + getFortuneLevel(stack)); + if (WeaponNBT.getFortuneLevel(stack) > 0) { + tooltip.add(ChatFormatting.BLUE + "Thieving: " + WeaponNBT.getFortuneLevel(stack)); } - if (getLeechLevel(stack) > 0) { - tooltip.add(ChatFormatting.BLACK + "Life Steal: " + getLeechLevel(stack)); - } - if (getSharpnessLevel(stack) > 0) { - tooltip.add(ChatFormatting.WHITE + "Sharpness: " + getSharpnessLevel(stack)); + if (WeaponNBT.getLeechLevel(stack) > 0) { + tooltip.add(ChatFormatting.BLACK + "Life Steal: " + WeaponNBT.getLeechLevel(stack)); } + //if (WeaponNBT.getSharpnessLevel(stack) > 0) { + // tooltip.add(ChatFormatting.WHITE + "Sharpness: " + WeaponNBT.getSharpnessLevel(stack)); + //} } } diff --git a/kfc/src/main/java/nmd/primal/forgecraft/tiles/TileSharpBench.java b/kfc/src/main/java/nmd/primal/forgecraft/tiles/TileSharpBench.java new file mode 100644 index 00000000..aa325947 --- /dev/null +++ b/kfc/src/main/java/nmd/primal/forgecraft/tiles/TileSharpBench.java @@ -0,0 +1,79 @@ +package nmd.primal.forgecraft.tiles; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ITickable; +import net.minecraft.world.World; +import nmd.primal.core.api.PrimalAPI; +import nmd.primal.core.common.helper.RecipeHelper; +import nmd.primal.core.common.items.tools.Gallagher; +import nmd.primal.forgecraft.init.ModItems; +import nmd.primal.forgecraft.items.parts.ToolPart; +import nmd.primal.forgecraft.items.parts.WeaponGuard; +import nmd.primal.forgecraft.items.parts.WeaponPart; +import nmd.primal.forgecraft.items.tools.CustomAxe; +import nmd.primal.forgecraft.items.tools.CustomHoe; +import nmd.primal.forgecraft.items.tools.CustomPickaxe; +import nmd.primal.forgecraft.items.tools.CustomShovel; + +public class TileSharpBench extends TileBaseSlot implements ITickable { + + private int iteration = 0; + + public int getCharge() { + return charge; + } + + public void setCharge(int charge) { + this.charge = charge; + } + + private int charge; + + @Override + public void update () { + World world = this.getWorld(); + if (!world.isRemote) { + IBlockState state = world.getBlockState(this.pos); + + if(state.getValue(PrimalAPI.States.ACTIVE)){ + this.iteration++; + if(iteration > 80){ + if(charge > 0){ + charge -= 1; + } + iteration = 0; + } + } + } + } + + public boolean isItemValidForSlot(int index, ItemStack stack) { + if(index == 0){ + if(stack.getItem()== ModItems.grindingwheel){ + return true; + } + } + return false; + } + + // ***************************************************************************** // + // NBT + // ***************************************************************************** // + @Override + public NBTTagCompound readNBT(NBTTagCompound nbt) + { + super.readNBT(nbt); + this.charge = nbt.getInteger("charge"); + return nbt; + } + + @Override + public NBTTagCompound writeNBT(NBTTagCompound nbt) + { + nbt.setInteger("charge", this.charge); + super.writeNBT(nbt); + return nbt; + } +} diff --git a/kfc/src/main/java/nmd/primal/forgecraft/util/WeaponNBT.java b/kfc/src/main/java/nmd/primal/forgecraft/util/WeaponNBT.java index fecdea4c..a27b1425 100644 --- a/kfc/src/main/java/nmd/primal/forgecraft/util/WeaponNBT.java +++ b/kfc/src/main/java/nmd/primal/forgecraft/util/WeaponNBT.java @@ -1,5 +1,7 @@ package nmd.primal.forgecraft.util; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; @@ -29,7 +31,7 @@ public interface WeaponNBT { * @param stack The ItemStack to get Modifiers from * @return int The number of modifiers applied */ - default int getModifiers(ItemStack stack) { + static int getModifiers(ItemStack stack) { if(!stack.isEmpty()) { if (stack.hasTagCompound()) { if (stack.getSubCompound("tags") != null) { @@ -45,11 +47,11 @@ public interface WeaponNBT { * @param stack The stack to set modifiers to * @param mods The number of modifiers added */ - default void setModifiers(ItemStack stack, Integer mods){ + static void setModifiers(ItemStack stack, Integer mods){ stack.getSubCompound("tags").setInteger("modifiers", mods); } - default int getSmiteLevel(ItemStack stack){ + static int getSmiteLevel(ItemStack stack){ if(!stack.isEmpty()) { if (stack.hasTagCompound()) { if (stack.getSubCompound("tags") != null) { @@ -59,11 +61,11 @@ public interface WeaponNBT { } return 0; } - default void setSmiteLevel(ItemStack stack, int smite){ + static void setSmiteLevel(ItemStack stack, int smite){ stack.getSubCompound("tags").setInteger("smite", smite); } - default int getBaneLevel(ItemStack stack) { + static int getBaneLevel(ItemStack stack) { if(!stack.isEmpty()) { if (stack.hasTagCompound()) { if (stack.getSubCompound("tags") != null) { @@ -73,11 +75,11 @@ public interface WeaponNBT { } return 0; } - default void setBaneLevel(ItemStack stack, Integer level){ + static void setBaneLevel(ItemStack stack, Integer level){ stack.getSubCompound("tags").setInteger("bane", level); } - default int getFireLevel(ItemStack stack) { + static int getFireLevel(ItemStack stack) { if(!stack.isEmpty()) { if (stack.hasTagCompound()) { if (stack.getSubCompound("tags") != null) { @@ -87,11 +89,11 @@ public interface WeaponNBT { } return 0; } - default void setFireLevel(ItemStack stack, Integer level){ + static void setFireLevel(ItemStack stack, Integer level){ stack.getSubCompound("tags").setInteger("fire", level); } - default int getFortuneLevel(ItemStack stack) { + static int getFortuneLevel(ItemStack stack) { if(!stack.isEmpty()) { if (stack.hasTagCompound()) { if (stack.getSubCompound("tags") != null) { @@ -101,11 +103,11 @@ public interface WeaponNBT { } return 0; } - default void setFortuneLevel(ItemStack stack, Integer level){ + static void setFortuneLevel(ItemStack stack, Integer level){ stack.getSubCompound("tags").setInteger("fortune", level); } - default int getSweepingLevel(ItemStack stack) { + static int getSweepingLevel(ItemStack stack) { if(!stack.isEmpty()) { if (stack.hasTagCompound()) { if (stack.getSubCompound("tags") != null) { @@ -115,11 +117,11 @@ public interface WeaponNBT { } return 0; } - default void setSweepingLevel(ItemStack stack, Integer level){ + static void setSweepingLevel(ItemStack stack, Integer level){ stack.getSubCompound("tags").setInteger("sweeping", level); } - default int getSharpnessLevel(ItemStack stack) { + static int getSharpnessLevel(ItemStack stack) { if(!stack.isEmpty()) { if (stack.hasTagCompound()) { if (stack.getSubCompound("tags") != null) { @@ -129,11 +131,11 @@ public interface WeaponNBT { } return 0; } - default void setSharpnessLevel(ItemStack stack, Integer level){ + static void setSharpnessLevel(ItemStack stack, Integer level){ stack.getSubCompound("tags").setInteger("sharp", level); } - default int getLeechLevel(ItemStack stack) { + static int getLeechLevel(ItemStack stack) { if(!stack.isEmpty()) { if (stack.hasTagCompound()) { if (stack.getSubCompound("tags") != null) { @@ -143,11 +145,11 @@ public interface WeaponNBT { } return 0; } - default void setLeechLevel(ItemStack stack, Integer level){ + static void setLeechLevel(ItemStack stack, Integer level){ stack.getSubCompound("tags").setInteger("leech", level); } - default NBTTagCompound getTags(ItemStack stack){ + static NBTTagCompound getTags(ItemStack stack){ if(!stack.isEmpty()) { if (stack.hasTagCompound()) { if (stack.getSubCompound("tags") != null) { @@ -158,7 +160,7 @@ public interface WeaponNBT { return null; } - default boolean getHot(ItemStack stack){ + static boolean getHot(ItemStack stack){ if(!stack.isEmpty()){ if(stack.hasTagCompound()){ @@ -171,7 +173,7 @@ public interface WeaponNBT { return false; } - default void setHot(ItemStack stack){ + static void setHot(ItemStack stack){ } @@ -189,6 +191,32 @@ public interface WeaponNBT { stack.getSubCompound("tags").setBoolean("hot", false); } + static void removeAndSetEnchantsForStack(ItemStack stack){ + if(stack.hasTagCompound()) { + //if(stack.isItemEnchanted()) { + stack.getTagCompound().removeTag("ench"); + if (getSmiteLevel(stack)>0) { + stack.addEnchantment(Enchantment.getEnchantmentByID(17), getSmiteLevel(stack)); + } + if (getBaneLevel(stack)>0) { + stack.addEnchantment(Enchantment.getEnchantmentByID(18), getBaneLevel(stack)); + } + if (getFireLevel(stack)>0) { + stack.addEnchantment(Enchantment.getEnchantmentByID(20), getFireLevel(stack)); + } + if (getFortuneLevel(stack)>0) { + stack.addEnchantment(Enchantment.getEnchantmentByID(21), getFortuneLevel(stack)); + } + if (getSweepingLevel(stack) > 0) { + stack.addEnchantment(Enchantment.getEnchantmentByID(22), getSweepingLevel(stack)); + } + if (getSharpnessLevel(stack)>0) { + stack.addEnchantment(Enchantment.getEnchantmentByID(16), getSharpnessLevel(stack)); + } + //} + } + } + Hashtable materialModifiers = new Hashtable(){{ put(PrimalAPI.ToolMaterials.TOOL_COPPER, 3); diff --git a/kfc/src/main/resources/assets/forgecraft/blockstates/sharpbench.json b/kfc/src/main/resources/assets/forgecraft/blockstates/sharpbench.json new file mode 100644 index 00000000..93eb9740 --- /dev/null +++ b/kfc/src/main/resources/assets/forgecraft/blockstates/sharpbench.json @@ -0,0 +1,12 @@ +{ + "variants": { + "active=false,facing=north": { "model": "forgecraft:grinder_model" }, + "active=false,facing=east": { "model": "forgecraft:grinder_model", "y": 90 }, + "active=false,facing=south": { "model": "forgecraft:grinder_model", "y": 180 }, + "active=false,facing=west": { "model": "forgecraft:grinder_model", "y": 270 }, + "active=true,facing=north": { "model": "forgecraft:grinder_model" }, + "active=true,facing=east": { "model": "forgecraft:grinder_model", "y": 90 }, + "active=true,facing=south": { "model": "forgecraft:grinder_model", "y": 180 }, + "active=true,facing=west": { "model": "forgecraft:grinder_model", "y": 270 } + } +} \ No newline at end of file diff --git a/kfc/src/main/resources/assets/forgecraft/models/block/e_particle.png b/kfc/src/main/resources/assets/forgecraft/models/block/e_particle.png deleted file mode 100644 index e557878f9b0081df0e6c571ed915f4780bf1a2fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|X`U{QAsV7vCj@daC~~-LPd)$i z?$?xTj^-IIp9ACFK7V={aJAiXe!J@v0mIGT4Z3dBCY+nlAN}mLRowa~J3GYg{eRVX zXUUaN&3PXSznt{pUt?*oMTj?KX|GSjMcIr5t;EiVqsx9UI;{|T9DHPlG0;W^Pgg&e IbxsLQ03WwL?f?J) diff --git a/kfc/src/main/resources/assets/forgecraft/models/block/e_texture.png b/kfc/src/main/resources/assets/forgecraft/models/block/e_texture.png deleted file mode 100644 index 7291f2ea2b524eccecb6678f7bd40262c849bf2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|A)YRdAsV8|HWeQfm^B+%SKK&v zuFpfaoliDNDM&L$@~vsZp9Y?WbuQ1CZf4l2-1K~5=5VI@Msu3kk+ey<5-m~}Y