From 34fc80ff5ec1a692723c63de9416fd8932770f42 Mon Sep 17 00:00:00 2001 From: Sunskimmer822 <92886026+Sunskimmer822@users.noreply.github.com> Date: Tue, 19 Jul 2022 15:14:06 -0700 Subject: [PATCH] hammer --- .../java/net/serenas/shitmod/Shitmod.java | 6 +++ .../java/net/serenas/shitmod/testHammer.java | 50 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/main/java/net/serenas/shitmod/testHammer.java diff --git a/src/main/java/net/serenas/shitmod/Shitmod.java b/src/main/java/net/serenas/shitmod/Shitmod.java index 67554f0..df7e4ce 100644 --- a/src/main/java/net/serenas/shitmod/Shitmod.java +++ b/src/main/java/net/serenas/shitmod/Shitmod.java @@ -15,8 +15,10 @@ import net.minecraft.item.FoodComponent; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; +import net.minecraft.item.PickaxeItem; import net.minecraft.item.ShovelItem; import net.minecraft.item.ToolItem; +import net.minecraft.item.ToolMaterials; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; import net.minecraft.util.Rarity; @@ -122,6 +124,8 @@ public class Shitmod implements ModInitializer { public static final Enchantment LIFESTEAL = new lifeStealEnchantment(Enchantment.Rarity.RARE, EnchantmentTarget.WEAPON, new EquipmentSlot[] {EquipmentSlot.MAINHAND}); + public static final PickaxeItem HAMMER = new testHammer(ToolMaterials.NETHERITE, 3, 2, new Item.Settings().group(Shitmod.TOOLS_GROUP).fireproof().maxDamage(800)); + @Override public void onInitialize() { @@ -211,5 +215,7 @@ public class Shitmod implements ModInitializer { Registry.register(Registry.SOUND_EVENT, new Identifier("shitmod", "glock_noise"), GLOCK_NOISE); Registry.register(Registry.ENCHANTMENT, new Identifier("shitmod", "lifesteal"), LIFESTEAL); + + Registry.register(Registry.ITEM, new Identifier("shitmod", "Hammer"), HAMMER); } } diff --git a/src/main/java/net/serenas/shitmod/testHammer.java b/src/main/java/net/serenas/shitmod/testHammer.java new file mode 100644 index 0000000..11adf1c --- /dev/null +++ b/src/main/java/net/serenas/shitmod/testHammer.java @@ -0,0 +1,50 @@ +package net.serenas.shitmod; + + +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.PickaxeItem; +import net.minecraft.item.ToolMaterial; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Direction.Axis; +import net.minecraft.world.RaycastContext; +import net.minecraft.world.World; + +public class testHammer extends PickaxeItem { + + protected testHammer(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) { + super(material, attackDamage, attackSpeed, settings); + } + @Override + public boolean canMine(BlockState blockState, World world, BlockPos pos, PlayerEntity player) { + if (world.isClient){ + return true; + } + ItemStack mainHandStack = player.getMainHandStack(); + + // Taken from Entity#rayTrace + Vec3d vec3d_1 = player.getCameraPosVec(1); + Vec3d vec3d_2 = player.getRotationVec(1); + int range = 4; + Vec3d vec3d_3 = vec3d_1.add(vec3d_2.x * range, vec3d_2.y * range, vec3d_2.z * range); + BlockHitResult hitResult = world.raycast(new RaycastContext(vec3d_1, vec3d_3, RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.ANY, player)); + Direction.Axis axis = hitResult.getSide().getAxis(); + for (int i = -1; i <= 1; i++) + for (int j = -1; j <= 1; j++) { + if (i != 0 || j != 0) { + BlockPos newPos = new BlockPos(axis == Axis.X ? pos.getX() : pos.getX() + i, axis == Axis.X ? pos.getY() + i : axis == Axis.Y ? pos.getY() : pos.getY() + j, axis != Axis.Z ? pos.getZ() + j : pos.getZ()); + BlockState newState = world.getBlockState(newPos); + boolean canBreak = newState.getHardness(world, newPos) >= 0 || (!newState.isToolRequired() && mainHandStack.getMiningSpeedMultiplier(newState) > 1); + if (!canBreak) + continue; + // Let's break the block! + world.breakBlock(newPos, true, player); + } + } + return true; + +}}