添加新接口
This commit is contained in:
parent
7add137f27
commit
c1794973c0
10 changed files with 61 additions and 112 deletions
|
@ -5,6 +5,7 @@ import com.atsuishio.superbwarfare.component.ModDataComponents;
|
||||||
import com.atsuishio.superbwarfare.config.server.ExplosionConfig;
|
import com.atsuishio.superbwarfare.config.server.ExplosionConfig;
|
||||||
import com.atsuishio.superbwarfare.config.server.VehicleConfig;
|
import com.atsuishio.superbwarfare.config.server.VehicleConfig;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.CannonEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.CannonEntity;
|
||||||
|
import com.atsuishio.superbwarfare.entity.vehicle.base.LockTargetEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.ThirdPersonCameraPosition;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.ThirdPersonCameraPosition;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.damage.DamageModifier;
|
import com.atsuishio.superbwarfare.entity.vehicle.damage.DamageModifier;
|
||||||
|
@ -60,7 +61,7 @@ import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.tools.RangeTool.calculateLaunchVector;
|
import static com.atsuishio.superbwarfare.tools.RangeTool.calculateLaunchVector;
|
||||||
|
|
||||||
public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity, Container {
|
public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity, Container, LockTargetEntity {
|
||||||
|
|
||||||
public static final EntityDataAccessor<Integer> COOL_DOWN = SynchedEntityData.defineId(Mk42Entity.class, EntityDataSerializers.INT);
|
public static final EntityDataAccessor<Integer> COOL_DOWN = SynchedEntityData.defineId(Mk42Entity.class, EntityDataSerializers.INT);
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
|
@ -220,6 +221,7 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity
|
||||||
return super.interact(player, hand);
|
return super.interact(player, hand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean setTarget(ItemStack stack) {
|
public boolean setTarget(ItemStack stack) {
|
||||||
var parameters = stack.get(ModDataComponents.FIRING_PARAMETERS);
|
var parameters = stack.get(ModDataComponents.FIRING_PARAMETERS);
|
||||||
if (parameters == null) return false;
|
if (parameters == null) return false;
|
||||||
|
@ -258,6 +260,7 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void resetTarget() {
|
public void resetTarget() {
|
||||||
Vec3 randomPos = VectorTool.randomPos(new Vec3(entityData.get(TARGET_POS)), entityData.get(RADIUS));
|
Vec3 randomPos = VectorTool.randomPos(new Vec3(entityData.get(TARGET_POS)), entityData.get(RADIUS));
|
||||||
Vec3 launchVector = calculateLaunchVector(getEyePosition(), randomPos, 15, -shellGravity, entityData.get(DEPRESSED));
|
Vec3 launchVector = calculateLaunchVector(getEyePosition(), randomPos, 15, -shellGravity, entityData.get(DEPRESSED));
|
||||||
|
@ -272,7 +275,8 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void look(Vec3 pTarget) {
|
@Override
|
||||||
|
public void look(Vec3 pTarget) {
|
||||||
Matrix4f transform = getVehicleFlatTransform(1);
|
Matrix4f transform = getVehicleFlatTransform(1);
|
||||||
Vector4f worldPosition = transformPosition(transform, 0f, 2.16f, 0.5175f);
|
Vector4f worldPosition = transformPosition(transform, 0f, 2.16f, 0.5175f);
|
||||||
Vec3 shootPos = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z);
|
Vec3 shootPos = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z);
|
||||||
|
@ -445,7 +449,6 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void travel() {
|
public void travel() {
|
||||||
Entity passenger = this.getFirstPassenger();
|
Entity passenger = this.getFirstPassenger();
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.atsuishio.superbwarfare.component.ModDataComponents;
|
||||||
import com.atsuishio.superbwarfare.config.server.ExplosionConfig;
|
import com.atsuishio.superbwarfare.config.server.ExplosionConfig;
|
||||||
import com.atsuishio.superbwarfare.config.server.VehicleConfig;
|
import com.atsuishio.superbwarfare.config.server.VehicleConfig;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.CannonEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.CannonEntity;
|
||||||
|
import com.atsuishio.superbwarfare.entity.vehicle.base.LockTargetEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.ThirdPersonCameraPosition;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.ThirdPersonCameraPosition;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.damage.DamageModifier;
|
import com.atsuishio.superbwarfare.entity.vehicle.damage.DamageModifier;
|
||||||
|
@ -61,7 +62,7 @@ import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.tools.RangeTool.calculateLaunchVector;
|
import static com.atsuishio.superbwarfare.tools.RangeTool.calculateLaunchVector;
|
||||||
|
|
||||||
public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEntity, Container {
|
public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEntity, Container, LockTargetEntity {
|
||||||
|
|
||||||
public static final EntityDataAccessor<Integer> COOL_DOWN = SynchedEntityData.defineId(Mle1934Entity.class, EntityDataSerializers.INT);
|
public static final EntityDataAccessor<Integer> COOL_DOWN = SynchedEntityData.defineId(Mle1934Entity.class, EntityDataSerializers.INT);
|
||||||
public static final EntityDataAccessor<Integer> TYPE = SynchedEntityData.defineId(Mle1934Entity.class, EntityDataSerializers.INT);
|
public static final EntityDataAccessor<Integer> TYPE = SynchedEntityData.defineId(Mle1934Entity.class, EntityDataSerializers.INT);
|
||||||
|
@ -228,6 +229,7 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt
|
||||||
}
|
}
|
||||||
|
|
||||||
//这个炮仰角太低只能用低伸弹道
|
//这个炮仰角太低只能用低伸弹道
|
||||||
|
@Override
|
||||||
public boolean setTarget(ItemStack stack) {
|
public boolean setTarget(ItemStack stack) {
|
||||||
var parameters = stack.get(ModDataComponents.FIRING_PARAMETERS);
|
var parameters = stack.get(ModDataComponents.FIRING_PARAMETERS);
|
||||||
if (parameters == null) return false;
|
if (parameters == null) return false;
|
||||||
|
@ -266,6 +268,7 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void resetTarget() {
|
public void resetTarget() {
|
||||||
Vec3 randomPos = VectorTool.randomPos(new Vec3(entityData.get(TARGET_POS)), entityData.get(RADIUS));
|
Vec3 randomPos = VectorTool.randomPos(new Vec3(entityData.get(TARGET_POS)), entityData.get(RADIUS));
|
||||||
Vec3 launchVector = calculateLaunchVector(getEyePosition(), randomPos, 15, -shellGravity, entityData.get(DEPRESSED));
|
Vec3 launchVector = calculateLaunchVector(getEyePosition(), randomPos, 15, -shellGravity, entityData.get(DEPRESSED));
|
||||||
|
@ -280,7 +283,8 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void look(Vec3 pTarget) {
|
@Override
|
||||||
|
public void look(Vec3 pTarget) {
|
||||||
Matrix4f transform = getVehicleFlatTransform(1);
|
Matrix4f transform = getVehicleFlatTransform(1);
|
||||||
Vector4f worldPosition = transformPosition(transform, 0, 1.4992625f, 1.52065f);
|
Vector4f worldPosition = transformPosition(transform, 0, 1.4992625f, 1.52065f);
|
||||||
Vec3 shootPos = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z);
|
Vec3 shootPos = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z);
|
||||||
|
@ -291,10 +295,6 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getEyeY() {
|
|
||||||
return 2.16F;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void positionRider(@NotNull Entity passenger, @NotNull MoveFunction callback) {
|
public void positionRider(@NotNull Entity passenger, @NotNull MoveFunction callback) {
|
||||||
if (!this.hasPassenger(passenger)) {
|
if (!this.hasPassenger(passenger)) {
|
||||||
return;
|
return;
|
||||||
|
@ -354,7 +354,6 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt
|
||||||
setYRot(getYRot() + (float) interpolatedYaw / (float) interpolationSteps);
|
setYRot(getYRot() + (float) interpolatedYaw / (float) interpolationSteps);
|
||||||
setXRot(getXRot() + (float) (serverXRot - (double) getXRot()) / (float) interpolationSteps);
|
setXRot(getXRot() + (float) (serverXRot - (double) getXRot()) / (float) interpolationSteps);
|
||||||
setRot(getYRot(), getXRot());
|
setRot(getYRot(), getXRot());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -449,7 +448,6 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt
|
||||||
Mth.clamp(count--, 1, 5), 0.15, 0.15, 0.15, 0.0025);
|
Mth.clamp(count--, 1, 5), 0.15, 0.15, 0.15, 0.0025);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 右炮管
|
// 右炮管
|
||||||
if (salvoShoot) {
|
if (salvoShoot) {
|
||||||
var entityToSpawnRight = ((CannonShellWeapon) getWeapon(0)).create(player);
|
var entityToSpawnRight = ((CannonShellWeapon) getWeapon(0)).create(player);
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.atsuishio.superbwarfare.entity.vehicle;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.MortarShellEntity;
|
import com.atsuishio.superbwarfare.entity.projectile.MortarShellEntity;
|
||||||
|
import com.atsuishio.superbwarfare.entity.vehicle.base.LockTargetEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
||||||
import com.atsuishio.superbwarfare.init.ModEntities;
|
import com.atsuishio.superbwarfare.init.ModEntities;
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
|
@ -47,7 +48,8 @@ import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.tools.RangeTool.calculateLaunchVector;
|
import static com.atsuishio.superbwarfare.tools.RangeTool.calculateLaunchVector;
|
||||||
|
|
||||||
public class MortarEntity extends VehicleEntity implements GeoEntity, Container {
|
public class MortarEntity extends VehicleEntity implements GeoEntity, Container, LockTargetEntity {
|
||||||
|
|
||||||
public static final EntityDataAccessor<Integer> FIRE_TIME = SynchedEntityData.defineId(MortarEntity.class, EntityDataSerializers.INT);
|
public static final EntityDataAccessor<Integer> FIRE_TIME = SynchedEntityData.defineId(MortarEntity.class, EntityDataSerializers.INT);
|
||||||
public static final EntityDataAccessor<Float> PITCH = SynchedEntityData.defineId(MortarEntity.class, EntityDataSerializers.FLOAT);
|
public static final EntityDataAccessor<Float> PITCH = SynchedEntityData.defineId(MortarEntity.class, EntityDataSerializers.FLOAT);
|
||||||
public static final EntityDataAccessor<Float> YAW = SynchedEntityData.defineId(MortarEntity.class, EntityDataSerializers.FLOAT);
|
public static final EntityDataAccessor<Float> YAW = SynchedEntityData.defineId(MortarEntity.class, EntityDataSerializers.FLOAT);
|
||||||
|
@ -230,6 +232,7 @@ public class MortarEntity extends VehicleEntity implements GeoEntity, Container
|
||||||
return InteractionResult.FAIL;
|
return InteractionResult.FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean setTarget(ItemStack stack) {
|
public boolean setTarget(ItemStack stack) {
|
||||||
var parameters = stack.get(ModDataComponents.FIRING_PARAMETERS);
|
var parameters = stack.get(ModDataComponents.FIRING_PARAMETERS);
|
||||||
if (parameters == null) return false;
|
if (parameters == null) return false;
|
||||||
|
@ -263,6 +266,7 @@ public class MortarEntity extends VehicleEntity implements GeoEntity, Container
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void resetTarget() {
|
public void resetTarget() {
|
||||||
Vec3 randomPos = VectorTool.randomPos(new Vec3(entityData.get(TARGET_POS)), entityData.get(RADIUS));
|
Vec3 randomPos = VectorTool.randomPos(new Vec3(entityData.get(TARGET_POS)), entityData.get(RADIUS));
|
||||||
Vec3 launchVector = calculateLaunchVector(getEyePosition(), randomPos, 13, -0.11, entityData.get(DEPRESSED));
|
Vec3 launchVector = calculateLaunchVector(getEyePosition(), randomPos, 13, -0.11, entityData.get(DEPRESSED));
|
||||||
|
@ -277,8 +281,8 @@ public class MortarEntity extends VehicleEntity implements GeoEntity, Container
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
private void look(Vec3 pTarget) {
|
public void look(Vec3 pTarget) {
|
||||||
Vec3 vec3 = EntityAnchorArgument.Anchor.EYES.apply(this);
|
Vec3 vec3 = EntityAnchorArgument.Anchor.EYES.apply(this);
|
||||||
double d0 = (pTarget.x - vec3.x) * 0.2;
|
double d0 = (pTarget.x - vec3.x) * 0.2;
|
||||||
double d2 = (pTarget.z - vec3.z) * 0.2;
|
double d2 = (pTarget.z - vec3.z) * 0.2;
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.atsuishio.superbwarfare.entity.vehicle.base;
|
||||||
|
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
|
public interface LockTargetEntity {
|
||||||
|
|
||||||
|
boolean setTarget(ItemStack stack);
|
||||||
|
|
||||||
|
void resetTarget();
|
||||||
|
|
||||||
|
void look(Vec3 pTarget);
|
||||||
|
}
|
|
@ -2,6 +2,8 @@ package com.atsuishio.superbwarfare.item;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.client.TooltipTool;
|
import com.atsuishio.superbwarfare.client.TooltipTool;
|
||||||
import com.atsuishio.superbwarfare.client.screens.ArtilleryIndicatorScreen;
|
import com.atsuishio.superbwarfare.client.screens.ArtilleryIndicatorScreen;
|
||||||
|
import com.atsuishio.superbwarfare.entity.vehicle.base.LockTargetEntity;
|
||||||
|
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
||||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
|
@ -12,6 +14,7 @@ import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.sounds.SoundEvents;
|
import net.minecraft.sounds.SoundEvents;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResultHolder;
|
import net.minecraft.world.InteractionResultHolder;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.*;
|
import net.minecraft.world.item.*;
|
||||||
|
@ -132,4 +135,18 @@ public class ArtilleryIndicator extends Item implements ItemScreenProvider {
|
||||||
public @Nullable Screen getItemScreen(ItemStack stack, Player player, InteractionHand hand) {
|
public @Nullable Screen getItemScreen(ItemStack stack, Player player, InteractionHand hand) {
|
||||||
return new ArtilleryIndicatorScreen(stack, hand);
|
return new ArtilleryIndicatorScreen(stack, hand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setTarget(ItemStack stack, Player player) {
|
||||||
|
ListTag tags = NBTTool.getTag(stack).getList(TAG_CANNON, Tag.TAG_COMPOUND);
|
||||||
|
for (int i = 0; i < tags.size(); i++) {
|
||||||
|
var tag = tags.getCompound(i);
|
||||||
|
Entity entity = EntityFindUtil.findEntity(player.level(), tag.getString("UUID"));
|
||||||
|
if (entity instanceof LockTargetEntity lockTargetEntity) {
|
||||||
|
if (!lockTargetEntity.setTarget(stack)) {
|
||||||
|
player.displayClientMessage(Component.translatable("tips.superbwarfare.mortar.warn", entity.getDisplayName())
|
||||||
|
.withStyle(ChatFormatting.RED), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,11 +3,9 @@ package com.atsuishio.superbwarfare.network.message.send;
|
||||||
import com.atsuishio.superbwarfare.Mod;
|
import com.atsuishio.superbwarfare.Mod;
|
||||||
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.DroneEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.DroneEntity;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.Mk42Entity;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.Mle1934Entity;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.MortarEntity;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
|
import com.atsuishio.superbwarfare.item.ArtilleryIndicator;
|
||||||
import com.atsuishio.superbwarfare.item.FiringParameters;
|
import com.atsuishio.superbwarfare.item.FiringParameters;
|
||||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
||||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||||
|
@ -15,21 +13,16 @@ import com.atsuishio.superbwarfare.tools.SoundTool;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.nbt.ListTag;
|
|
||||||
import net.minecraft.nbt.Tag;
|
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.network.codec.ByteBufCodecs;
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
import net.minecraft.network.codec.StreamCodec;
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.item.ArtilleryIndicator.TAG_CANNON;
|
|
||||||
|
|
||||||
public record DroneFireMessage(Vector3f pos) implements CustomPacketPayload {
|
public record DroneFireMessage(Vector3f pos) implements CustomPacketPayload {
|
||||||
|
|
||||||
public static final Type<DroneFireMessage> TYPE = new Type<>(Mod.loc("drone_fire"));
|
public static final Type<DroneFireMessage> TYPE = new Type<>(Mod.loc("drone_fire"));
|
||||||
|
@ -66,28 +59,8 @@ public record DroneFireMessage(Vector3f pos) implements CustomPacketPayload {
|
||||||
|
|
||||||
SoundTool.playLocalSound(player, ModSounds.CANNON_ZOOM_IN.get(), 2, 1);
|
SoundTool.playLocalSound(player, ModSounds.CANNON_ZOOM_IN.get(), 2, 1);
|
||||||
|
|
||||||
if (offStack.is(ModItems.ARTILLERY_INDICATOR.get())) {
|
if (offStack.getItem() instanceof ArtilleryIndicator indicator) {
|
||||||
|
indicator.setTarget(offStack, player);
|
||||||
ListTag tags = NBTTool.getTag(offStack).getList(TAG_CANNON, Tag.TAG_COMPOUND);
|
|
||||||
for (int i = 0; i < tags.size(); i++) {
|
|
||||||
var tag = tags.getCompound(i);
|
|
||||||
Entity entity = EntityFindUtil.findEntity(player.level(), tag.getString("UUID"));
|
|
||||||
if (entity instanceof MortarEntity mortarEntity) {
|
|
||||||
if (!mortarEntity.setTarget(offStack)) {
|
|
||||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.mortar.warn").withStyle(ChatFormatting.RED), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (entity instanceof Mk42Entity mk42Entity) {
|
|
||||||
if (!mk42Entity.setTarget(offStack)) {
|
|
||||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.mk_42.warn").withStyle(ChatFormatting.RED), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (entity instanceof Mle1934Entity mle1934Entity) {
|
|
||||||
if (!mle1934Entity.setTarget(offStack)) {
|
|
||||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.mle_1934.warn").withStyle(ChatFormatting.RED), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
drone.fire = true;
|
drone.fire = true;
|
||||||
|
|
|
@ -2,29 +2,18 @@ package com.atsuishio.superbwarfare.network.message.send;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.Mod;
|
import com.atsuishio.superbwarfare.Mod;
|
||||||
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.Mk42Entity;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.Mle1934Entity;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.MortarEntity;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
|
import com.atsuishio.superbwarfare.item.ArtilleryIndicator;
|
||||||
import com.atsuishio.superbwarfare.item.FiringParameters;
|
import com.atsuishio.superbwarfare.item.FiringParameters;
|
||||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
|
||||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.ChatFormatting;
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.nbt.ListTag;
|
|
||||||
import net.minecraft.nbt.Tag;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.network.codec.ByteBufCodecs;
|
import net.minecraft.network.codec.ByteBufCodecs;
|
||||||
import net.minecraft.network.codec.StreamCodec;
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
import net.neoforged.neoforge.network.handling.IPayloadContext;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.item.ArtilleryIndicator.TAG_CANNON;
|
|
||||||
|
|
||||||
public record FiringParametersEditMessage(
|
public record FiringParametersEditMessage(
|
||||||
int x, int y, int z,
|
int x, int y, int z,
|
||||||
int radius, boolean isDepressed, boolean mainHand
|
int radius, boolean isDepressed, boolean mainHand
|
||||||
|
@ -50,25 +39,8 @@ public record FiringParametersEditMessage(
|
||||||
var parameters = new FiringParameters.Parameters(new BlockPos(message.x, message.y, message.z), message.radius, message.isDepressed);
|
var parameters = new FiringParameters.Parameters(new BlockPos(message.x, message.y, message.z), message.radius, message.isDepressed);
|
||||||
stack.set(ModDataComponents.FIRING_PARAMETERS, parameters);
|
stack.set(ModDataComponents.FIRING_PARAMETERS, parameters);
|
||||||
|
|
||||||
ListTag tags = NBTTool.getTag(stack).getList(TAG_CANNON, Tag.TAG_COMPOUND);
|
if (stack.getItem() instanceof ArtilleryIndicator indicator) {
|
||||||
for (int i = 0; i < tags.size(); i++) {
|
indicator.setTarget(stack, player);
|
||||||
var tag = tags.getCompound(i);
|
|
||||||
Entity entity = EntityFindUtil.findEntity(player.level(), tag.getString("UUID"));
|
|
||||||
if (entity instanceof MortarEntity mortarEntity) {
|
|
||||||
if (!mortarEntity.setTarget(stack)) {
|
|
||||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.mortar.warn").withStyle(ChatFormatting.RED), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (entity instanceof Mk42Entity mk42Entity) {
|
|
||||||
if (!mk42Entity.setTarget(stack)) {
|
|
||||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.mk_42.warn").withStyle(ChatFormatting.RED), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (entity instanceof Mle1934Entity mle1934Entity) {
|
|
||||||
if (!mle1934Entity.setTarget(stack)) {
|
|
||||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.mle_1934.warn").withStyle(ChatFormatting.RED), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,21 +2,15 @@ package com.atsuishio.superbwarfare.network.message.send;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.Mod;
|
import com.atsuishio.superbwarfare.Mod;
|
||||||
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.Mk42Entity;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.Mle1934Entity;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.MortarEntity;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
|
import com.atsuishio.superbwarfare.item.ArtilleryIndicator;
|
||||||
import com.atsuishio.superbwarfare.item.FiringParameters;
|
import com.atsuishio.superbwarfare.item.FiringParameters;
|
||||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
|
||||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
|
||||||
import com.atsuishio.superbwarfare.tools.SoundTool;
|
import com.atsuishio.superbwarfare.tools.SoundTool;
|
||||||
import com.atsuishio.superbwarfare.tools.TraceTool;
|
import com.atsuishio.superbwarfare.tools.TraceTool;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.nbt.ListTag;
|
|
||||||
import net.minecraft.nbt.Tag;
|
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.network.codec.StreamCodec;
|
import net.minecraft.network.codec.StreamCodec;
|
||||||
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
|
||||||
|
@ -31,8 +25,6 @@ import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.item.ArtilleryIndicator.TAG_CANNON;
|
|
||||||
|
|
||||||
public enum SetFiringParametersMessage implements CustomPacketPayload {
|
public enum SetFiringParametersMessage implements CustomPacketPayload {
|
||||||
INSTANCE;
|
INSTANCE;
|
||||||
public static final Type<SetFiringParametersMessage> TYPE = new Type<>(Mod.loc("set_firing_parameters"));
|
public static final Type<SetFiringParametersMessage> TYPE = new Type<>(Mod.loc("set_firing_parameters"));
|
||||||
|
@ -74,7 +66,7 @@ public enum SetFiringParametersMessage implements CustomPacketPayload {
|
||||||
+ "]")), true);
|
+ "]")), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mainStack.is(ModItems.ARTILLERY_INDICATOR.get())) {
|
if (mainStack.getItem() instanceof ArtilleryIndicator indicator) {
|
||||||
BlockPos pos;
|
BlockPos pos;
|
||||||
if (lookAtEntity) {
|
if (lookAtEntity) {
|
||||||
pos = lookingEntity.blockPosition();
|
pos = lookingEntity.blockPosition();
|
||||||
|
@ -91,26 +83,7 @@ public enum SetFiringParametersMessage implements CustomPacketPayload {
|
||||||
+ "]")), true);
|
+ "]")), true);
|
||||||
SoundTool.playLocalSound(player, ModSounds.CANNON_ZOOM_IN.get(), 2, 1);
|
SoundTool.playLocalSound(player, ModSounds.CANNON_ZOOM_IN.get(), 2, 1);
|
||||||
|
|
||||||
ListTag tags = NBTTool.getTag(mainStack).getList(TAG_CANNON, Tag.TAG_COMPOUND);
|
indicator.setTarget(mainStack, player);
|
||||||
for (int i = 0; i < tags.size(); i++) {
|
|
||||||
var tag = tags.getCompound(i);
|
|
||||||
Entity entity = EntityFindUtil.findEntity(player.level(), tag.getString("UUID"));
|
|
||||||
if (entity instanceof MortarEntity mortarEntity) {
|
|
||||||
if (!mortarEntity.setTarget(mainStack)) {
|
|
||||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.mortar.warn").withStyle(ChatFormatting.RED), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (entity instanceof Mk42Entity mk42Entity) {
|
|
||||||
if (!mk42Entity.setTarget(mainStack)) {
|
|
||||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.mk_42.warn").withStyle(ChatFormatting.RED), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (entity instanceof Mle1934Entity mle1934Entity) {
|
|
||||||
if (!mle1934Entity.setTarget(mainStack)) {
|
|
||||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.mle_1934.warn").withStyle(ChatFormatting.RED), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -584,9 +584,7 @@
|
||||||
"tips.superbwarfare.mortar.target_pos.radius": "Hit Radius: %1$s",
|
"tips.superbwarfare.mortar.target_pos.radius": "Hit Radius: %1$s",
|
||||||
"tips.superbwarfare.mortar.target_pos.depressed_trajectory": "Depressed Trajectory",
|
"tips.superbwarfare.mortar.target_pos.depressed_trajectory": "Depressed Trajectory",
|
||||||
"tips.superbwarfare.mortar.target_pos.lofted_trajectory": "Lofted Trajectory",
|
"tips.superbwarfare.mortar.target_pos.lofted_trajectory": "Lofted Trajectory",
|
||||||
"tips.superbwarfare.mortar.warn": "This mortar cannot aim at this position",
|
"tips.superbwarfare.mortar.warn": "%1$s cannot aim at this position",
|
||||||
"tips.superbwarfare.mk_42.warn": "MK_42 cannot aim at this position",
|
|
||||||
"tips.superbwarfare.mle_1934.warn": "Mle_1934 cannot aim at this position",
|
|
||||||
|
|
||||||
"container.superbwarfare.reforging_table": "Gun Reforge Table",
|
"container.superbwarfare.reforging_table": "Gun Reforge Table",
|
||||||
"container.superbwarfare.charging_station": "Charging Station",
|
"container.superbwarfare.charging_station": "Charging Station",
|
||||||
|
|
|
@ -311,6 +311,7 @@
|
||||||
"des.superbwarfare.vehicle_deployer.fail": "请使用集装箱点击!",
|
"des.superbwarfare.vehicle_deployer.fail": "请使用集装箱点击!",
|
||||||
"block.superbwarfare.aircraft_catapult": "飞行器弹射装置",
|
"block.superbwarfare.aircraft_catapult": "飞行器弹射装置",
|
||||||
"block.superbwarfare.superb_item_interface": "卓越物品接口",
|
"block.superbwarfare.superb_item_interface": "卓越物品接口",
|
||||||
|
"des.superbwarfare.superb_item_interface": "可快速给指向实体传输物品的全方向漏斗",
|
||||||
|
|
||||||
"item.superbwarfare.high_energy_explosives": "高能炸药",
|
"item.superbwarfare.high_energy_explosives": "高能炸药",
|
||||||
"item.superbwarfare.grain": "推进药柱",
|
"item.superbwarfare.grain": "推进药柱",
|
||||||
|
@ -583,16 +584,13 @@
|
||||||
"tips.superbwarfare.mortar.target_pos.radius": "打击半径:%1$s",
|
"tips.superbwarfare.mortar.target_pos.radius": "打击半径:%1$s",
|
||||||
"tips.superbwarfare.mortar.target_pos.depressed_trajectory": "低伸弹道",
|
"tips.superbwarfare.mortar.target_pos.depressed_trajectory": "低伸弹道",
|
||||||
"tips.superbwarfare.mortar.target_pos.lofted_trajectory": "传统弹道",
|
"tips.superbwarfare.mortar.target_pos.lofted_trajectory": "传统弹道",
|
||||||
"tips.superbwarfare.mortar.warn": "迫击炮无法瞄准该位置",
|
"tips.superbwarfare.mortar.warn": "%1$s无法瞄准该位置",
|
||||||
"tips.superbwarfare.mk_42.warn": "MK-42无法瞄准该位置",
|
|
||||||
"tips.superbwarfare.mle_1934.warn": "MLE-1934无法瞄准该位置",
|
|
||||||
|
|
||||||
"container.superbwarfare.reforging_table": "枪械重铸台",
|
"container.superbwarfare.reforging_table": "枪械重铸台",
|
||||||
"container.superbwarfare.charging_station": "充电站",
|
"container.superbwarfare.charging_station": "充电站",
|
||||||
"container.superbwarfare.charging_station.show_range": "显示范围",
|
"container.superbwarfare.charging_station.show_range": "显示范围",
|
||||||
"container.superbwarfare.charging_station.hide_range": "隐藏范围",
|
"container.superbwarfare.charging_station.hide_range": "隐藏范围",
|
||||||
"container.superbwarfare.superb_item_interface": "卓越物品接口",
|
"container.superbwarfare.superb_item_interface": "卓越物品接口",
|
||||||
"des.superbwarfare.superb_item_interface": "可快速给指向实体传输物品的全方向漏斗",
|
|
||||||
|
|
||||||
"config.superbwarfare.title": "卓越前线",
|
"config.superbwarfare.title": "卓越前线",
|
||||||
"config.superbwarfare.client.reload": "换弹配置",
|
"config.superbwarfare.client.reload": "换弹配置",
|
||||||
|
|
Loading…
Add table
Reference in a new issue