Fix a client crash
This commit is contained in:
parent
6a4250e601
commit
4101ff70be
3 changed files with 42 additions and 12 deletions
|
@ -48,7 +48,7 @@ mod_name=Thresholds
|
||||||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||||
mod_license=GPLv3
|
mod_license=GPLv3
|
||||||
# The mod version. See https://semver.org/
|
# The mod version. See https://semver.org/
|
||||||
mod_version=1201.4.030424.1722
|
mod_version=1201.4.030424.1750
|
||||||
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
||||||
# This should match the base package used for the mod sources.
|
# This should match the base package used for the mod sources.
|
||||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class ClientEvents {
|
||||||
lvl = entity.getLevel();
|
lvl = entity.getLevel();
|
||||||
ResourceLocation location = lvl.dimension().location();
|
ResourceLocation location = lvl.dimension().location();
|
||||||
|
|
||||||
ModMessages.sendToServer(new EnergyRequestC2SPacket(new WorldPosition(new Vector3(pos.getX(), pos.getY(), pos.getZ()), location.getNamespace() + ":" + location.getPath()), Minecraft.getInstance().player));
|
ModMessages.sendToServer(new EnergyRequestC2SPacket(pos, lvl, Minecraft.getInstance().player));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package dev.zontreck.otemod.networking.packets;
|
package dev.zontreck.otemod.networking.packets;
|
||||||
|
|
||||||
|
import dev.zontreck.libzontreck.LibZontreck;
|
||||||
import dev.zontreck.libzontreck.exceptions.InvalidDeserialization;
|
import dev.zontreck.libzontreck.exceptions.InvalidDeserialization;
|
||||||
import dev.zontreck.libzontreck.util.ServerUtilities;
|
import dev.zontreck.libzontreck.util.ServerUtilities;
|
||||||
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
import dev.zontreck.libzontreck.vectors.WorldPosition;
|
||||||
|
@ -7,38 +8,42 @@ import dev.zontreck.otemod.implementation.energy.IThresholdsEnergy;
|
||||||
import dev.zontreck.otemod.networking.ModMessages;
|
import dev.zontreck.otemod.networking.ModMessages;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraftforge.network.NetworkEvent;
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
import net.minecraftforge.server.ServerLifecycleHooks;
|
import net.minecraftforge.server.ServerLifecycleHooks;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class EnergyRequestC2SPacket
|
public class EnergyRequestC2SPacket
|
||||||
{
|
{
|
||||||
private WorldPosition position;
|
private BlockPos position;
|
||||||
|
private String dimension;
|
||||||
private UUID player;
|
private UUID player;
|
||||||
|
|
||||||
public EnergyRequestC2SPacket(WorldPosition position, Player player)
|
public EnergyRequestC2SPacket(BlockPos position, Level level, Player player)
|
||||||
{
|
{
|
||||||
this.position=position;
|
this.position=position;
|
||||||
|
dimension = level.dimension().location().getNamespace() + ":" + level.dimension().location().getPath();
|
||||||
this.player=player.getUUID();
|
this.player=player.getUUID();
|
||||||
}
|
}
|
||||||
|
|
||||||
public EnergyRequestC2SPacket(FriendlyByteBuf buf)
|
public EnergyRequestC2SPacket(FriendlyByteBuf buf)
|
||||||
{
|
{
|
||||||
try {
|
position = buf.readBlockPos();
|
||||||
position = new WorldPosition(buf.readAnySizeNbt(), false);
|
dimension = buf.readUtf();
|
||||||
} catch (InvalidDeserialization e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
player = buf.readUUID();
|
player = buf.readUUID();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toBytes(FriendlyByteBuf buf)
|
public void toBytes(FriendlyByteBuf buf)
|
||||||
{
|
{
|
||||||
buf.writeNbt(position.serialize());
|
buf.writeBlockPos(position);
|
||||||
|
buf.writeUtf(dimension);
|
||||||
buf.writeUUID(player);
|
buf.writeUUID(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,8 +54,9 @@ public class EnergyRequestC2SPacket
|
||||||
context.enqueueWork(()->
|
context.enqueueWork(()->
|
||||||
{
|
{
|
||||||
if(position==null)return;
|
if(position==null)return;
|
||||||
BlockPos pos = position.Position.asBlockPos();
|
BlockPos pos = position;
|
||||||
BlockEntity entity = position.getActualDimension().getBlockEntity(pos);
|
ServerLevel lvl = getActualDimension();
|
||||||
|
BlockEntity entity = lvl.getBlockEntity(pos);
|
||||||
if(entity instanceof IThresholdsEnergy ite)
|
if(entity instanceof IThresholdsEnergy ite)
|
||||||
{
|
{
|
||||||
int energy = ite.getEnergy();
|
int energy = ite.getEnergy();
|
||||||
|
@ -59,4 +65,28 @@ public class EnergyRequestC2SPacket
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ServerLevel getActualDimension() {
|
||||||
|
String dim = this.dimension;
|
||||||
|
String[] dims = dim.split(":");
|
||||||
|
ResourceLocation rl = new ResourceLocation(dims[0], dims[1]);
|
||||||
|
ServerLevel dimL = null;
|
||||||
|
Iterator var5 = ServerLifecycleHooks.getCurrentServer().getAllLevels().iterator();
|
||||||
|
|
||||||
|
while(var5.hasNext()) {
|
||||||
|
ServerLevel lServerLevel = (ServerLevel)var5.next();
|
||||||
|
ResourceLocation XL = lServerLevel.dimension().location();
|
||||||
|
if (XL.getNamespace().equals(rl.getNamespace()) && XL.getPath().equals(rl.getPath())) {
|
||||||
|
dimL = lServerLevel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dimL == null) {
|
||||||
|
LibZontreck.LOGGER.error("DIMENSION COULD NOT BE FOUND : " + this.dimension);
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return dimL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue