mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
fix NPE
This commit is contained in:
parent
aeb1e3ed4a
commit
2b97b2f157
4 changed files with 30 additions and 21 deletions
|
@ -39,8 +39,6 @@ import org.geysermc.geyser.session.GeyserSession;
|
|||
import org.geysermc.geyser.translator.protocol.PacketTranslator;
|
||||
import org.geysermc.geyser.translator.protocol.Translator;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Translator(packet = StructureBlockUpdatePacket.class)
|
||||
public class BedrockStructureBlockUpdateTranslator extends PacketTranslator<StructureBlockUpdatePacket> {
|
||||
|
||||
|
@ -78,7 +76,10 @@ public class BedrockStructureBlockUpdateTranslator extends PacketTranslator<Stru
|
|||
default -> StructureRotation.NONE;
|
||||
};
|
||||
|
||||
Vector3i offset = settings.getOffset().sub(Objects.requireNonNull(session.getStructureBlockCache().getBedrockOffset()));
|
||||
Vector3i offset = settings.getOffset();
|
||||
if (session.getStructureBlockCache().getBedrockOffset() != null) {
|
||||
offset = settings.getOffset().sub(session.getStructureBlockCache().getBedrockOffset());
|
||||
}
|
||||
|
||||
ServerboundSetStructureBlockPacket structureBlockPacket = new ServerboundSetStructureBlockPacket(
|
||||
packet.getBlockPosition(),
|
||||
|
|
|
@ -66,10 +66,10 @@ public class BedrockStructureTemplateDataRequestTranslator extends PacketTransla
|
|||
settings.getSize().getX(), settings.getSize().getZ());
|
||||
session.getStructureBlockCache().setBedrockOffset(offset);
|
||||
session.getStructureBlockCache().setCurrentStructure(packet.getName());
|
||||
StructureBlockUtils.sendStructureData(session, size.getX(), size.getY(), size.getZ(), packet.getName());
|
||||
StructureBlockUtils.sendStructureData(session, size, packet.getName());
|
||||
return;
|
||||
} else if (packet.getName().equals(currentStructureName)) {
|
||||
StructureBlockUtils.sendStructureData(session, size.getX(), size.getY(), size.getZ(), packet.getName());
|
||||
StructureBlockUtils.sendStructureData(session, size, packet.getName());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -129,23 +129,23 @@ public class JavaBlockEntityDataTranslator extends PacketTranslator<ClientboundB
|
|||
default -> StructureRotation.NONE;
|
||||
};
|
||||
|
||||
// The "positions" are also offsets on Java
|
||||
int posX = getOrDefault(map.get("posX"), 0);
|
||||
int posZ = getOrDefault(map.get("posZ"), 0);
|
||||
|
||||
String name = getOrDefault(map.get("name"), "");
|
||||
int sizeX = getOrDefault(map.get("sizeX"), 0);
|
||||
int sizeY = getOrDefault(map.get("sizeY"), 0);
|
||||
int sizeZ = getOrDefault(map.get("sizeZ"), 0);
|
||||
|
||||
Vector3i offset = StructureBlockUtils.calculateOffset(bedrockRotation, bedrockMirror,
|
||||
sizeX, sizeZ);
|
||||
String name = getOrDefault(map.get("name"), "");
|
||||
|
||||
session.getStructureBlockCache().setCurrentStructureBlock(null);
|
||||
session.getStructureBlockCache().setCurrentStructure(name);
|
||||
session.getStructureBlockCache().setBedrockOffset(offset);
|
||||
|
||||
StructureBlockUtils.sendStructureData(session, sizeX, sizeY, sizeZ, name);
|
||||
Vector3i size = Vector3i.from(sizeX, sizeY, sizeZ);
|
||||
if (size.equals(Vector3i.ZERO)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3i offset = StructureBlockUtils.calculateOffset(bedrockRotation, bedrockMirror,
|
||||
sizeX, sizeZ);
|
||||
session.getStructureBlockCache().setBedrockOffset(offset);
|
||||
StructureBlockUtils.sendStructureData(session, size, name);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -54,19 +54,27 @@ public class StructureBlockUtils {
|
|||
}
|
||||
|
||||
public static void sendEmptyStructureData(GeyserSession session, StructureTemplateDataRequestPacket packet) {
|
||||
sendStructureData(session, packet.getSettings().getSize().getX(),
|
||||
packet.getSettings().getSize().getY(),
|
||||
packet.getSettings().getSize().getZ(),
|
||||
packet.getName());
|
||||
StructureTemplateDataResponsePacket responsePacket = new StructureTemplateDataResponsePacket();
|
||||
responsePacket.setName(packet.getName());
|
||||
responsePacket.setSave(true);
|
||||
responsePacket.setTag(EMPTY_STRUCTURE_DATA.toBuilder()
|
||||
// Bedrock does not like negative sizes here
|
||||
.putList("size", NbtType.INT,
|
||||
packet.getSettings().getSize().getX(),
|
||||
packet.getSettings().getSize().getY(),
|
||||
packet.getSettings().getSize().getZ())
|
||||
.build());
|
||||
responsePacket.setType(StructureTemplateResponseType.NONE);
|
||||
session.sendUpstreamPacket(responsePacket);
|
||||
}
|
||||
|
||||
public static void sendStructureData(GeyserSession session, int x, int y, int z, String name) {
|
||||
public static void sendStructureData(GeyserSession session,Vector3i size, String name) {
|
||||
StructureTemplateDataResponsePacket responsePacket = new StructureTemplateDataResponsePacket();
|
||||
responsePacket.setName(name);
|
||||
responsePacket.setSave(true);
|
||||
responsePacket.setTag(EMPTY_STRUCTURE_DATA.toBuilder()
|
||||
// Bedrock does not like negative sizes here
|
||||
.putList("size", NbtType.INT, Math.abs(x), y, Math.abs(z))
|
||||
.putList("size", NbtType.INT, Math.abs(size.getX()), size.getY(), Math.abs(size.getZ()))
|
||||
.build());
|
||||
responsePacket.setType(StructureTemplateResponseType.QUERY);
|
||||
session.sendUpstreamPacket(responsePacket);
|
||||
|
|
Loading…
Reference in a new issue