3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-11-19 14:30:17 +01:00

Replace particle explosion with particle block explosion in JavaExplodePacket (#3301)

Dieser Commit ist enthalten in:
Kevin Ludwig 2022-09-23 16:04:15 +02:00 committet von GitHub
Ursprung d2b7b8c392
Commit 2c5c72f85f
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
5 geänderte Dateien mit 22 neuen und 15 gelöschten Zeilen

Datei anzeigen

@ -29,7 +29,6 @@ object Versions {
const val nettyVersion = "4.1.80.Final" const val nettyVersion = "4.1.80.Final"
const val guavaVersion = "29.0-jre" const val guavaVersion = "29.0-jre"
const val gsonVersion = "2.3.1" // Provided by Spigot 1.8.8 const val gsonVersion = "2.3.1" // Provided by Spigot 1.8.8
const val nbtVersion = "2.1.0"
const val websocketVersion = "1.5.1" const val websocketVersion = "1.5.1"
const val protocolVersion = "fed46166" const val protocolVersion = "fed46166"
const val raknetVersion = "1.6.28-20220125.214016-6" const val raknetVersion = "1.6.28-20220125.214016-6"

Datei anzeigen

@ -16,8 +16,6 @@ dependencies {
api("com.fasterxml.jackson.dataformat", "jackson-dataformat-yaml", Versions.jacksonVersion) api("com.fasterxml.jackson.dataformat", "jackson-dataformat-yaml", Versions.jacksonVersion)
api("com.google.guava", "guava", Versions.guavaVersion) api("com.google.guava", "guava", Versions.guavaVersion)
api("com.nukkitx", "nbt", Versions.nbtVersion)
// Fastutil Maps // Fastutil Maps
implementation("com.nukkitx.fastutil", "fastutil-int-int-maps", Versions.fastutilVersion) implementation("com.nukkitx.fastutil", "fastutil-int-int-maps", Versions.fastutilVersion)
implementation("com.nukkitx.fastutil", "fastutil-int-long-maps", Versions.fastutilVersion) implementation("com.nukkitx.fastutil", "fastutil-int-long-maps", Versions.fastutilVersion)

Datei anzeigen

@ -28,9 +28,11 @@ package org.geysermc.geyser.translator.protocol.java.level;
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.level.ClientboundExplodePacket; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.level.ClientboundExplodePacket;
import com.nukkitx.math.vector.Vector3f; import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.math.vector.Vector3i; import com.nukkitx.math.vector.Vector3i;
import com.nukkitx.nbt.NbtMap;
import com.nukkitx.nbt.NbtMapBuilder;
import com.nukkitx.protocol.bedrock.data.LevelEventType; import com.nukkitx.protocol.bedrock.data.LevelEventType;
import com.nukkitx.protocol.bedrock.data.SoundEvent; import com.nukkitx.protocol.bedrock.data.SoundEvent;
import com.nukkitx.protocol.bedrock.packet.LevelEventPacket; import com.nukkitx.protocol.bedrock.packet.LevelEventGenericPacket;
import com.nukkitx.protocol.bedrock.packet.LevelSoundEventPacket; import com.nukkitx.protocol.bedrock.packet.LevelSoundEventPacket;
import com.nukkitx.protocol.bedrock.packet.SetEntityMotionPacket; import com.nukkitx.protocol.bedrock.packet.SetEntityMotionPacket;
import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.level.block.BlockStateValues;
@ -44,19 +46,27 @@ public class JavaExplodeTranslator extends PacketTranslator<ClientboundExplodePa
@Override @Override
public void translate(GeyserSession session, ClientboundExplodePacket packet) { public void translate(GeyserSession session, ClientboundExplodePacket packet) {
LevelEventGenericPacket levelEventPacket = new LevelEventGenericPacket();
levelEventPacket.setEventId(2026/*LevelEventType.PARTICLE_BLOCK_EXPLOSION*/);
NbtMapBuilder builder = NbtMap.builder();
builder.putFloat("originX", packet.getX());
builder.putFloat("originY", packet.getY());
builder.putFloat("originZ", packet.getZ());
builder.putFloat("radius", packet.getRadius());
builder.putInt("size", packet.getExploded().size());
int i = 0;
for (Vector3i position : packet.getExploded()) { for (Vector3i position : packet.getExploded()) {
Vector3i pos = Vector3i.from(packet.getX() + position.getX(), packet.getY() + position.getY(), packet.getZ() + position.getZ()); Vector3i pos = Vector3i.from(packet.getX() + position.getX(), packet.getY() + position.getY(), packet.getZ() + position.getZ());
ChunkUtils.updateBlock(session, BlockStateValues.JAVA_AIR_ID, pos); ChunkUtils.updateBlock(session, BlockStateValues.JAVA_AIR_ID, pos);
builder.putFloat("pos" + i + "x", pos.getX());
builder.putFloat("pos" + i + "y", pos.getY());
builder.putFloat("pos" + i + "z", pos.getZ());
i++;
} }
levelEventPacket.setTag(builder.build());
Vector3f pos = Vector3f.from(packet.getX(), packet.getY(), packet.getZ());
// Since bedrock does not play an explosion sound and particles sound, we have to manually do so
LevelEventPacket levelEventPacket = new LevelEventPacket();
levelEventPacket.setType(packet.getRadius() >= 2.0f ? LevelEventType.PARTICLE_HUGE_EXPLODE : LevelEventType.PARTICLE_EXPLOSION);
levelEventPacket.setData(0);
levelEventPacket.setPosition(pos);
session.sendUpstreamPacket(levelEventPacket); session.sendUpstreamPacket(levelEventPacket);
Vector3f pos = Vector3f.from(packet.getX(), packet.getY(), packet.getZ());
LevelSoundEventPacket levelSoundEventPacket = new LevelSoundEventPacket(); LevelSoundEventPacket levelSoundEventPacket = new LevelSoundEventPacket();
levelSoundEventPacket.setRelativeVolumeDisabled(false); levelSoundEventPacket.setRelativeVolumeDisabled(false);
levelSoundEventPacket.setBabySound(false); levelSoundEventPacket.setBabySound(false);

Datei anzeigen

@ -263,7 +263,7 @@ public class JavaLevelEventTranslator extends PacketTranslator<ClientboundLevelE
LevelEventGenericPacket levelEventPacket = new LevelEventGenericPacket(); LevelEventGenericPacket levelEventPacket = new LevelEventGenericPacket();
// TODO add SCULK_BLOCK_CHARGE sound // TODO add SCULK_BLOCK_CHARGE sound
if (eventData.getCharge() > 0) { if (eventData.getCharge() > 0) {
levelEventPacket.setEventId(2037); levelEventPacket.setEventId(2037/*LevelEventType.SCULK_CHARGE*/);
levelEventPacket.setTag( levelEventPacket.setTag(
NbtMap.builder() NbtMap.builder()
.putInt("x", packet.getPosition().getX()) .putInt("x", packet.getPosition().getX())
@ -274,7 +274,7 @@ public class JavaLevelEventTranslator extends PacketTranslator<ClientboundLevelE
.build() .build()
); );
} else { } else {
levelEventPacket.setEventId(2038); levelEventPacket.setEventId(2038/*LevelEventType.SCULK_CHARGE_POP*/);
levelEventPacket.setTag( levelEventPacket.setTag(
NbtMap.builder() NbtMap.builder()
.putInt("x", packet.getPosition().getX()) .putInt("x", packet.getPosition().getX())
@ -288,7 +288,7 @@ public class JavaLevelEventTranslator extends PacketTranslator<ClientboundLevelE
} }
case SCULK_SHRIEKER_SHRIEK -> { case SCULK_SHRIEKER_SHRIEK -> {
LevelEventGenericPacket levelEventPacket = new LevelEventGenericPacket(); LevelEventGenericPacket levelEventPacket = new LevelEventGenericPacket();
levelEventPacket.setEventId(2035); levelEventPacket.setEventId(2035/*LevelEventType.PARTICLE_SCULK_SHRIEK*/);
levelEventPacket.setTag( levelEventPacket.setTag(
NbtMap.builder() NbtMap.builder()
.putInt("originX", packet.getPosition().getX()) .putInt("originX", packet.getPosition().getX())

Datei anzeigen

@ -157,7 +157,7 @@ public class JavaLevelParticlesTranslator extends PacketTranslator<ClientboundLe
return (position) -> { return (position) -> {
LevelEventGenericPacket packet = new LevelEventGenericPacket(); LevelEventGenericPacket packet = new LevelEventGenericPacket();
packet.setEventId(2027); packet.setEventId(2027/*LevelEventType.PARTICLE_VIBRATION_SIGNAL*/);
packet.setTag( packet.setTag(
NbtMap.builder() NbtMap.builder()
.putCompound("origin", buildVec3PositionTag(position)) .putCompound("origin", buildVec3PositionTag(position))