diff --git a/src/main/java/net/mcreator/superbwarfare/item/Drone.java b/src/main/java/net/mcreator/superbwarfare/item/Drone.java index 9ca529747..a9296c854 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/Drone.java +++ b/src/main/java/net/mcreator/superbwarfare/item/Drone.java @@ -1,17 +1,34 @@ package net.mcreator.superbwarfare.item; +import net.mcreator.superbwarfare.entity.DroneEntity; import net.mcreator.superbwarfare.init.ModEntities; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; +import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.SpawnerBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; + +import java.util.Objects; public class Drone extends Item { public Drone() { @@ -19,24 +36,59 @@ public class Drone extends Item { } @Override - public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { - InteractionResultHolder ar = super.use(world, player, hand); + public InteractionResult useOn(UseOnContext pContext) { + Level level = pContext.getLevel(); + if (!(level instanceof ServerLevel)) { + return InteractionResult.SUCCESS; + } else { + ItemStack itemstack = pContext.getItemInHand(); + BlockPos blockpos = pContext.getClickedPos(); + Direction direction = pContext.getClickedFace(); + BlockState blockstate = level.getBlockState(blockpos); + BlockPos blockpos1; + if (blockstate.getCollisionShape(level, blockpos).isEmpty()) { + blockpos1 = blockpos; + } else { + blockpos1 = blockpos.relative(direction); + } - if (world instanceof ServerLevel level) { - Entity entityToSpawn = ModEntities.DRONE.get().spawn(level, BlockPos.containing(player.getX() + 1.5 * player.getLookAngle().x, player.getY(), player.getZ() + 1.5 * player.getLookAngle().z), MobSpawnType.MOB_SUMMONED); - if (entityToSpawn != null) { - entityToSpawn.setYRot(player.getYRot()); - entityToSpawn.setYBodyRot(player.getYRot()); - entityToSpawn.setYHeadRot(player.getYRot()); - entityToSpawn.setDeltaMovement(0, 0, 0); + if (ModEntities.DRONE.get().spawn((ServerLevel)level, itemstack, pContext.getPlayer(), blockpos1, MobSpawnType.SPAWN_EGG, true, !Objects.equals(blockpos, blockpos1) && direction == Direction.UP) != null) { + itemstack.shrink(1); + level.gameEvent(pContext.getPlayer(), GameEvent.ENTITY_PLACE, blockpos); + } + + return InteractionResult.CONSUME; + } + } + + @Override + public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pHand) { + ItemStack itemstack = pPlayer.getItemInHand(pHand); + BlockHitResult blockhitresult = getPlayerPOVHitResult(pLevel, pPlayer, ClipContext.Fluid.SOURCE_ONLY); + if (blockhitresult.getType() != HitResult.Type.BLOCK) { + return InteractionResultHolder.pass(itemstack); + } else if (!(pLevel instanceof ServerLevel)) { + return InteractionResultHolder.success(itemstack); + } else { + BlockPos blockpos = blockhitresult.getBlockPos(); + if (!(pLevel.getBlockState(blockpos).getBlock() instanceof LiquidBlock)) { + return InteractionResultHolder.pass(itemstack); + } else if (pLevel.mayInteract(pPlayer, blockpos) && pPlayer.mayUseItemAt(blockpos, blockhitresult.getDirection(), itemstack)) { + Entity entity = ModEntities.DRONE.get().spawn((ServerLevel)pLevel, itemstack, pPlayer, blockpos, MobSpawnType.SPAWN_EGG, false, false); + if (entity == null) { + return InteractionResultHolder.pass(itemstack); + } else { + if (!pPlayer.getAbilities().instabuild) { + itemstack.shrink(1); + } + + pPlayer.awardStat(Stats.ITEM_USED.get(this)); + pLevel.gameEvent(pPlayer, GameEvent.ENTITY_PLACE, entity.position()); + return InteractionResultHolder.consume(itemstack); + } + } else { + return InteractionResultHolder.fail(itemstack); } } - - if (!player.isCreative()) { - player.getItemInHand(hand).shrink(1); - player.swing(InteractionHand.MAIN_HAND, true); - } - - return ar; } } diff --git a/src/main/java/net/mcreator/superbwarfare/item/MortarDeployer.java b/src/main/java/net/mcreator/superbwarfare/item/MortarDeployer.java index f0a560921..08bf9dace 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/MortarDeployer.java +++ b/src/main/java/net/mcreator/superbwarfare/item/MortarDeployer.java @@ -2,8 +2,11 @@ package net.mcreator.superbwarfare.item; import net.mcreator.superbwarfare.init.ModEntities; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; +import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.MobSpawnType; @@ -11,7 +14,16 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; + +import java.util.Objects; public class MortarDeployer extends Item { public MortarDeployer() { @@ -19,24 +31,59 @@ public class MortarDeployer extends Item { } @Override - public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { - InteractionResultHolder ar = super.use(world, player, hand); + public InteractionResult useOn(UseOnContext pContext) { + Level level = pContext.getLevel(); + if (!(level instanceof ServerLevel)) { + return InteractionResult.SUCCESS; + } else { + ItemStack itemstack = pContext.getItemInHand(); + BlockPos blockpos = pContext.getClickedPos(); + Direction direction = pContext.getClickedFace(); + BlockState blockstate = level.getBlockState(blockpos); + BlockPos blockpos1; + if (blockstate.getCollisionShape(level, blockpos).isEmpty()) { + blockpos1 = blockpos; + } else { + blockpos1 = blockpos.relative(direction); + } - if (world instanceof ServerLevel level) { - Entity entityToSpawn = ModEntities.MORTAR.get().spawn(level, BlockPos.containing(player.getX() + 1.5 * player.getLookAngle().x, player.getY(), player.getZ() + 1.5 * player.getLookAngle().z), MobSpawnType.MOB_SUMMONED); - if (entityToSpawn != null) { - entityToSpawn.setYRot(player.getYRot()); - entityToSpawn.setYBodyRot(player.getYRot()); - entityToSpawn.setYHeadRot(player.getYRot()); - entityToSpawn.setDeltaMovement(0, 0, 0); + if (ModEntities.MORTAR.get().spawn((ServerLevel)level, itemstack, pContext.getPlayer(), blockpos1, MobSpawnType.SPAWN_EGG, true, !Objects.equals(blockpos, blockpos1) && direction == Direction.UP) != null) { + itemstack.shrink(1); + level.gameEvent(pContext.getPlayer(), GameEvent.ENTITY_PLACE, blockpos); + } + + return InteractionResult.CONSUME; + } + } + + @Override + public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pHand) { + ItemStack itemstack = pPlayer.getItemInHand(pHand); + BlockHitResult blockhitresult = getPlayerPOVHitResult(pLevel, pPlayer, ClipContext.Fluid.SOURCE_ONLY); + if (blockhitresult.getType() != HitResult.Type.BLOCK) { + return InteractionResultHolder.pass(itemstack); + } else if (!(pLevel instanceof ServerLevel)) { + return InteractionResultHolder.success(itemstack); + } else { + BlockPos blockpos = blockhitresult.getBlockPos(); + if (!(pLevel.getBlockState(blockpos).getBlock() instanceof LiquidBlock)) { + return InteractionResultHolder.pass(itemstack); + } else if (pLevel.mayInteract(pPlayer, blockpos) && pPlayer.mayUseItemAt(blockpos, blockhitresult.getDirection(), itemstack)) { + Entity entity = ModEntities.MORTAR.get().spawn((ServerLevel)pLevel, itemstack, pPlayer, blockpos, MobSpawnType.SPAWN_EGG, false, false); + if (entity == null) { + return InteractionResultHolder.pass(itemstack); + } else { + if (!pPlayer.getAbilities().instabuild) { + itemstack.shrink(1); + } + + pPlayer.awardStat(Stats.ITEM_USED.get(this)); + pLevel.gameEvent(pPlayer, GameEvent.ENTITY_PLACE, entity.position()); + return InteractionResultHolder.consume(itemstack); + } + } else { + return InteractionResultHolder.fail(itemstack); } } - - if (!player.isCreative()) { - player.getItemInHand(hand).shrink(1); - player.swing(InteractionHand.MAIN_HAND, true); - } - - return ar; } } diff --git a/src/main/java/net/mcreator/superbwarfare/item/TargetDeployer.java b/src/main/java/net/mcreator/superbwarfare/item/TargetDeployer.java index dd9e4456f..86da205a8 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/TargetDeployer.java +++ b/src/main/java/net/mcreator/superbwarfare/item/TargetDeployer.java @@ -2,13 +2,27 @@ package net.mcreator.superbwarfare.item; import net.mcreator.superbwarfare.init.ModEntities; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; +import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; + +import java.util.Objects; public class TargetDeployer extends Item { public TargetDeployer() { @@ -16,23 +30,59 @@ public class TargetDeployer extends Item { } @Override - public InteractionResult useOn(UseOnContext context) { - super.useOn(context); + public InteractionResult useOn(UseOnContext pContext) { + Level level = pContext.getLevel(); + if (!(level instanceof ServerLevel)) { + return InteractionResult.SUCCESS; + } else { + ItemStack itemstack = pContext.getItemInHand(); + BlockPos blockpos = pContext.getClickedPos(); + Direction direction = pContext.getClickedFace(); + BlockState blockstate = level.getBlockState(blockpos); + BlockPos blockpos1; + if (blockstate.getCollisionShape(level, blockpos).isEmpty()) { + blockpos1 = blockpos; + } else { + blockpos1 = blockpos.relative(direction); + } - var clickedPos = context.getClickedPos(); - var player = context.getPlayer(); - if (player == null) return InteractionResult.FAIL; + if (ModEntities.TARGET_1.get().spawn((ServerLevel)level, itemstack, pContext.getPlayer(), blockpos1, MobSpawnType.SPAWN_EGG, true, !Objects.equals(blockpos, blockpos1) && direction == Direction.UP) != null) { + itemstack.shrink(1); + level.gameEvent(pContext.getPlayer(), GameEvent.ENTITY_PLACE, blockpos); + } - if (context.getLevel() instanceof ServerLevel level) { - Entity entityToSpawn = ModEntities.TARGET_1.get().spawn(level, BlockPos.containing(clickedPos.getX() + 0.5, clickedPos.getY() + 1, clickedPos.getZ() + 0.5), MobSpawnType.MOB_SUMMONED); - if (entityToSpawn != null) { - entityToSpawn.setDeltaMovement(0, 0, 0); + return InteractionResult.CONSUME; + } + } + + @Override + public InteractionResultHolder use(Level pLevel, Player pPlayer, InteractionHand pHand) { + ItemStack itemstack = pPlayer.getItemInHand(pHand); + BlockHitResult blockhitresult = getPlayerPOVHitResult(pLevel, pPlayer, ClipContext.Fluid.SOURCE_ONLY); + if (blockhitresult.getType() != HitResult.Type.BLOCK) { + return InteractionResultHolder.pass(itemstack); + } else if (!(pLevel instanceof ServerLevel)) { + return InteractionResultHolder.success(itemstack); + } else { + BlockPos blockpos = blockhitresult.getBlockPos(); + if (!(pLevel.getBlockState(blockpos).getBlock() instanceof LiquidBlock)) { + return InteractionResultHolder.pass(itemstack); + } else if (pLevel.mayInteract(pPlayer, blockpos) && pPlayer.mayUseItemAt(blockpos, blockhitresult.getDirection(), itemstack)) { + Entity entity = ModEntities.TARGET_1.get().spawn((ServerLevel)pLevel, itemstack, pPlayer, blockpos, MobSpawnType.SPAWN_EGG, false, false); + if (entity == null) { + return InteractionResultHolder.pass(itemstack); + } else { + if (!pPlayer.getAbilities().instabuild) { + itemstack.shrink(1); + } + + pPlayer.awardStat(Stats.ITEM_USED.get(this)); + pLevel.gameEvent(pPlayer, GameEvent.ENTITY_PLACE, entity.position()); + return InteractionResultHolder.consume(itemstack); + } + } else { + return InteractionResultHolder.fail(itemstack); } } - - context.getItemInHand().shrink(1); - player.swing(InteractionHand.MAIN_HAND, true); - - return InteractionResult.SUCCESS; } } diff --git a/src/main/resources/assets/superbwarfare/animations/bocek.animation.json b/src/main/resources/assets/superbwarfare/animations/bocek.animation.json index 384ed39f9..14ec37fa8 100644 --- a/src/main/resources/assets/superbwarfare/animations/bocek.animation.json +++ b/src/main/resources/assets/superbwarfare/animations/bocek.animation.json @@ -79,13 +79,13 @@ "vector": [10, -10, 5] }, "0.2083": { - "vector": [5, -6, 1] + "vector": [5, -4, 1] }, "0.4167": { "vector": [10, -2, -7.5] }, "0.625": { - "vector": [5, -4, -2] + "vector": [5, -6, -10] }, "0.8333": { "vector": [10, -10, 5] @@ -93,14 +93,14 @@ }, "position": { "0.0": { - "vector": [2.49619, -1.07196, 0.17365] + "vector": [2.49619, -2.07196, 0.17365] }, "0.2083": { "vector": [-0.25, 0.5, 0], "easing": "easeInSine" }, "0.4167": { - "vector": [-2.4969, -1.11525, 0.13864], + "vector": [-2.4969, -2.11525, 0.13864], "easing": "easeOutSine" }, "0.625": { @@ -108,7 +108,7 @@ "easing": "easeInSine" }, "0.8333": { - "vector": [2.49619, -1.07196, 0.17365] + "vector": [2.49619, -2.07196, 0.17365] } } } diff --git a/src/main/resources/assets/superbwarfare/textures/item/m870.png b/src/main/resources/assets/superbwarfare/textures/item/m870.png index eaebf11f6..ef82534c7 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/item/m870.png and b/src/main/resources/assets/superbwarfare/textures/item/m870.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/item/mk14.png b/src/main/resources/assets/superbwarfare/textures/item/mk14.png index 6c36e9796..b82a27127 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/item/mk14.png and b/src/main/resources/assets/superbwarfare/textures/item/mk14.png differ