修改无人机最大距离的设定
This commit is contained in:
parent
dbd6d834bd
commit
5846c2017c
5 changed files with 76 additions and 11 deletions
|
@ -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())));
|
||||
|
|
|
@ -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) {
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
RenderSystem.depthMask(true);
|
||||
RenderSystem.defaultBlendFunc();
|
||||
|
|
|
@ -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 -> {
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue