修复无人机视角重置问题
This commit is contained in:
parent
48439a2d6c
commit
076255440d
9 changed files with 74 additions and 26 deletions
|
@ -168,6 +168,7 @@ public class ModUtils {
|
||||||
addNetworkMessage(AimVillagerMessage.class, AimVillagerMessage::encode, AimVillagerMessage::decode, AimVillagerMessage::handler);
|
addNetworkMessage(AimVillagerMessage.class, AimVillagerMessage::encode, AimVillagerMessage::decode, AimVillagerMessage::handler);
|
||||||
addNetworkMessage(ShowChargingRangeMessage.class, ShowChargingRangeMessage::encode, ShowChargingRangeMessage::decode, ShowChargingRangeMessage::handler);
|
addNetworkMessage(ShowChargingRangeMessage.class, ShowChargingRangeMessage::encode, ShowChargingRangeMessage::decode, ShowChargingRangeMessage::handler);
|
||||||
addNetworkMessage(MeleeAttackMessage.class, MeleeAttackMessage::encode, MeleeAttackMessage::decode, MeleeAttackMessage::handler);
|
addNetworkMessage(MeleeAttackMessage.class, MeleeAttackMessage::encode, MeleeAttackMessage::decode, MeleeAttackMessage::handler);
|
||||||
|
addNetworkMessage(ResetCameraTypeMessage.class, ResetCameraTypeMessage::encode, ResetCameraTypeMessage::decode, ResetCameraTypeMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
||||||
|
|
||||||
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)),
|
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)),
|
||||||
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get())));
|
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get())));
|
||||||
|
|
|
@ -530,12 +530,18 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Player controller = EntityFindUtil.findPlayer(this.level(), this.entityData.get(CONTROLLER));
|
||||||
|
if (controller != null) {
|
||||||
|
if (controller.getMainHandItem().is(ModItems.MONITOR.get())) {
|
||||||
|
Monitor.disLink(controller.getMainHandItem(), controller);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (this.entityData.get(KAMIKAZE_MODE) != 0) {
|
if (this.entityData.get(KAMIKAZE_MODE) != 0) {
|
||||||
kamikazeExplosion(this.entityData.get(KAMIKAZE_MODE));
|
kamikazeExplosion(this.entityData.get(KAMIKAZE_MODE));
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack stack = new ItemStack(ModItems.RGO_GRENADE.get(), this.entityData.get(AMMO));
|
ItemStack stack = new ItemStack(ModItems.RGO_GRENADE.get(), this.entityData.get(AMMO));
|
||||||
|
|
||||||
if (this.level() instanceof ServerLevel level) {
|
if (this.level() instanceof ServerLevel level) {
|
||||||
ItemEntity itemEntity = new ItemEntity(level, this.getX(), this.getY(), this.getZ(), stack);
|
ItemEntity itemEntity = new ItemEntity(level, this.getX(), this.getY(), this.getZ(), stack);
|
||||||
itemEntity.setPickUpDelay(10);
|
itemEntity.setPickUpDelay(10);
|
||||||
|
@ -546,17 +552,8 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity {
|
||||||
level().explode(null, this.getX(), this.getY(), this.getZ(), 0, Level.ExplosionInteraction.NONE);
|
level().explode(null, this.getX(), this.getY(), this.getZ(), 0, Level.ExplosionInteraction.NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
Player controller = EntityFindUtil.findPlayer(this.level(), this.entityData.get(CONTROLLER));
|
|
||||||
if (controller != null) {
|
|
||||||
if (controller.getMainHandItem().is(ModItems.MONITOR.get())) {
|
|
||||||
Monitor.disLink(controller.getMainHandItem(), controller);
|
|
||||||
this.discard();
|
this.discard();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
this.discard();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void kamikazeExplosion(int mode) {
|
private void kamikazeExplosion(int mode) {
|
||||||
Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID));
|
Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID));
|
||||||
|
|
|
@ -153,6 +153,8 @@ public class ClientEventHandler {
|
||||||
public static int dismountCountdown = 0;
|
public static int dismountCountdown = 0;
|
||||||
public static int aimVillagerCountdown = 0;
|
public static int aimVillagerCountdown = 0;
|
||||||
|
|
||||||
|
public static CameraType lastCameraType;
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void handleWeaponTurn(RenderHandEvent event) {
|
public static void handleWeaponTurn(RenderHandEvent event) {
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package com.atsuishio.superbwarfare.item;
|
package com.atsuishio.superbwarfare.item;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.ModUtils;
|
||||||
import com.atsuishio.superbwarfare.entity.DroneEntity;
|
import com.atsuishio.superbwarfare.entity.DroneEntity;
|
||||||
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
|
import com.atsuishio.superbwarfare.network.message.ResetCameraTypeMessage;
|
||||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
||||||
import com.atsuishio.superbwarfare.tools.ItemNBTTool;
|
import com.atsuishio.superbwarfare.tools.ItemNBTTool;
|
||||||
import com.google.common.collect.ImmutableMultimap;
|
import com.google.common.collect.ImmutableMultimap;
|
||||||
|
@ -9,6 +12,7 @@ import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.client.CameraType;
|
import net.minecraft.client.CameraType;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
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.Entity;
|
||||||
|
@ -24,12 +28,13 @@ import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import net.minecraftforge.network.PacketDistributor;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Monitor extends Item {
|
public class Monitor extends Item {
|
||||||
private static CameraType lastCameraType;
|
|
||||||
public static final String LINKED = "Linked";
|
public static final String LINKED = "Linked";
|
||||||
public static final String LINKED_DRONE = "LinkedDrone";
|
public static final String LINKED_DRONE = "LinkedDrone";
|
||||||
|
|
||||||
|
@ -45,10 +50,8 @@ public class Monitor extends Item {
|
||||||
public static void disLink(ItemStack itemstack, Player player) {
|
public static void disLink(ItemStack itemstack, Player player) {
|
||||||
ItemNBTTool.setBoolean(itemstack, LINKED, false);
|
ItemNBTTool.setBoolean(itemstack, LINKED, false);
|
||||||
itemstack.getOrCreateTag().putString(LINKED_DRONE, "none");
|
itemstack.getOrCreateTag().putString(LINKED_DRONE, "none");
|
||||||
if (player.level().isClientSide) {
|
if (player instanceof ServerPlayer serverPlayer) {
|
||||||
if (lastCameraType != null) {
|
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ResetCameraTypeMessage(0));
|
||||||
Minecraft.getInstance().options.setCameraType(lastCameraType);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,14 +77,14 @@ public class Monitor extends Item {
|
||||||
if (stack.getOrCreateTag().getBoolean("Using")) {
|
if (stack.getOrCreateTag().getBoolean("Using")) {
|
||||||
stack.getOrCreateTag().putBoolean("Using", false);
|
stack.getOrCreateTag().putBoolean("Using", false);
|
||||||
if (world.isClientSide) {
|
if (world.isClientSide) {
|
||||||
if (lastCameraType != null) {
|
if (ClientEventHandler.lastCameraType != null) {
|
||||||
Minecraft.getInstance().options.setCameraType(lastCameraType);
|
Minecraft.getInstance().options.setCameraType(ClientEventHandler.lastCameraType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
stack.getOrCreateTag().putBoolean("Using", true);
|
stack.getOrCreateTag().putBoolean("Using", true);
|
||||||
if (world.isClientSide) {
|
if (world.isClientSide) {
|
||||||
lastCameraType = Minecraft.getInstance().options.getCameraType();
|
ClientEventHandler.lastCameraType = Minecraft.getInstance().options.getCameraType();
|
||||||
Minecraft.getInstance().options.setCameraType(CameraType.THIRD_PERSON_BACK);
|
Minecraft.getInstance().options.setCameraType(CameraType.THIRD_PERSON_BACK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -121,7 +124,7 @@ public class Monitor extends Item {
|
||||||
|
|
||||||
Vec3 droneVec = new Vec3(stack.getOrCreateTag().getDouble("PosX"), stack.getOrCreateTag().getDouble("PosY"), stack.getOrCreateTag().getDouble("PosZ"));
|
Vec3 droneVec = new Vec3(stack.getOrCreateTag().getDouble("PosX"), stack.getOrCreateTag().getDouble("PosY"), stack.getOrCreateTag().getDouble("PosZ"));
|
||||||
|
|
||||||
list.add(Component.translatable("des.superbwarfare.monitor",new DecimalFormat("##.#").format(player.position().distanceTo(droneVec)) + "m").withStyle(ChatFormatting.GRAY));
|
list.add(Component.translatable("des.superbwarfare.monitor", new DecimalFormat("##.#").format(player.position().distanceTo(droneVec)) + "m").withStyle(ChatFormatting.GRAY));
|
||||||
list.add(Component.literal("X: " + new DecimalFormat("##.#").format(droneVec.x) +
|
list.add(Component.literal("X: " + new DecimalFormat("##.#").format(droneVec.x) +
|
||||||
" Y: " + new DecimalFormat("##.#").format(droneVec.y) +
|
" Y: " + new DecimalFormat("##.#").format(droneVec.y) +
|
||||||
" Z: " + new DecimalFormat("##.#").format(droneVec.z)
|
" Z: " + new DecimalFormat("##.#").format(droneVec.z)
|
||||||
|
@ -142,8 +145,8 @@ public class Monitor extends Item {
|
||||||
if (itemstack.getOrCreateTag().getBoolean("Using")) {
|
if (itemstack.getOrCreateTag().getBoolean("Using")) {
|
||||||
itemstack.getOrCreateTag().putBoolean("Using", false);
|
itemstack.getOrCreateTag().putBoolean("Using", false);
|
||||||
if (entity.level().isClientSide) {
|
if (entity.level().isClientSide) {
|
||||||
if (lastCameraType != null) {
|
if (ClientEventHandler.lastCameraType != null) {
|
||||||
Minecraft.getInstance().options.setCameraType(lastCameraType);
|
Minecraft.getInstance().options.setCameraType(ClientEventHandler.lastCameraType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -152,8 +155,8 @@ public class Monitor extends Item {
|
||||||
if (itemstack.getOrCreateTag().getBoolean("Using")) {
|
if (itemstack.getOrCreateTag().getBoolean("Using")) {
|
||||||
itemstack.getOrCreateTag().putBoolean("Using", false);
|
itemstack.getOrCreateTag().putBoolean("Using", false);
|
||||||
if (entity.level().isClientSide) {
|
if (entity.level().isClientSide) {
|
||||||
if (lastCameraType != null) {
|
if (ClientEventHandler.lastCameraType != null) {
|
||||||
Minecraft.getInstance().options.setCameraType(lastCameraType);
|
Minecraft.getInstance().options.setCameraType(ClientEventHandler.lastCameraType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay;
|
||||||
import com.atsuishio.superbwarfare.client.overlay.DroneUIOverlay;
|
import com.atsuishio.superbwarfare.client.overlay.DroneUIOverlay;
|
||||||
import com.atsuishio.superbwarfare.client.screens.FuMO25ScreenHelper;
|
import com.atsuishio.superbwarfare.client.screens.FuMO25ScreenHelper;
|
||||||
import com.atsuishio.superbwarfare.config.client.KillMessageConfig;
|
import com.atsuishio.superbwarfare.config.client.KillMessageConfig;
|
||||||
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
import com.atsuishio.superbwarfare.event.KillMessageHandler;
|
import com.atsuishio.superbwarfare.event.KillMessageHandler;
|
||||||
import com.atsuishio.superbwarfare.menu.EnergyMenu;
|
import com.atsuishio.superbwarfare.menu.EnergyMenu;
|
||||||
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
|
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
|
||||||
|
@ -12,6 +13,7 @@ import com.atsuishio.superbwarfare.network.message.GunsDataMessage;
|
||||||
import com.atsuishio.superbwarfare.network.message.RadarMenuOpenMessage;
|
import com.atsuishio.superbwarfare.network.message.RadarMenuOpenMessage;
|
||||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||||
import com.atsuishio.superbwarfare.tools.PlayerKillRecord;
|
import com.atsuishio.superbwarfare.tools.PlayerKillRecord;
|
||||||
|
import net.minecraft.client.CameraType;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.world.damagesource.DamageType;
|
import net.minecraft.world.damagesource.DamageType;
|
||||||
|
@ -21,6 +23,7 @@ import net.minecraftforge.fml.LogicalSide;
|
||||||
import net.minecraftforge.network.NetworkEvent;
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class ClientPacketHandler {
|
public class ClientPacketHandler {
|
||||||
|
@ -74,4 +77,14 @@ public class ClientPacketHandler {
|
||||||
FuMO25ScreenHelper.resetEntities();
|
FuMO25ScreenHelper.resetEntities();
|
||||||
FuMO25ScreenHelper.pos = null;
|
FuMO25ScreenHelper.pos = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void handleResetCameraType(Supplier<NetworkEvent.Context> ctx) {
|
||||||
|
if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) {
|
||||||
|
Minecraft minecraft = Minecraft.getInstance();
|
||||||
|
Player player = minecraft.player;
|
||||||
|
if (player == null) return;
|
||||||
|
|
||||||
|
Minecraft.getInstance().options.setCameraType(Objects.requireNonNullElse(ClientEventHandler.lastCameraType, CameraType.FIRST_PERSON));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.atsuishio.superbwarfare.network.message;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.network.ClientPacketHandler;
|
||||||
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class ResetCameraTypeMessage {
|
||||||
|
|
||||||
|
private final int type;
|
||||||
|
|
||||||
|
public ResetCameraTypeMessage(int type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void encode(ResetCameraTypeMessage message, FriendlyByteBuf buffer) {
|
||||||
|
buffer.writeInt(message.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ResetCameraTypeMessage decode(FriendlyByteBuf buffer) {
|
||||||
|
return new ResetCameraTypeMessage(buffer.readInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handler(ResetCameraTypeMessage message, Supplier<NetworkEvent.Context> ctx) {
|
||||||
|
ctx.get().enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
|
||||||
|
() -> () -> ClientPacketHandler.handleResetCameraType(ctx)));
|
||||||
|
ctx.get().setPacketHandled(true);
|
||||||
|
}
|
||||||
|
}
|
|
@ -387,7 +387,7 @@
|
||||||
"entity.superbwarfare.mortar": "Mortar",
|
"entity.superbwarfare.mortar": "Mortar",
|
||||||
"entity.superbwarfare.target": "Target",
|
"entity.superbwarfare.target": "Target",
|
||||||
"entity.superbwarfare.claymore": "Claymore",
|
"entity.superbwarfare.claymore": "Claymore",
|
||||||
"entity.superbwarfare.explosive": "C4",
|
"entity.superbwarfare.c4": "C4",
|
||||||
"entity.superbwarfare.senpai": "Senpai",
|
"entity.superbwarfare.senpai": "Senpai",
|
||||||
"entity.superbwarfare.mk_42": "5''/54 Mk42",
|
"entity.superbwarfare.mk_42": "5''/54 Mk42",
|
||||||
"entity.superbwarfare.mle_1934": "138.6mm50 Mle1934 R1938",
|
"entity.superbwarfare.mle_1934": "138.6mm50 Mle1934 R1938",
|
||||||
|
|
|
@ -385,7 +385,7 @@
|
||||||
"entity.superbwarfare.mortar": "迫击炮",
|
"entity.superbwarfare.mortar": "迫击炮",
|
||||||
"entity.superbwarfare.target": "标靶",
|
"entity.superbwarfare.target": "标靶",
|
||||||
"entity.superbwarfare.claymore": "阔剑地雷",
|
"entity.superbwarfare.claymore": "阔剑地雷",
|
||||||
"entity.superbwarfare.explosive": "C4",
|
"entity.superbwarfare.c4": "C4",
|
||||||
"entity.superbwarfare.senpai": "野兽先辈",
|
"entity.superbwarfare.senpai": "野兽先辈",
|
||||||
"entity.superbwarfare.mk_42": "5''/54 Mk42",
|
"entity.superbwarfare.mk_42": "5''/54 Mk42",
|
||||||
"entity.superbwarfare.mle_1934": "138.6mm50 Mle1934 R1938",
|
"entity.superbwarfare.mle_1934": "138.6mm50 Mle1934 R1938",
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"result": {
|
"result": {
|
||||||
"item": "superbwarfare:c4_mine",
|
"item": "superbwarfare:c4_bomb",
|
||||||
"count": 1
|
"count": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue