修改放置器的放置逻辑
This commit is contained in:
parent
c94a39ea61
commit
609559d84a
6 changed files with 200 additions and 51 deletions
|
@ -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<ItemStack> use(Level world, Player player, InteractionHand hand) {
|
||||
InteractionResultHolder<ItemStack> 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<ItemStack> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<ItemStack> use(Level world, Player player, InteractionHand hand) {
|
||||
InteractionResultHolder<ItemStack> 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<ItemStack> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<ItemStack> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Binary file not shown.
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 40 KiB |
Loading…
Add table
Reference in a new issue