修改无人机最大距离的设定

This commit is contained in:
17146 2024-07-25 19:46:24 +08:00
parent dbd6d834bd
commit 5846c2017c
5 changed files with 76 additions and 11 deletions

View file

@ -107,6 +107,7 @@ public class TargetMod {
addNetworkMessage(InteractMessage.class, InteractMessage::encode, InteractMessage::decode, InteractMessage::handler);
addNetworkMessage(DroneMovementMessage.class, DroneMovementMessage::encode, DroneMovementMessage::decode, DroneMovementMessage::handler);
addNetworkMessage(DroneFireMessage.class, DroneFireMessage::buffer, DroneFireMessage::new, DroneFireMessage::handler);
addNetworkMessage(SimulationDistanceMessage.class, SimulationDistanceMessage::encode, SimulationDistanceMessage::decode, SimulationDistanceMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
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), TargetModPotion.SHOCK.get())));

View file

@ -21,8 +21,8 @@ import static net.mcreator.target.entity.DroneEntity.AMMO;
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class DroneUIOverlay {
public static int MAX_DISTANCE = 256;
private static int color = -1;
@SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) {
int w = event.getWindow().getGuiScaledWidth();
@ -44,18 +44,19 @@ public class DroneUIOverlay {
if (entity != null) {
double distance = player.distanceTo(entity);
if (distance > 450) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font,"WARNING", w / 2 + -18, h / 2 + -47, -65536, false);
int color = -1;
event.getGuiGraphics().drawString(Minecraft.getInstance().font, "MaxDistance:" + new DecimalFormat("##.#").format(MAX_DISTANCE) + "M", w / 2 + 10, h / 2 + 50, color, false);
if (distance > MAX_DISTANCE) {
event.getGuiGraphics().drawString(Minecraft.getInstance().font, "WARNING", w / 2 + -18, h / 2 + -47, -65536, false);
color = -65536;
} else {
color = -1;
}
event.getGuiGraphics().drawString(Minecraft.getInstance().font,"Distance:" + new DecimalFormat("##.#").format(distance) + "M", w / 2 + 10, h / 2 + 33, color, false);
event.getGuiGraphics().drawString(Minecraft.getInstance().font,"Health:" + new DecimalFormat("##.#").format(entity.getHealth()) + "/" + new DecimalFormat("##").format(entity.getMaxHealth()), w / 2 - 77, h / 2 + 33, -1, false);
event.getGuiGraphics().drawString(Minecraft.getInstance().font,"AMMO:" + new DecimalFormat("##.#").format(entity.getEntityData().get(AMMO)) + " / 6", w / 2 + 12, h / 2 + -37, -1, false);
event.getGuiGraphics().drawString(Minecraft.getInstance().font, "Distance:" + new DecimalFormat("##.#").format(distance) + "M", w / 2 + 10, h / 2 + 33, color, false);
event.getGuiGraphics().drawString(Minecraft.getInstance().font, "Health:" + new DecimalFormat("##.#").format(entity.getHealth()) + "/" + new DecimalFormat("##").format(entity.getMaxHealth()), w / 2 - 77, h / 2 + 33, -1, false);
event.getGuiGraphics().drawString(Minecraft.getInstance().font, "AMMO:" + new DecimalFormat("##.#").format(entity.getEntityData().get(AMMO)) + " / 6", w / 2 + 12, h / 2 + -37, -1, false);
}
}
RenderSystem.depthMask(true);
RenderSystem.defaultBlendFunc();

View file

@ -1,14 +1,18 @@
package net.mcreator.target.event;
import net.mcreator.target.TargetMod;
import net.mcreator.target.init.TargetModAttributes;
import net.mcreator.target.init.TargetModItems;
import net.mcreator.target.init.TargetModSounds;
import net.mcreator.target.init.TargetModTags;
import net.mcreator.target.network.TargetModVariables;
import net.mcreator.target.network.message.SimulationDistanceMessage;
import net.mcreator.target.tools.SoundTool;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.DistanceManager;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
@ -22,6 +26,10 @@ import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
import net.minecraftforge.network.PacketDistributor;
import java.lang.reflect.Field;
@Mod.EventBusSubscriber
public class PlayerEventHandler {
@ -73,7 +81,9 @@ public class PlayerEventHandler {
handleBocekPulling(player);
handleGunRecoil(player);
}
handleDistantRange(player);
handleSimulationDistance(player);
if ((player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).cannonFiring > 0) {
player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
@ -314,7 +324,7 @@ public class PlayerEventHandler {
capability.firing = 1;
capability.syncPlayerVariables(player);
});
tag.putBoolean("shoot",false);
tag.putBoolean("shoot", false);
}
/*
@ -448,4 +458,19 @@ public class PlayerEventHandler {
recoilThread.start();
}
private static void handleSimulationDistance(Player player) {
if (player.level() instanceof ServerLevel serverLevel && player instanceof ServerPlayer serverPlayer) {
int maxDistance;
Class<?> clazz = DistanceManager.class;
try {
Field field = ObfuscationReflectionHelper.findField(clazz, "simulationDistance");
field.setAccessible(true);
maxDistance = field.getInt(serverLevel.getChunkSource().chunkMap.getDistanceManager());
} catch (IllegalAccessException e) {
maxDistance = 16;
}
TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new SimulationDistanceMessage(maxDistance));
}
}
}

View file

@ -1,6 +1,7 @@
package net.mcreator.target.network;
import net.mcreator.target.client.screens.CrossHairOverlay;
import net.mcreator.target.client.screens.DroneUIOverlay;
import net.mcreator.target.event.KillMessageHandler;
import net.mcreator.target.network.message.ClientIndicatorMessage;
import net.mcreator.target.network.message.GunsDataMessage;
@ -41,4 +42,10 @@ public class ClientPacketHandler {
}
}
}
public static void handleSimulationDistanceMessage(int distance, Supplier<NetworkEvent.Context> ctx) {
if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) {
DroneUIOverlay.MAX_DISTANCE = distance * 16;
}
}
}

View file

@ -0,0 +1,31 @@
package net.mcreator.target.network.message;
import net.mcreator.target.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 SimulationDistanceMessage {
public int distance;
public SimulationDistanceMessage(int distance) {
this.distance = distance;
}
public static void encode(SimulationDistanceMessage message, FriendlyByteBuf buffer) {
buffer.writeInt(message.distance);
}
public static SimulationDistanceMessage decode(FriendlyByteBuf buffer) {
return new SimulationDistanceMessage(buffer.readInt());
}
public static void handle(SimulationDistanceMessage message, Supplier<NetworkEvent.Context> context) {
context.get().enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT,
() -> () -> ClientPacketHandler.handleSimulationDistanceMessage(message.distance, context)));
context.get().setPacketHandled(true);
}
}