From 2436b2b1bebfec1823f87e79b0725b02f042765b Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 12 Mar 2023 23:51:51 -0400 Subject: [PATCH] Damage will now show again. --- .../org/geysermc/geyser/level/DamageType.java | 29 ++++++++++ .../geyser/session/GeyserSession.java | 5 +- .../protocol/java/JavaLoginTranslator.java | 16 ++++++ .../entity/JavaEntityEventTranslator.java | 9 ---- .../spawn/JavaDamageEventTranslator.java | 54 +++++++++++++++++++ .../java/level/JavaBlockEventTranslator.java | 8 +-- 6 files changed, 107 insertions(+), 14 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/level/DamageType.java create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaDamageEventTranslator.java diff --git a/core/src/main/java/org/geysermc/geyser/level/DamageType.java b/core/src/main/java/org/geysermc/geyser/level/DamageType.java new file mode 100644 index 000000000..50848da90 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/DamageType.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.level; + +public class DamageType { +} diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 11467253e..80e2be5cd 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -116,6 +116,7 @@ import org.geysermc.geyser.inventory.Inventory; import org.geysermc.geyser.inventory.PlayerInventory; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; import org.geysermc.geyser.inventory.recipe.GeyserStonecutterData; +import org.geysermc.geyser.level.DamageType; import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.WorldManager; import org.geysermc.geyser.level.physics.CollisionManager; @@ -345,6 +346,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private final Int2ObjectMap chatTypes = new Int2ObjectOpenHashMap<>(7); + private final Int2ObjectMap damageTypes = new Int2ObjectOpenHashMap<>(); + @Setter private int breakingBlock; @@ -1012,7 +1015,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // Server is offline, probably disconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.server_offline", locale()); } else { - disconnectMessage = MessageTranslator.convertMessageLenient(event.getReason()); + disconnectMessage = MessageTranslator.convertMessage(event.getReason()); } if (downstream instanceof LocalSession) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java index 09d117087..c88c9aae2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.translator.protocol.java; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLoginPacket; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundCustomPayloadPacket; +import com.github.steveice10.opennbt.SNBTIO; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.nukkitx.protocol.bedrock.data.GameRuleData; @@ -38,6 +39,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import org.geysermc.floodgate.pluginmessage.PluginMessageChannels; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; +import org.geysermc.geyser.level.DamageType; import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.TextDecoration; @@ -49,6 +51,7 @@ import org.geysermc.geyser.util.DimensionUtils; import org.geysermc.geyser.util.JavaCodecUtil; import org.geysermc.geyser.util.PluginMessageUtils; +import java.io.IOException; import java.util.Map; @Translator(packet = ClientboundLoginPacket.class) @@ -64,6 +67,12 @@ public class JavaLoginTranslator extends PacketTranslator chatTypes = session.getChatTypes(); chatTypes.clear(); for (CompoundTag tag : JavaCodecUtil.iterateAsTag(packet.getRegistry().get("minecraft:chat_type"))) { @@ -78,6 +87,13 @@ public class JavaLoginTranslator extends PacketTranslator damageTypes = session.getDamageTypes(); + damageTypes.clear(); + for (CompoundTag tag : JavaCodecUtil.iterateAsTag(packet.getRegistry().get("minecraft:damage_type"))) { + int id = ((IntTag) tag.get("id")).getValue(); + CompoundTag element = tag.get("element"); + } + // If the player is already initialized and a join game packet is sent, they // are swapping servers if (session.isSpawned()) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java index 3d44ce2fd..8b492027b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java @@ -83,15 +83,6 @@ public class JavaEntityEventTranslator extends PacketTranslator { + + @Override + public void translate(GeyserSession session, ClientboundDamageEventPacket packet) { + Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId()); + if (entity == null) { + return; + } + + EntityEventPacket entityEventPacket = new EntityEventPacket(); + entityEventPacket.setRuntimeEntityId(entity.getGeyserId()); + entityEventPacket.setType(EntityEventType.HURT); + DamageType damageType = session.getDamageTypes().get(packet.getSourceTypeId()); + + session.sendUpstreamPacket(entityEventPacket); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java index 4d35db562..149e8356e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java @@ -57,10 +57,10 @@ public class JavaBlockEventTranslator extends PacketTranslator