From 1a7a76ee0c5cdea03743f0e7e484d0bbf43333b0 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Mon, 6 Jul 2020 16:32:07 +0800 Subject: [PATCH 01/16] Update Version to 1.1.0-SNAPSHOT and set repo to bundabrg --- bootstrap/bungeecord/pom.xml | 4 ++-- bootstrap/pom.xml | 2 +- bootstrap/spigot/pom.xml | 4 ++-- bootstrap/sponge/pom.xml | 4 ++-- bootstrap/standalone/pom.xml | 4 ++-- bootstrap/velocity/pom.xml | 4 ++-- common/pom.xml | 2 +- connector/pom.xml | 4 ++-- .../org/geysermc/connector/GeyserConnector.java | 6 ++++-- docs/plugins.md | 2 +- pom.xml | 14 ++++++++------ 11 files changed, 27 insertions(+), 23 deletions(-) diff --git a/bootstrap/bungeecord/pom.xml b/bootstrap/bungeecord/pom.xml index 565264f0f49..53750a851c0 100644 --- a/bootstrap/bungeecord/pom.xml +++ b/bootstrap/bungeecord/pom.xml @@ -6,7 +6,7 @@ org.geysermc bootstrap-parent - 1.0.0 + 1.1.0-SNAPSHOT ../ bootstrap-bungeecord @@ -14,7 +14,7 @@ org.geysermc connector - 1.0.0 + 1.1.0-SNAPSHOT compile diff --git a/bootstrap/pom.xml b/bootstrap/pom.xml index 85ede3466d9..bb4e0bf066f 100644 --- a/bootstrap/pom.xml +++ b/bootstrap/pom.xml @@ -10,7 +10,7 @@ ../ bootstrap-parent - 1.0.0 + 1.1.0-SNAPSHOT pom diff --git a/bootstrap/spigot/pom.xml b/bootstrap/spigot/pom.xml index e05ad7f03d9..5cfc3654cd5 100644 --- a/bootstrap/spigot/pom.xml +++ b/bootstrap/spigot/pom.xml @@ -6,7 +6,7 @@ org.geysermc bootstrap-parent - 1.0.0 + 1.1.0-SNAPSHOT ../ bootstrap-spigot @@ -14,7 +14,7 @@ org.geysermc connector - 1.0.0 + 1.1.0-SNAPSHOT compile diff --git a/bootstrap/sponge/pom.xml b/bootstrap/sponge/pom.xml index cca3fcaae78..72ae4c70825 100644 --- a/bootstrap/sponge/pom.xml +++ b/bootstrap/sponge/pom.xml @@ -6,7 +6,7 @@ org.geysermc bootstrap-parent - 1.0.0 + 1.1.0-SNAPSHOT ../ bootstrap-sponge @@ -14,7 +14,7 @@ org.geysermc connector - 1.0.0 + 1.1.0-SNAPSHOT compile diff --git a/bootstrap/standalone/pom.xml b/bootstrap/standalone/pom.xml index 468042b8ffa..9956b7078bb 100644 --- a/bootstrap/standalone/pom.xml +++ b/bootstrap/standalone/pom.xml @@ -6,7 +6,7 @@ org.geysermc bootstrap-parent - 1.0.0 + 1.1.0-SNAPSHOT ../ bootstrap-standalone @@ -14,7 +14,7 @@ org.geysermc connector - 1.0.0 + 1.1.0-SNAPSHOT compile diff --git a/bootstrap/velocity/pom.xml b/bootstrap/velocity/pom.xml index 7c42ba3362f..2fed7564539 100644 --- a/bootstrap/velocity/pom.xml +++ b/bootstrap/velocity/pom.xml @@ -6,7 +6,7 @@ org.geysermc bootstrap-parent - 1.0.0 + 1.1.0-SNAPSHOT ../ bootstrap-velocity @@ -14,7 +14,7 @@ org.geysermc connector - 1.0.0 + 1.1.0-SNAPSHOT compile diff --git a/common/pom.xml b/common/pom.xml index 0df8ef4bf6c..3648740f3eb 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -10,7 +10,7 @@ ../ common - 1.0.0 + 1.1.0-SNAPSHOT com.google.code.gson diff --git a/connector/pom.xml b/connector/pom.xml index b2bc15263cc..44db0a7c473 100644 --- a/connector/pom.xml +++ b/connector/pom.xml @@ -10,12 +10,12 @@ ../ connector - 1.0.0 + 1.1.0-SNAPSHOT org.geysermc common - 1.0.0 + 1.1.0-SNAPSHOT compile diff --git a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java index 11b293c23fe..ae5194ba7c3 100644 --- a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java +++ b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java @@ -111,8 +111,6 @@ private GeyserConnector(PlatformType platformType, GeyserBootstrap bootstrap) { instance = this; this.bootstrap = bootstrap; - this.eventManager = new EventManager(this); - this.pluginManager = new PluginManager(this, bootstrap.getConfigFolder().resolve("plugins").toFile()); GeyserLogger logger = bootstrap.getGeyserLogger(); GeyserConfiguration config = bootstrap.getGeyserConfig(); @@ -129,6 +127,10 @@ private GeyserConnector(PlatformType platformType, GeyserBootstrap bootstrap) { logger.setDebug(config.isDebugMode()); + this.eventManager = new EventManager(this); + this.pluginManager = new PluginManager(this, bootstrap.getConfigFolder().resolve("plugins").toFile()); + System.exit(1); + PacketTranslatorRegistry.init(); /* Initialize translators and registries */ diff --git a/docs/plugins.md b/docs/plugins.md index b559d303015..bff64330117 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -31,7 +31,7 @@ Add the following to the relevant section of your `pom.xml` org.geysermc connector - 1.0-SNAPSHOT + 1.1.0-SNAPSHOT provided diff --git a/pom.xml b/pom.xml index 3e119eb1197..1bbf4bf6362 100644 --- a/pom.xml +++ b/pom.xml @@ -69,14 +69,16 @@ - releases - nukkitx-releases - https://repo.nukkitx.com/maven-releases + bundabrg-repo + + https://repo.worldguard.com.au/repository/maven-releases + - snapshots - nukkitx-snapshots - https://repo.nukkitx.com/maven-snapshots + bundabrg-repo + + https://repo.worldguard.com.au/repository/maven-snapshots + From 4cb12170831bfeeac43458c330e2ab2322ac3570 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Mon, 6 Jul 2020 17:51:55 +0800 Subject: [PATCH 02/16] Add Events to allow overriding core functionality --- .../geysermc/connector/GeyserConnector.java | 7 ++- .../connector/event/EventManager.java | 8 +++- .../events/BedrockCodecRegistryEvent.java | 39 ++++++++++++++++ .../events/BlockEntityRegistryEvent.java | 45 +++++++++++++++++++ .../event/events/CancellableGeyserEvent.java | 11 +++-- .../events/DownstreamPacketReceiveEvent.java | 11 ++--- .../events/DownstreamPacketSendEvent.java | 11 ++--- .../connector/event/events/GeyserEvent.java | 3 ++ .../events/ItemRemapperRegistryEvent.java | 45 +++++++++++++++++++ .../events/PacketTranslatorRegistryEvent.java | 43 ++++++++++++++++++ .../event/events/PluginDisableEvent.java | 10 ++--- .../event/events/PluginEnableEvent.java | 10 ++--- .../event/events/PluginMessageEvent.java | 14 +++--- .../event/events/ResourceReadEvent.java | 41 +++++++++++++++++ .../events/SoundHandlerRegistryEvent.java | 45 +++++++++++++++++++ .../events/UpstreamPacketReceiveEvent.java | 13 +++--- .../event/events/UpstreamPacketSendEvent.java | 14 +++--- .../translators/PacketTranslatorRegistry.java | 8 +++- .../translators/item/ItemTranslator.java | 10 +++-- .../sound/SoundHandlerRegistry.java | 9 +++- .../world/block/BlockTranslator.java | 11 +++-- .../geysermc/connector/utils/FileUtils.java | 9 +++- 22 files changed, 353 insertions(+), 64 deletions(-) create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/BedrockCodecRegistryEvent.java create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/BlockEntityRegistryEvent.java create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/ItemRemapperRegistryEvent.java create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/PacketTranslatorRegistryEvent.java create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/ResourceReadEvent.java create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/SoundHandlerRegistryEvent.java diff --git a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java index ae5194ba7c3..bf30ba559d2 100644 --- a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java +++ b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java @@ -38,6 +38,7 @@ import org.geysermc.connector.command.CommandManager; import org.geysermc.connector.event.EventManager; import org.geysermc.connector.configuration.GeyserConfiguration; +import org.geysermc.connector.event.events.BedrockCodecRegistryEvent; import org.geysermc.connector.metrics.Metrics; import org.geysermc.connector.network.ConnectorServerEventHandler; import org.geysermc.connector.network.remote.RemoteServer; @@ -77,7 +78,7 @@ public class GeyserConnector { public static final ObjectMapper JSON_MAPPER = new ObjectMapper().disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES); - public static final BedrockPacketCodec BEDROCK_PACKET_CODEC = Bedrock_v407.V407_CODEC; + public static BedrockPacketCodec BEDROCK_PACKET_CODEC; public static final String NAME = "Geyser"; public static final String VERSION = "DEV"; // A fallback for running in IDEs @@ -129,7 +130,9 @@ private GeyserConnector(PlatformType platformType, GeyserBootstrap bootstrap) { this.eventManager = new EventManager(this); this.pluginManager = new PluginManager(this, bootstrap.getConfigFolder().resolve("plugins").toFile()); - System.exit(1); + + // Set Codec + BEDROCK_PACKET_CODEC = eventManager.triggerEvent(new BedrockCodecRegistryEvent(Bedrock_v407.V407_CODEC)).getEvent().getCodec(); PacketTranslatorRegistry.init(); diff --git a/connector/src/main/java/org/geysermc/connector/event/EventManager.java b/connector/src/main/java/org/geysermc/connector/event/EventManager.java index b6921bd78ea..e9d1f9720c5 100644 --- a/connector/src/main/java/org/geysermc/connector/event/EventManager.java +++ b/connector/src/main/java/org/geysermc/connector/event/EventManager.java @@ -45,13 +45,19 @@ @SuppressWarnings("unused") @Getter -@AllArgsConstructor public class EventManager { + @Getter + private static EventManager instance; private final Map, PriorityQueue>> eventHandlers = new HashMap<>(); private final Map>> classEventHandlers = new HashMap<>(); private final GeyserConnector connector; + public EventManager(GeyserConnector connector) { + instance = this; + this.connector = connector; + } + /** * Trigger a new event. * diff --git a/connector/src/main/java/org/geysermc/connector/event/events/BedrockCodecRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/BedrockCodecRegistryEvent.java new file mode 100644 index 00000000000..ebd3224dcf3 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/BedrockCodecRegistryEvent.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import com.nukkitx.protocol.bedrock.BedrockPacketCodec; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@Data +public class BedrockCodecRegistryEvent extends GeyserEvent { + private BedrockPacketCodec codec; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/BlockEntityRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/BlockEntityRegistryEvent.java new file mode 100644 index 00000000000..440779a4cd3 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/BlockEntityRegistryEvent.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import java.util.Set; + +/** + * Triggered when registering Packet Translators + */ +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@Data +public class BlockEntityRegistryEvent extends GeyserEvent { + private Set> registeredTranslators; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/CancellableGeyserEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/CancellableGeyserEvent.java index 582896ff85d..3e334b78fad 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/CancellableGeyserEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/CancellableGeyserEvent.java @@ -26,13 +26,12 @@ package org.geysermc.connector.event.events; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; -@Getter -@ToString +@EqualsAndHashCode(callSuper = true) +@Data public abstract class CancellableGeyserEvent extends GeyserEvent { - @Setter private boolean cancelled = false; } diff --git a/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketReceiveEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketReceiveEvent.java index 91bc83f9aa7..97bd9df1fe8 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketReceiveEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketReceiveEvent.java @@ -28,6 +28,8 @@ import com.github.steveice10.packetlib.packet.Packet; import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; import org.geysermc.connector.network.session.GeyserSession; @@ -38,11 +40,10 @@ * If cancelled then regular processes of the packet will not proceed */ -@Getter -@ToString +@EqualsAndHashCode(callSuper = true) @AllArgsConstructor +@Data public class DownstreamPacketReceiveEvent extends CancellableGeyserEvent { - - private final GeyserSession session; - private final T packet; + private GeyserSession session; + private T packet; } diff --git a/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketSendEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketSendEvent.java index be5b7622cb8..dbd7fdfdd9f 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketSendEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketSendEvent.java @@ -28,6 +28,8 @@ import com.github.steveice10.packetlib.packet.Packet; import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; import org.geysermc.connector.network.session.GeyserSession; @@ -38,11 +40,10 @@ * If cancelled then regular processes of the packet will not proceed */ -@Getter -@ToString +@EqualsAndHashCode(callSuper = true) @AllArgsConstructor +@Data public class DownstreamPacketSendEvent extends CancellableGeyserEvent { - - private final GeyserSession session; - private final T packet; + private GeyserSession session; + private T packet; } diff --git a/connector/src/main/java/org/geysermc/connector/event/events/GeyserEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/GeyserEvent.java index db7f2f185b0..f9319158e02 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/GeyserEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/GeyserEvent.java @@ -26,5 +26,8 @@ package org.geysermc.connector.event.events; +import lombok.Data; + +@Data public abstract class GeyserEvent { } diff --git a/connector/src/main/java/org/geysermc/connector/event/events/ItemRemapperRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/ItemRemapperRegistryEvent.java new file mode 100644 index 00000000000..45a8adacd45 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/ItemRemapperRegistryEvent.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import java.util.Set; + +/** + * Triggered when registering Item Remapper Translators + */ +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@Data +public class ItemRemapperRegistryEvent extends GeyserEvent { + private Set> registeredTranslators; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/PacketTranslatorRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/PacketTranslatorRegistryEvent.java new file mode 100644 index 00000000000..e3c47c1dd39 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/PacketTranslatorRegistryEvent.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Set; + +/** + * Triggered when registering Packet Translators + */ +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@Data +public class PacketTranslatorRegistryEvent extends GeyserEvent { + private Set> registeredTranslators; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/PluginDisableEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/PluginDisableEvent.java index 2624b7cf3d6..4ad9cb826da 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/PluginDisableEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/PluginDisableEvent.java @@ -27,13 +27,13 @@ package org.geysermc.connector.event.events; import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; +import lombok.Data; +import lombok.EqualsAndHashCode; import org.geysermc.connector.plugin.GeyserPlugin; -@Getter -@ToString +@EqualsAndHashCode(callSuper = true) @AllArgsConstructor +@Data public class PluginDisableEvent extends GeyserEvent { - private final GeyserPlugin plugin; + private GeyserPlugin plugin; } diff --git a/connector/src/main/java/org/geysermc/connector/event/events/PluginEnableEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/PluginEnableEvent.java index e70eb6dfcad..08867217fc1 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/PluginEnableEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/PluginEnableEvent.java @@ -27,13 +27,13 @@ package org.geysermc.connector.event.events; import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; +import lombok.Data; +import lombok.EqualsAndHashCode; import org.geysermc.connector.plugin.GeyserPlugin; -@Getter -@ToString +@EqualsAndHashCode(callSuper = true) @AllArgsConstructor +@Data public class PluginEnableEvent extends CancellableGeyserEvent { - private final GeyserPlugin plugin; + private GeyserPlugin plugin; } diff --git a/connector/src/main/java/org/geysermc/connector/event/events/PluginMessageEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/PluginMessageEvent.java index 928c2b97a67..744459c0413 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/PluginMessageEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/PluginMessageEvent.java @@ -27,15 +27,15 @@ package org.geysermc.connector.event.events; import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; +import lombok.Data; +import lombok.EqualsAndHashCode; import org.geysermc.connector.network.session.GeyserSession; -@Getter -@ToString +@EqualsAndHashCode(callSuper = true) @AllArgsConstructor +@Data public class PluginMessageEvent extends CancellableGeyserEvent { - private final GeyserSession session; - private final String channel; - private final byte[] data; + private GeyserSession session; + private String channel; + private byte[] data; } diff --git a/connector/src/main/java/org/geysermc/connector/event/events/ResourceReadEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/ResourceReadEvent.java new file mode 100644 index 00000000000..9d765d66e1f --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/ResourceReadEvent.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.InputStream; + +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@Data +public class ResourceReadEvent extends GeyserEvent { + private String resourceName; + private InputStream inputStream; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/SoundHandlerRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/SoundHandlerRegistryEvent.java new file mode 100644 index 00000000000..95d16c92ed7 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/SoundHandlerRegistryEvent.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import java.util.Set; + +/** + * Triggered when registering Sound Handlers + */ +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@Data +public class SoundHandlerRegistryEvent extends GeyserEvent { + private Set> registeredTranslators; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketReceiveEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketReceiveEvent.java index 54621bebda0..aca180ffb34 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketReceiveEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketReceiveEvent.java @@ -28,9 +28,8 @@ import com.nukkitx.protocol.bedrock.BedrockPacket; import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; +import lombok.Data; +import lombok.EqualsAndHashCode; import org.geysermc.connector.network.session.GeyserSession; /** @@ -39,11 +38,11 @@ * If cancelled then regular processes of the packet will not proceed */ -@Getter -@ToString +@EqualsAndHashCode(callSuper = true) @AllArgsConstructor +@Data public class UpstreamPacketReceiveEvent extends CancellableGeyserEvent { - private final GeyserSession session; - private final T packet; + private GeyserSession session; + private T packet; } diff --git a/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketSendEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketSendEvent.java index 48f48c91c71..1dd37f75bfb 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketSendEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketSendEvent.java @@ -28,9 +28,8 @@ import com.nukkitx.protocol.bedrock.BedrockPacket; import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; +import lombok.Data; +import lombok.EqualsAndHashCode; import org.geysermc.connector.network.session.GeyserSession; /** @@ -39,11 +38,10 @@ * If cancelled then regular processes of the packet will not proceed */ -@Getter -@ToString +@EqualsAndHashCode(callSuper = true) @AllArgsConstructor +@Data public class UpstreamPacketSendEvent extends CancellableGeyserEvent { - - private final GeyserSession session; - private final T packet; + private GeyserSession session; + private T packet; } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java b/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java index 92d2e910294..9c85982a636 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java @@ -32,6 +32,8 @@ import com.nukkitx.protocol.bedrock.BedrockPacket; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.geysermc.connector.GeyserConnector; +import org.geysermc.connector.event.EventManager; +import org.geysermc.connector.event.events.PacketTranslatorRegistryEvent; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.utils.LanguageUtils; import org.reflections.Reflections; @@ -48,9 +50,11 @@ public class PacketTranslatorRegistry { private static final ObjectArrayList> IGNORED_PACKETS = new ObjectArrayList<>(); static { - Reflections ref = new Reflections("org.geysermc.connector.network.translators"); + PacketTranslatorRegistryEvent event = EventManager.getInstance().triggerEvent(new PacketTranslatorRegistryEvent( + new Reflections("org.geysermc.connector.network.translators").getTypesAnnotatedWith(Translator.class)) + ).getEvent(); - for (Class clazz : ref.getTypesAnnotatedWith(Translator.class)) { + for (Class clazz : event.getRegisteredTranslators()) { Class packet = clazz.getAnnotation(Translator.class).packet(); GeyserConnector.getInstance().getLogger().debug("Found annotated translator: " + clazz.getCanonicalName() + " : " + packet.getSimpleName()); diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/item/ItemTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/item/ItemTranslator.java index 7811d9c0ae2..425869df4e0 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/item/ItemTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/item/ItemTranslator.java @@ -47,6 +47,8 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import org.geysermc.connector.GeyserConnector; +import org.geysermc.connector.event.EventManager; +import org.geysermc.connector.event.events.ItemRemapperRegistryEvent; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.translators.ItemRemapper; import org.geysermc.connector.utils.MessageUtils; @@ -70,10 +72,12 @@ public static void init() { static { /* Load item translators */ - Reflections ref = new Reflections("org.geysermc.connector.network.translators.item"); - + ItemRemapperRegistryEvent itemRemapperEvent = EventManager.getInstance().triggerEvent(new ItemRemapperRegistryEvent( + new Reflections("org.geysermc.connector.network.translators.item").getTypesAnnotatedWith(ItemRemapper.class)) + ).getEvent(); + Map loadedNbtItemTranslators = new HashMap<>(); - for (Class clazz : ref.getTypesAnnotatedWith(ItemRemapper.class)) { + for (Class clazz : itemRemapperEvent.getRegisteredTranslators()) { int priority = clazz.getAnnotation(ItemRemapper.class).priority(); GeyserConnector.getInstance().getLogger().debug("Found annotated item translator: " + clazz.getCanonicalName()); diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/sound/SoundHandlerRegistry.java b/connector/src/main/java/org/geysermc/connector/network/translators/sound/SoundHandlerRegistry.java index 260efb41696..b018bdcb0d8 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/sound/SoundHandlerRegistry.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/sound/SoundHandlerRegistry.java @@ -26,6 +26,8 @@ package org.geysermc.connector.network.translators.sound; +import org.geysermc.connector.event.EventManager; +import org.geysermc.connector.event.events.SoundHandlerRegistryEvent; import org.reflections.Reflections; import java.util.HashMap; @@ -39,8 +41,11 @@ public class SoundHandlerRegistry { static final Map> INTERACTION_HANDLERS = new HashMap<>(); static { - Reflections ref = new Reflections("org.geysermc.connector.network.translators.sound"); - for (Class clazz : ref.getTypesAnnotatedWith(SoundHandler.class)) { + SoundHandlerRegistryEvent soundHandlerEvent = EventManager.getInstance().triggerEvent(new SoundHandlerRegistryEvent( + new Reflections("org.geysermc.connector.network.translators.sound").getTypesAnnotatedWith(SoundHandler.class)) + ).getEvent(); + + for (Class clazz : soundHandlerEvent.getRegisteredTranslators()) { try { SoundInteractionHandler interactionHandler = (SoundInteractionHandler) clazz.newInstance(); SoundHandler annotation = clazz.getAnnotation(SoundHandler.class); diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java index e627b84547e..b1d81e4d436 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java @@ -38,6 +38,8 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.geysermc.connector.GeyserConnector; +import org.geysermc.connector.event.EventManager; +import org.geysermc.connector.event.events.BlockEntityRegistryEvent; import org.geysermc.connector.network.translators.world.block.entity.BlockEntity; import org.geysermc.connector.utils.FileUtils; import org.reflections.Reflections; @@ -105,9 +107,10 @@ public class BlockTranslator { Object2IntMap addedStatesMap = new Object2IntOpenHashMap<>(); addedStatesMap.defaultReturnValue(-1); List paletteList = new ArrayList<>(); - - Reflections ref = new Reflections("org.geysermc.connector.network.translators.world.block.entity"); - ref.getTypesAnnotatedWith(BlockEntity.class); + + BlockEntityRegistryEvent blockEntityEvent = EventManager.getInstance().triggerEvent(new BlockEntityRegistryEvent( + new Reflections("org.geysermc.connector.network.translators.world.block.entity").getTypesAnnotatedWith(BlockEntity.class)) + ).getEvent(); int waterRuntimeId = -1; int javaRuntimeId = -1; @@ -153,7 +156,7 @@ public class BlockTranslator { // Used for adding all "special" Java block states to block state map String identifier; String bedrock_identifer = entry.getValue().get("bedrock_identifier").asText(); - for (Class clazz : ref.getTypesAnnotatedWith(BlockEntity.class)) { + for (Class clazz : blockEntityEvent.getRegisteredTranslators()) { identifier = clazz.getAnnotation(BlockEntity.class).regex(); // Endswith, or else the block bedrock gets picked up for bed if (bedrock_identifer.endsWith(identifier) && !identifier.equals("")) { diff --git a/connector/src/main/java/org/geysermc/connector/utils/FileUtils.java b/connector/src/main/java/org/geysermc/connector/utils/FileUtils.java index 0b7b5c5cf09..85110fd4c44 100644 --- a/connector/src/main/java/org/geysermc/connector/utils/FileUtils.java +++ b/connector/src/main/java/org/geysermc/connector/utils/FileUtils.java @@ -28,6 +28,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import org.geysermc.connector.GeyserConnector; +import org.geysermc.connector.event.EventManager; +import org.geysermc.connector.event.events.ResourceReadEvent; import java.io.File; import java.io.FileOutputStream; @@ -134,9 +136,12 @@ public static void writeFile(String name, char[] data) throws IOException { */ public static InputStream getResource(String resource) { InputStream stream = FileUtils.class.getClassLoader().getResourceAsStream(resource); - if (stream == null) { + + ResourceReadEvent event = EventManager.getInstance().triggerEvent(new ResourceReadEvent(resource, stream)).getEvent(); + + if (event.getInputStream() == null) { throw new AssertionError(LanguageUtils.getLocaleStringLog("geyser.toolbox.fail.resource", resource)); } - return stream; + return event.getInputStream(); } } From 770823f14a5bc433a95bd0c8a8f83dc3b5f22c2e Mon Sep 17 00:00:00 2001 From: bundabrg Date: Mon, 6 Jul 2020 18:19:45 +0800 Subject: [PATCH 03/16] Add BedrockPongEvent --- .../event/events/BedrockPongEvent.java | 42 +++++++++++++++++++ .../network/ConnectorServerEventHandler.java | 4 +- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/BedrockPongEvent.java diff --git a/connector/src/main/java/org/geysermc/connector/event/events/BedrockPongEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/BedrockPongEvent.java new file mode 100644 index 00000000000..49f6c8d0aee --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/BedrockPongEvent.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import com.nukkitx.protocol.bedrock.BedrockPong; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.net.InetSocketAddress; + +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@Data +public class BedrockPongEvent extends GeyserEvent { + private InetSocketAddress inetSocketAddress; + private BedrockPong pong; +} diff --git a/connector/src/main/java/org/geysermc/connector/network/ConnectorServerEventHandler.java b/connector/src/main/java/org/geysermc/connector/network/ConnectorServerEventHandler.java index ad5cb42aa9b..30faf732f49 100644 --- a/connector/src/main/java/org/geysermc/connector/network/ConnectorServerEventHandler.java +++ b/connector/src/main/java/org/geysermc/connector/network/ConnectorServerEventHandler.java @@ -34,6 +34,8 @@ import org.geysermc.connector.common.ping.GeyserPingInfo; import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.configuration.GeyserConfiguration; +import org.geysermc.connector.event.EventManager; +import org.geysermc.connector.event.events.BedrockPongEvent; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connector.utils.MessageUtils; @@ -101,7 +103,7 @@ public BedrockPong onQuery(InetSocketAddress inetSocketAddress) { pong.setMaximumPlayerCount(pong.getPlayerCount() + 1); } - return pong; + return EventManager.getInstance().triggerEvent(new BedrockPongEvent(inetSocketAddress, pong)).getEvent().getPong(); } @Override From b0bfadfceb27ed654a549f612d923382ba353706 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Mon, 6 Jul 2020 19:28:08 +0800 Subject: [PATCH 04/16] Move GeyserStartEvent to end of Geyser Startup --- .../org/geysermc/platform/bungeecord/GeyserBungeePlugin.java | 4 ++++ .../java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java | 4 ++++ .../java/org/geysermc/platform/sponge/GeyserSpongePlugin.java | 4 ++++ .../platform/standalone/GeyserStandaloneBootstrap.java | 4 ++++ .../org/geysermc/platform/velocity/GeyserVelocityPlugin.java | 4 ++++ .../src/main/java/org/geysermc/connector/GeyserConnector.java | 3 --- docs/events.md | 2 +- 7 files changed, 21 insertions(+), 4 deletions(-) diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java b/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java index 38d319e151c..a3e7d169b5e 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java @@ -36,6 +36,7 @@ import org.geysermc.connector.command.CommandManager; import org.geysermc.connector.configuration.GeyserConfiguration; import org.geysermc.connector.dump.BootstrapDumpInfo; +import org.geysermc.connector.event.events.GeyserStartEvent; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connector.utils.FileUtils; @@ -111,6 +112,9 @@ public void onEnable() { } this.getProxy().getPluginManager().registerCommand(this, new GeyserBungeeCommandExecutor(connector)); + + // Trigger GeyserStart Events + connector.getEventManager().triggerEvent(new GeyserStartEvent()); } @Override diff --git a/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java b/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java index 38141c520dc..ed246a984a1 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java @@ -33,6 +33,7 @@ import org.geysermc.connector.command.CommandManager; import org.geysermc.connector.configuration.GeyserConfiguration; import org.geysermc.connector.dump.BootstrapDumpInfo; +import org.geysermc.connector.event.events.GeyserStartEvent; import org.geysermc.connector.network.translators.world.WorldManager; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; @@ -122,6 +123,9 @@ public void onEnable() { Bukkit.getServer().getPluginManager().registerEvents(blockPlaceListener, this); this.getCommand("geyser").setExecutor(new GeyserSpigotCommandExecutor(connector)); + + // Trigger GeyserStart Events + connector.getEventManager().triggerEvent(new GeyserStartEvent()); } @Override diff --git a/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java b/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java index 3151e973c87..107d9439289 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java @@ -35,6 +35,7 @@ import org.geysermc.connector.bootstrap.GeyserBootstrap; import org.geysermc.connector.command.CommandManager; import org.geysermc.connector.dump.BootstrapDumpInfo; +import org.geysermc.connector.event.events.GeyserStartEvent; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connector.utils.FileUtils; @@ -123,6 +124,9 @@ public void onEnable() { this.geyserCommandManager = new GeyserSpongeCommandManager(Sponge.getCommandManager(), connector); Sponge.getCommandManager().register(this, new GeyserSpongeCommandExecutor(connector), "geyser"); + + // Trigger GeyserStart Events + connector.getEventManager().triggerEvent(new GeyserStartEvent()); } @Override diff --git a/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java b/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java index 5da4c37d9d5..2268eb49626 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java @@ -37,6 +37,7 @@ import org.geysermc.connector.command.CommandManager; import org.geysermc.connector.configuration.GeyserConfiguration; import org.geysermc.connector.dump.BootstrapDumpInfo; +import org.geysermc.connector.event.events.GeyserStartEvent; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connector.utils.FileUtils; @@ -125,6 +126,9 @@ public void onEnable() { if (!useGui) { geyserLogger.start(); // Throws an error otherwise } + + // Trigger GeyserStart Events + connector.getEventManager().triggerEvent(new GeyserStartEvent()); } @Override diff --git a/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java b/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java index 425aba183fe..efc69ce8bd1 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java @@ -40,6 +40,7 @@ import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.bootstrap.GeyserBootstrap; import org.geysermc.connector.dump.BootstrapDumpInfo; +import org.geysermc.connector.event.events.GeyserStartEvent; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connector.utils.FileUtils; @@ -119,6 +120,9 @@ public void onEnable() { } else { this.geyserPingPassthrough = new GeyserVelocityPingPassthrough(proxyServer); } + + // Trigger GeyserStart Events + connector.getEventManager().triggerEvent(new GeyserStartEvent()); } @Override diff --git a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java index bf30ba559d2..b13e5593b79 100644 --- a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java +++ b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java @@ -189,9 +189,6 @@ private GeyserConnector(PlatformType platformType, GeyserBootstrap bootstrap) { // Enable Plugins pluginManager.enablePlugins(); - // Trigger GeyserStart Events - eventManager.triggerEvent(new GeyserStartEvent()); - double completeTime = (System.currentTimeMillis() - startupTime) / 1000D; String message = LanguageUtils.getLocaleStringLog("geyser.core.finish.done", new DecimalFormat("#.###").format(completeTime)) + " "; if (isGui) { diff --git a/docs/events.md b/docs/events.md index 3d952f5ff50..c9a43e513b2 100644 --- a/docs/events.md +++ b/docs/events.md @@ -173,7 +173,7 @@ every Downstream packet will trigger this handler. } ``` -### GeyserStopEvent +### GeyserStartEvent Triggered after Geyser has finished starting. From 54ca261d6a5dfb926019929cb6b9f68aa892aa16 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Mon, 6 Jul 2020 19:42:15 +0800 Subject: [PATCH 05/16] Create Plugin data folder by default --- .../platform/standalone/GeyserStandaloneBootstrap.java | 6 +++--- .../java/org/geysermc/connector/plugin/GeyserPlugin.java | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java b/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java index 2268eb49626..ac7bbfa29c3 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java @@ -123,12 +123,12 @@ public void onEnable() { geyserPingPassthrough = GeyserLegacyPingPassthrough.init(connector); + // Trigger GeyserStart Events + connector.getEventManager().triggerEvent(new GeyserStartEvent()); + if (!useGui) { geyserLogger.start(); // Throws an error otherwise } - - // Trigger GeyserStart Events - connector.getEventManager().triggerEvent(new GeyserStartEvent()); } @Override diff --git a/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java b/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java index 3628fc684ad..825908c8a6a 100644 --- a/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java +++ b/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java @@ -63,6 +63,9 @@ public GeyserPlugin(PluginManager pluginManager, PluginClassLoader pluginClassLo this.logger = new PluginLogger(this); logger.info(String.format("Loading %s v%s", getName(), getVersion())); + + //noinspection ResultOfMethodCallIgnored + getDataFolder().mkdirs(); } // We provide some methods already provided in EventManager as we want to keep track of which EventHandlers From 3a1716e1eb74fb761c25cdc90ad397687c297578 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Mon, 6 Jul 2020 20:44:08 +0800 Subject: [PATCH 06/16] Use GeyserSession.sendUpstream --- .../network/session/GeyserSession.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java index 36a13f06267..6f9f5a97a65 100644 --- a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java +++ b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java @@ -224,21 +224,21 @@ public void connect(RemoteServer remoteServer) { BiomeDefinitionListPacket biomeDefinitionListPacket = new BiomeDefinitionListPacket(); biomeDefinitionListPacket.setDefinitions(BiomeTranslator.BIOMES); - upstream.sendPacket(biomeDefinitionListPacket); + sendUpstreamPacket(biomeDefinitionListPacket); AvailableEntityIdentifiersPacket entityPacket = new AvailableEntityIdentifiersPacket(); entityPacket.setIdentifiers(EntityIdentifierRegistry.ENTITY_IDENTIFIERS); - upstream.sendPacket(entityPacket); + sendUpstreamPacket(entityPacket); CreativeContentPacket creativePacket = new CreativeContentPacket(); for (int i = 0; i < ItemRegistry.CREATIVE_ITEMS.length; i++) { creativePacket.getEntries().put(i + 1, ItemRegistry.CREATIVE_ITEMS[i]); } - upstream.sendPacket(creativePacket); + sendUpstreamPacket(creativePacket); PlayStatusPacket playStatusPacket = new PlayStatusPacket(); playStatusPacket.setStatus(PlayStatusPacket.Status.PLAYER_SPAWN); - upstream.sendPacket(playStatusPacket); + sendUpstreamPacket(playStatusPacket); UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket(); attributesPacket.setRuntimeEntityId(getPlayerEntity().getGeyserId()); @@ -247,7 +247,7 @@ public void connect(RemoteServer remoteServer) { // Bedrock clients move very fast by default until they get an attribute packet correcting the speed attributes.add(new AttributeData("minecraft:movement", 0.0f, 1024f, 0.1f, 0.1f)); attributesPacket.setAttributes(attributes); - upstream.sendPacket(attributesPacket); + sendUpstreamPacket(attributesPacket); } public void fetchOurSkin(PlayerListPacket.Entry entry) { @@ -257,7 +257,7 @@ public void fetchOurSkin(PlayerListPacket.Entry entry) { playerSkinPacket.setOldSkinName("OldName"); playerSkinPacket.setNewSkinName("NewName"); playerSkinPacket.setTrustedSkin(true); - upstream.sendPacket(playerSkinPacket); + sendUpstreamPacket(playerSkinPacket); getConnector().getLogger().debug("Sending skin for " + playerEntity.getUsername() + " " + authData.getUUID()); } @@ -481,7 +481,7 @@ public void sendMessage(String message) { textPacket.setNeedsTranslation(false); textPacket.setMessage(message); - upstream.sendPacket(textPacket); + sendUpstreamPacket(textPacket); } @Override @@ -500,7 +500,7 @@ public void setRenderDistance(int renderDistance) { ChunkRadiusUpdatedPacket chunkRadiusUpdatedPacket = new ChunkRadiusUpdatedPacket(); chunkRadiusUpdatedPacket.setRadius(renderDistance); - upstream.sendPacket(chunkRadiusUpdatedPacket); + sendUpstreamPacket(chunkRadiusUpdatedPacket); } public InetSocketAddress getSocketAddress() { @@ -560,7 +560,7 @@ private void startGame() { startGamePacket.setItemEntries(ItemRegistry.ITEMS); startGamePacket.setVanillaVersion("*"); // startGamePacket.setMovementServerAuthoritative(true); - upstream.sendPacket(startGamePacket); + sendUpstreamPacket(startGamePacket); } public boolean confirmTeleport(Vector3d position) { @@ -600,7 +600,7 @@ public void sendUpstreamPacket(BedrockPacket packet) { * @param packet the bedrock packet from the NukkitX protocol lib */ public void sendUpstreamPacketImmediately(BedrockPacket packet) { - connector.getEventManager().triggerEvent(new UpstreamPacketSendEvent(this, packet), packet.getClass()) + connector.getEventManager().triggerEvent(new UpstreamPacketSendEvent<>(this, packet), packet.getClass()) .onNotCancelled((result) -> { if (upstream != null && !upstream.isClosed()) { upstream.sendPacketImmediately(packet); From 7e62e7cf502158853a331ed1db92056078696dfc Mon Sep 17 00:00:00 2001 From: bundabrg Date: Tue, 7 Jul 2020 09:57:14 +0800 Subject: [PATCH 07/16] Fix Plugin Resource Loading --- .../geysermc/connector/plugin/GeyserPlugin.java | 2 +- .../connector/plugin/PluginClassLoader.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java b/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java index 825908c8a6a..607215e2fff 100644 --- a/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java +++ b/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java @@ -177,6 +177,6 @@ public File getDataFolder() { * Return an InputStream for a resource file */ public InputStream getResourceAsStream(String name) { - return getClass().getClassLoader().getResourceAsStream(name); + return getPluginClassLoader().getResourceAsStream(name); } } diff --git a/connector/src/main/java/org/geysermc/connector/plugin/PluginClassLoader.java b/connector/src/main/java/org/geysermc/connector/plugin/PluginClassLoader.java index f4dec8c13fc..47f24cc0eaa 100644 --- a/connector/src/main/java/org/geysermc/connector/plugin/PluginClassLoader.java +++ b/connector/src/main/java/org/geysermc/connector/plugin/PluginClassLoader.java @@ -187,6 +187,21 @@ protected Class findClass(String name) throws ClassNotFoundException { return cls; } + @Override + public URL getResource(String name) { + return findResource(name); + } + + @Override + public Enumeration getResources(String name) throws IOException { + return findResources(name); + } + + @Override + public InputStream getResourceAsStream(String name) { + return super.getResourceAsStream(name); + } + public static class InvalidPluginClassLoaderException extends Exception { InvalidPluginClassLoaderException(String msg) { super(msg); From 25792a27e4b93872f690eb38f07d373c10a3f26e Mon Sep 17 00:00:00 2001 From: bundabrg Date: Tue, 7 Jul 2020 12:07:00 +0800 Subject: [PATCH 08/16] Fix Resource Loading --- .../connector/plugin/GeyserPlugin.java | 19 ++++++++++++++++++- connector/src/main/resources/languages | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java b/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java index 607215e2fff..dcfe2df9b59 100644 --- a/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java +++ b/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java @@ -39,11 +39,16 @@ import org.geysermc.connector.plugin.annotations.Plugin; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLConnection; import java.util.ArrayList; import java.util.List; +import static jdk.xml.internal.SecuritySupport.getClassLoader; + /** * All GeyserPlugins extend from this */ @@ -177,6 +182,18 @@ public File getDataFolder() { * Return an InputStream for a resource file */ public InputStream getResourceAsStream(String name) { - return getPluginClassLoader().getResourceAsStream(name); + try { + URL url = getPluginClassLoader().getResource(name); + + if (url == null) { + return null; + } + + URLConnection connection = url.openConnection(); + connection.setUseCaches(false); + return connection.getInputStream(); + } catch (IOException ex) { + return null; + } } } diff --git a/connector/src/main/resources/languages b/connector/src/main/resources/languages index 08be7fdd7bd..fc8f930a238 160000 --- a/connector/src/main/resources/languages +++ b/connector/src/main/resources/languages @@ -1 +1 @@ -Subproject commit 08be7fdd7bd3c1ade46fa8968c04d3d67bb0d378 +Subproject commit fc8f930a238a375c7e3be6e5c7ea1720b61d0cca From 7acf67d2d7d3a728ce5a37c5200ab275ef09aad9 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Tue, 7 Jul 2020 15:53:38 +0800 Subject: [PATCH 09/16] Work on BlockStates --- .../event/events/LoadBedrockSkinEvent.java | 41 +++++++++++++++++++ .../events/RuntimeBlockStateReadEvent.java | 40 ++++++++++++++++++ .../world/block/BlockTranslator.java | 4 +- .../geysermc/connector/utils/SkinUtils.java | 7 ++++ connector/src/main/resources/languages | 2 +- 5 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/LoadBedrockSkinEvent.java create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/RuntimeBlockStateReadEvent.java diff --git a/connector/src/main/java/org/geysermc/connector/event/events/LoadBedrockSkinEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/LoadBedrockSkinEvent.java new file mode 100644 index 00000000000..104f9eac4c8 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/LoadBedrockSkinEvent.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.geysermc.connector.entity.PlayerEntity; +import org.geysermc.connector.network.session.auth.BedrockClientData; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class LoadBedrockSkinEvent extends CancellableGeyserEvent { + private PlayerEntity playerEntity; + private BedrockClientData clientData; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/RuntimeBlockStateReadEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/RuntimeBlockStateReadEvent.java new file mode 100644 index 00000000000..06a974557c3 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/RuntimeBlockStateReadEvent.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import com.nukkitx.nbt.NbtList; +import com.nukkitx.nbt.NbtMap; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@Data +public class RuntimeBlockStateReadEvent extends GeyserEvent { + private NbtList blockStates; +} diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java index b1d81e4d436..fa91c71948b 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java @@ -40,6 +40,7 @@ import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.event.EventManager; import org.geysermc.connector.event.events.BlockEntityRegistryEvent; +import org.geysermc.connector.event.events.RuntimeBlockStateReadEvent; import org.geysermc.connector.network.translators.world.block.entity.BlockEntity; import org.geysermc.connector.utils.FileUtils; import org.reflections.Reflections; @@ -84,7 +85,8 @@ public class BlockTranslator { NbtList blocksTag; try (NBTInputStream nbtInputStream = NbtUtils.createNetworkReader(stream)) { - blocksTag = (NbtList) nbtInputStream.readTag(); + blocksTag = EventManager.getInstance().triggerEvent(new RuntimeBlockStateReadEvent( + (NbtList) nbtInputStream.readTag())).getEvent().getBlockStates(); } catch (Exception e) { throw new AssertionError("Unable to get blocks from runtime block states", e); } diff --git a/connector/src/main/java/org/geysermc/connector/utils/SkinUtils.java b/connector/src/main/java/org/geysermc/connector/utils/SkinUtils.java index 225885769a5..2fc38a91b78 100644 --- a/connector/src/main/java/org/geysermc/connector/utils/SkinUtils.java +++ b/connector/src/main/java/org/geysermc/connector/utils/SkinUtils.java @@ -36,6 +36,8 @@ import org.geysermc.connector.common.AuthType; import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.entity.PlayerEntity; +import org.geysermc.connector.event.EventManager; +import org.geysermc.connector.event.events.LoadBedrockSkinEvent; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.session.auth.BedrockClientData; @@ -255,6 +257,10 @@ public static void requestAndHandleSkinAndCape(PlayerEntity entity, GeyserSessio } public static void handleBedrockSkin(PlayerEntity playerEntity, BedrockClientData clientData) { + if (EventManager.getInstance().triggerEvent(new LoadBedrockSkinEvent(playerEntity, clientData)).getEvent().isCancelled()) { + return; + } + GameProfileData data = GameProfileData.from(playerEntity.getProfile()); GeyserConnector.getInstance().getLogger().info(LanguageUtils.getLocaleStringLog("geyser.skin.bedrock.register", playerEntity.getUsername(), playerEntity.getUuid())); @@ -264,6 +270,7 @@ public static void handleBedrockSkin(PlayerEntity playerEntity, BedrockClientDat byte[] capeBytes = clientData.getCapeData(); byte[] geometryNameBytes = Base64.getDecoder().decode(clientData.getGeometryName().getBytes("UTF-8")); + System.err.println(new String(geometryNameBytes)); byte[] geometryBytes = Base64.getDecoder().decode(clientData.getGeometryData().getBytes("UTF-8")); if (skinBytes.length <= (128 * 128 * 4) && !clientData.isPersonaSkin()) { diff --git a/connector/src/main/resources/languages b/connector/src/main/resources/languages index fc8f930a238..08be7fdd7bd 160000 --- a/connector/src/main/resources/languages +++ b/connector/src/main/resources/languages @@ -1 +1 @@ -Subproject commit fc8f930a238a375c7e3be6e5c7ea1720b61d0cca +Subproject commit 08be7fdd7bd3c1ade46fa8968c04d3d67bb0d378 From f380091bb90fe6b3ffdac1d0d248ccf928f603fd Mon Sep 17 00:00:00 2001 From: bundabrg Date: Tue, 7 Jul 2020 18:53:36 +0800 Subject: [PATCH 10/16] BlockTranslator Events --- .../event/events/BuildBedrockStateEvent.java | 41 +++++++++++++++++ .../event/events/BuildBlockStateMapEvent.java | 41 +++++++++++++++++ .../world/block/BlockTranslator.java | 45 +++++++++++-------- connector/src/main/resources/languages | 2 +- 4 files changed, 109 insertions(+), 20 deletions(-) create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/BuildBedrockStateEvent.java create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/BuildBlockStateMapEvent.java diff --git a/connector/src/main/java/org/geysermc/connector/event/events/BuildBedrockStateEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/BuildBedrockStateEvent.java new file mode 100644 index 00000000000..e43238751d3 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/BuildBedrockStateEvent.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import com.fasterxml.jackson.databind.JsonNode; +import com.nukkitx.nbt.NbtMap; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class BuildBedrockStateEvent extends GeyserEvent { + JsonNode blockNode; + NbtMap blockState; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/BuildBlockStateMapEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/BuildBlockStateMapEvent.java new file mode 100644 index 00000000000..fe9b59f5593 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/BuildBlockStateMapEvent.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import com.nukkitx.nbt.NbtMap; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Map; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class BuildBlockStateMapEvent extends CancellableGeyserEvent { + Map blockStateMap; +} diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java index fa91c71948b..8add4610a09 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java @@ -40,6 +40,8 @@ import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.event.EventManager; import org.geysermc.connector.event.events.BlockEntityRegistryEvent; +import org.geysermc.connector.event.events.BuildBedrockStateEvent; +import org.geysermc.connector.event.events.BuildBlockStateMapEvent; import org.geysermc.connector.event.events.RuntimeBlockStateReadEvent; import org.geysermc.connector.network.translators.world.block.entity.BlockEntity; import org.geysermc.connector.utils.FileUtils; @@ -80,26 +82,29 @@ public class BlockTranslator { private static final int BLOCK_STATE_VERSION = 17825806; static { - /* Load block palette */ - InputStream stream = FileUtils.getResource("bedrock/runtime_block_states.dat"); - - NbtList blocksTag; - try (NBTInputStream nbtInputStream = NbtUtils.createNetworkReader(stream)) { - blocksTag = EventManager.getInstance().triggerEvent(new RuntimeBlockStateReadEvent( - (NbtList) nbtInputStream.readTag())).getEvent().getBlockStates(); - } catch (Exception e) { - throw new AssertionError("Unable to get blocks from runtime block states", e); - } - Map blockStateMap = new HashMap<>(); - for (NbtMap tag : blocksTag) { - if (blockStateMap.putIfAbsent(tag.getCompound("block"), tag) != null) { - throw new AssertionError("Duplicate block states in Bedrock palette"); - } - } - - stream = FileUtils.getResource("mappings/blocks.json"); + EventManager.getInstance().triggerEvent(new BuildBlockStateMapEvent(blockStateMap)) + .onNotCancelled(result -> { + /* Load block palette */ + InputStream stream = FileUtils.getResource("bedrock/runtime_block_states.dat"); + + NbtList blocksTag; + try (NBTInputStream nbtInputStream = NbtUtils.createNetworkReader(stream)) { + blocksTag = EventManager.getInstance().triggerEvent(new RuntimeBlockStateReadEvent( + (NbtList) nbtInputStream.readTag())).getEvent().getBlockStates(); + } catch (Exception e) { + throw new AssertionError("Unable to get blocks from runtime block states", e); + } + + for (NbtMap tag : blocksTag) { + if (blockStateMap.putIfAbsent(tag.getCompound("block"), tag) != null) { + throw new AssertionError("Duplicate block states in Bedrock palette"); + } + } + }); + + InputStream stream = FileUtils.getResource("mappings/blocks.json"); JsonNode blocks; try { blocks = GeyserConnector.JSON_MAPPER.readTree(stream); @@ -255,6 +260,7 @@ public class BlockTranslator { } BLOCKS = new NbtList<>(NbtType.COMPOUND, paletteList); + System.err.println(BLOCKS); } private BlockTranslator() { @@ -291,7 +297,8 @@ private static NbtMap buildBedrockState(JsonNode node) { } } tagBuilder.put("states", statesBuilder.build()); - return tagBuilder.build(); + + return EventManager.getInstance().triggerEvent(new BuildBedrockStateEvent(node, tagBuilder.build())).getEvent().getBlockState(); } public static int getBedrockBlockId(int state) { diff --git a/connector/src/main/resources/languages b/connector/src/main/resources/languages index 08be7fdd7bd..fc8f930a238 160000 --- a/connector/src/main/resources/languages +++ b/connector/src/main/resources/languages @@ -1 +1 @@ -Subproject commit 08be7fdd7bd3c1ade46fa8968c04d3d67bb0d378 +Subproject commit fc8f930a238a375c7e3be6e5c7ea1720b61d0cca From 7b5c304071d6e2a036fe86969358568484fc2f12 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Tue, 7 Jul 2020 20:28:02 +0800 Subject: [PATCH 11/16] Implement InventoryTranslatorRegistryEvent --- .../InventoryTranslatorRegistryEvent.java | 42 +++++++++++++++++++ .../inventory/InventoryTranslator.java | 8 ++-- 2 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/InventoryTranslatorRegistryEvent.java diff --git a/connector/src/main/java/org/geysermc/connector/event/events/InventoryTranslatorRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/InventoryTranslatorRegistryEvent.java new file mode 100644 index 00000000000..cc34e14a13c --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/InventoryTranslatorRegistryEvent.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events; + +import com.github.steveice10.mc.protocol.data.game.window.WindowType; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.geysermc.connector.network.translators.inventory.InventoryTranslator; + +import java.util.Map; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class InventoryTranslatorRegistryEvent extends GeyserEvent { + Map registeredTranslators; +} diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java index 7d06aed1404..39f8b15c9fb 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java @@ -29,6 +29,8 @@ import com.nukkitx.protocol.bedrock.data.inventory.ContainerType; import com.nukkitx.protocol.bedrock.data.inventory.InventoryActionData; import lombok.AllArgsConstructor; +import org.geysermc.connector.event.EventManager; +import org.geysermc.connector.event.events.InventoryTranslatorRegistryEvent; import org.geysermc.connector.inventory.Inventory; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.translators.inventory.updater.ContainerInventoryUpdater; @@ -41,7 +43,8 @@ @AllArgsConstructor public abstract class InventoryTranslator { - public static final Map INVENTORY_TRANSLATORS = new HashMap() { + public static final Map INVENTORY_TRANSLATORS = EventManager.getInstance() + .triggerEvent(new InventoryTranslatorRegistryEvent(new HashMap() { { put(null, new PlayerInventoryTranslator()); //player inventory put(WindowType.GENERIC_9X1, new SingleChestInventoryTranslator(9)); @@ -68,8 +71,7 @@ public abstract class InventoryTranslator { put(WindowType.HOPPER, new BlockInventoryTranslator(5, "minecraft:hopper[enabled=false,facing=down]", ContainerType.HOPPER, containerUpdater)); put(WindowType.SHULKER_BOX, new BlockInventoryTranslator(27, "minecraft:shulker_box[facing=north]", ContainerType.CONTAINER, containerUpdater)); //put(WindowType.BEACON, new BlockInventoryTranslator(1, "minecraft:beacon", ContainerType.BEACON)); //TODO - } - }; + }})).getEvent().getRegisteredTranslators(); public final int size; From af9c270a50d4f69b1f674ffea48b3358e0858a3e Mon Sep 17 00:00:00 2001 From: bundabrg Date: Fri, 10 Jul 2020 17:28:20 +0800 Subject: [PATCH 12/16] Clean up Triggers --- .../bungeecord/GeyserBungeePlugin.java | 2 +- .../platform/sponge/GeyserSpongePlugin.java | 2 +- .../standalone/GeyserStandaloneBootstrap.java | 2 +- .../velocity/GeyserVelocityPlugin.java | 2 +- .../geysermc/connector/GeyserConnector.java | 5 +- .../event/events/BuildBedrockStateEvent.java | 41 ----------- .../event/events/BuildBlockStateMapEvent.java | 41 ----------- .../events/{ => geyser}/GeyserStartEvent.java | 4 +- .../events/{ => geyser}/GeyserStopEvent.java | 4 +- .../{ => geyser}/LoadBedrockSkinEvent.java | 3 +- .../{ => geyser}/ResourceReadEvent.java | 3 +- .../BedrockCodecRegistryEvent.java | 3 +- .../{ => network}/BedrockPongEvent.java | 3 +- .../DownstreamPacketReceiveEvent.java | 3 +- .../DownstreamPacketSendEvent.java | 3 +- .../UpstreamPacketReceiveEvent.java | 3 +- .../{ => packet}/UpstreamPacketSendEvent.java | 3 +- .../{ => plugin}/PluginDisableEvent.java | 3 +- .../{ => plugin}/PluginEnableEvent.java | 3 +- .../{ => plugin}/PluginMessageEvent.java | 3 +- .../BlockEntityRegistryEvent.java | 3 +- .../BlockTranslatorRegistryEvent.java} | 24 ++++++- .../InventoryTranslatorRegistryEvent.java | 3 +- .../ItemRemapperRegistryEvent.java | 3 +- .../PacketTranslatorRegistryEvent.java | 3 +- .../SoundHandlerRegistryEvent.java | 3 +- .../network/ConnectorServerEventHandler.java | 2 +- .../network/UpstreamPacketHandler.java | 2 +- .../network/session/GeyserSession.java | 6 +- .../translators/PacketTranslatorRegistry.java | 2 +- .../inventory/InventoryTranslator.java | 2 +- .../translators/item/ItemTranslator.java | 2 +- .../java/JavaPluginMessageTranslator.java | 2 +- .../sound/SoundHandlerRegistry.java | 2 +- .../world/block/BlockTranslator.java | 70 ++++++++++--------- .../connector/plugin/GeyserPlugin.java | 6 +- .../connector/plugin/PluginManager.java | 1 - .../geysermc/connector/utils/FileUtils.java | 2 +- .../geysermc/connector/utils/SkinUtils.java | 2 +- connector/src/main/resources/languages | 2 +- 40 files changed, 118 insertions(+), 160 deletions(-) delete mode 100644 connector/src/main/java/org/geysermc/connector/event/events/BuildBedrockStateEvent.java delete mode 100644 connector/src/main/java/org/geysermc/connector/event/events/BuildBlockStateMapEvent.java rename connector/src/main/java/org/geysermc/connector/event/events/{ => geyser}/GeyserStartEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => geyser}/GeyserStopEvent.java (92%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => geyser}/LoadBedrockSkinEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => geyser}/ResourceReadEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => network}/BedrockCodecRegistryEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => network}/BedrockPongEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => packet}/DownstreamPacketReceiveEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => packet}/DownstreamPacketSendEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => packet}/UpstreamPacketReceiveEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => packet}/UpstreamPacketSendEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => plugin}/PluginDisableEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => plugin}/PluginEnableEvent.java (92%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => plugin}/PluginMessageEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => registry}/BlockEntityRegistryEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{RuntimeBlockStateReadEvent.java => registry/BlockTranslatorRegistryEvent.java} (60%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => registry}/InventoryTranslatorRegistryEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => registry}/ItemRemapperRegistryEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => registry}/PacketTranslatorRegistryEvent.java (93%) rename connector/src/main/java/org/geysermc/connector/event/events/{ => registry}/SoundHandlerRegistryEvent.java (93%) diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java b/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java index a3e7d169b5e..311fa5935da 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java @@ -36,7 +36,7 @@ import org.geysermc.connector.command.CommandManager; import org.geysermc.connector.configuration.GeyserConfiguration; import org.geysermc.connector.dump.BootstrapDumpInfo; -import org.geysermc.connector.event.events.GeyserStartEvent; +import org.geysermc.connector.event.events.geyser.GeyserStartEvent; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connector.utils.FileUtils; diff --git a/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java b/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java index 107d9439289..07c256c55ba 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java @@ -35,7 +35,7 @@ import org.geysermc.connector.bootstrap.GeyserBootstrap; import org.geysermc.connector.command.CommandManager; import org.geysermc.connector.dump.BootstrapDumpInfo; -import org.geysermc.connector.event.events.GeyserStartEvent; +import org.geysermc.connector.event.events.geyser.GeyserStartEvent; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connector.utils.FileUtils; diff --git a/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java b/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java index ac7bbfa29c3..8996128cf2c 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java @@ -37,7 +37,7 @@ import org.geysermc.connector.command.CommandManager; import org.geysermc.connector.configuration.GeyserConfiguration; import org.geysermc.connector.dump.BootstrapDumpInfo; -import org.geysermc.connector.event.events.GeyserStartEvent; +import org.geysermc.connector.event.events.geyser.GeyserStartEvent; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connector.utils.FileUtils; diff --git a/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java b/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java index efc69ce8bd1..220d8fca613 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java @@ -40,7 +40,7 @@ import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.bootstrap.GeyserBootstrap; import org.geysermc.connector.dump.BootstrapDumpInfo; -import org.geysermc.connector.event.events.GeyserStartEvent; +import org.geysermc.connector.event.events.geyser.GeyserStartEvent; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connector.utils.FileUtils; diff --git a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java index b13e5593b79..8ead035ca10 100644 --- a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java +++ b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java @@ -38,7 +38,7 @@ import org.geysermc.connector.command.CommandManager; import org.geysermc.connector.event.EventManager; import org.geysermc.connector.configuration.GeyserConfiguration; -import org.geysermc.connector.event.events.BedrockCodecRegistryEvent; +import org.geysermc.connector.event.events.network.BedrockCodecRegistryEvent; import org.geysermc.connector.metrics.Metrics; import org.geysermc.connector.network.ConnectorServerEventHandler; import org.geysermc.connector.network.remote.RemoteServer; @@ -56,8 +56,7 @@ import org.geysermc.connector.network.translators.world.block.BlockTranslator; import org.geysermc.connector.network.translators.world.block.entity.BlockEntityTranslator; import org.geysermc.connector.plugin.PluginManager; -import org.geysermc.connector.event.events.GeyserStopEvent; -import org.geysermc.connector.event.events.GeyserStartEvent; +import org.geysermc.connector.event.events.geyser.GeyserStopEvent; import org.geysermc.connector.utils.DimensionUtils; import org.geysermc.connector.utils.DockerCheck; import org.geysermc.connector.utils.LocaleUtils; diff --git a/connector/src/main/java/org/geysermc/connector/event/events/BuildBedrockStateEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/BuildBedrockStateEvent.java deleted file mode 100644 index e43238751d3..00000000000 --- a/connector/src/main/java/org/geysermc/connector/event/events/BuildBedrockStateEvent.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2019-2020 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.connector.event.events; - -import com.fasterxml.jackson.databind.JsonNode; -import com.nukkitx.nbt.NbtMap; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@Data -@AllArgsConstructor -public class BuildBedrockStateEvent extends GeyserEvent { - JsonNode blockNode; - NbtMap blockState; -} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/BuildBlockStateMapEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/BuildBlockStateMapEvent.java deleted file mode 100644 index fe9b59f5593..00000000000 --- a/connector/src/main/java/org/geysermc/connector/event/events/BuildBlockStateMapEvent.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2019-2020 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.connector.event.events; - -import com.nukkitx.nbt.NbtMap; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.util.Map; - -@EqualsAndHashCode(callSuper = true) -@Data -@AllArgsConstructor -public class BuildBlockStateMapEvent extends CancellableGeyserEvent { - Map blockStateMap; -} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/GeyserStartEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserStartEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/GeyserStartEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserStartEvent.java index 7c6a93c690f..5bb27f211c5 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/GeyserStartEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserStartEvent.java @@ -24,7 +24,9 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.geyser; + +import org.geysermc.connector.event.events.GeyserEvent; /** * EnableEvent is triggered for each plugin when enabling it diff --git a/connector/src/main/java/org/geysermc/connector/event/events/GeyserStopEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserStopEvent.java similarity index 92% rename from connector/src/main/java/org/geysermc/connector/event/events/GeyserStopEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserStopEvent.java index 2f3d3be5c6d..a72f06c6ae7 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/GeyserStopEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserStopEvent.java @@ -24,7 +24,9 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.geyser; + +import org.geysermc.connector.event.events.GeyserEvent; /** * DisableEvent is triggered for each plugin when disabling it diff --git a/connector/src/main/java/org/geysermc/connector/event/events/LoadBedrockSkinEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/geyser/LoadBedrockSkinEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/LoadBedrockSkinEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/geyser/LoadBedrockSkinEvent.java index 104f9eac4c8..0de88a38b02 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/LoadBedrockSkinEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/geyser/LoadBedrockSkinEvent.java @@ -24,12 +24,13 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.geyser; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import org.geysermc.connector.entity.PlayerEntity; +import org.geysermc.connector.event.events.CancellableGeyserEvent; import org.geysermc.connector.network.session.auth.BedrockClientData; @EqualsAndHashCode(callSuper = true) diff --git a/connector/src/main/java/org/geysermc/connector/event/events/ResourceReadEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/geyser/ResourceReadEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/ResourceReadEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/geyser/ResourceReadEvent.java index 9d765d66e1f..85089157a36 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/ResourceReadEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/geyser/ResourceReadEvent.java @@ -24,11 +24,12 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.geyser; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.GeyserEvent; import java.io.InputStream; diff --git a/connector/src/main/java/org/geysermc/connector/event/events/BedrockCodecRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/network/BedrockCodecRegistryEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/BedrockCodecRegistryEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/network/BedrockCodecRegistryEvent.java index ebd3224dcf3..2e8582d3724 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/BedrockCodecRegistryEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/network/BedrockCodecRegistryEvent.java @@ -24,12 +24,13 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.network; import com.nukkitx.protocol.bedrock.BedrockPacketCodec; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.GeyserEvent; @EqualsAndHashCode(callSuper = true) @AllArgsConstructor diff --git a/connector/src/main/java/org/geysermc/connector/event/events/BedrockPongEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/network/BedrockPongEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/BedrockPongEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/network/BedrockPongEvent.java index 49f6c8d0aee..4ddc7f9d2a9 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/BedrockPongEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/network/BedrockPongEvent.java @@ -24,12 +24,13 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.network; import com.nukkitx.protocol.bedrock.BedrockPong; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.GeyserEvent; import java.net.InetSocketAddress; diff --git a/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketReceiveEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/packet/DownstreamPacketReceiveEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketReceiveEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/packet/DownstreamPacketReceiveEvent.java index 97bd9df1fe8..683ba6a6ff3 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketReceiveEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/packet/DownstreamPacketReceiveEvent.java @@ -24,7 +24,7 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.packet; import com.github.steveice10.packetlib.packet.Packet; import lombok.AllArgsConstructor; @@ -32,6 +32,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; +import org.geysermc.connector.event.events.CancellableGeyserEvent; import org.geysermc.connector.network.session.GeyserSession; /** diff --git a/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketSendEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/packet/DownstreamPacketSendEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketSendEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/packet/DownstreamPacketSendEvent.java index dbd7fdfdd9f..c85ce075659 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/DownstreamPacketSendEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/packet/DownstreamPacketSendEvent.java @@ -24,7 +24,7 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.packet; import com.github.steveice10.packetlib.packet.Packet; import lombok.AllArgsConstructor; @@ -32,6 +32,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; +import org.geysermc.connector.event.events.CancellableGeyserEvent; import org.geysermc.connector.network.session.GeyserSession; /** diff --git a/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketReceiveEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/packet/UpstreamPacketReceiveEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketReceiveEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/packet/UpstreamPacketReceiveEvent.java index aca180ffb34..b837cbe86af 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketReceiveEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/packet/UpstreamPacketReceiveEvent.java @@ -24,12 +24,13 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.packet; import com.nukkitx.protocol.bedrock.BedrockPacket; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.CancellableGeyserEvent; import org.geysermc.connector.network.session.GeyserSession; /** diff --git a/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketSendEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/packet/UpstreamPacketSendEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketSendEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/packet/UpstreamPacketSendEvent.java index 1dd37f75bfb..4702d489fa4 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/UpstreamPacketSendEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/packet/UpstreamPacketSendEvent.java @@ -24,12 +24,13 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.packet; import com.nukkitx.protocol.bedrock.BedrockPacket; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.CancellableGeyserEvent; import org.geysermc.connector.network.session.GeyserSession; /** diff --git a/connector/src/main/java/org/geysermc/connector/event/events/PluginDisableEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/plugin/PluginDisableEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/PluginDisableEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/plugin/PluginDisableEvent.java index 4ad9cb826da..bec1bd29b5e 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/PluginDisableEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/plugin/PluginDisableEvent.java @@ -24,11 +24,12 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.plugin; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.GeyserEvent; import org.geysermc.connector.plugin.GeyserPlugin; @EqualsAndHashCode(callSuper = true) diff --git a/connector/src/main/java/org/geysermc/connector/event/events/PluginEnableEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/plugin/PluginEnableEvent.java similarity index 92% rename from connector/src/main/java/org/geysermc/connector/event/events/PluginEnableEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/plugin/PluginEnableEvent.java index 08867217fc1..ac2c3375ab2 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/PluginEnableEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/plugin/PluginEnableEvent.java @@ -24,11 +24,12 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.plugin; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.CancellableGeyserEvent; import org.geysermc.connector.plugin.GeyserPlugin; @EqualsAndHashCode(callSuper = true) diff --git a/connector/src/main/java/org/geysermc/connector/event/events/PluginMessageEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/plugin/PluginMessageEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/PluginMessageEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/plugin/PluginMessageEvent.java index 744459c0413..10c60501a7e 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/PluginMessageEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/plugin/PluginMessageEvent.java @@ -24,11 +24,12 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.plugin; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.CancellableGeyserEvent; import org.geysermc.connector.network.session.GeyserSession; @EqualsAndHashCode(callSuper = true) diff --git a/connector/src/main/java/org/geysermc/connector/event/events/BlockEntityRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/registry/BlockEntityRegistryEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/BlockEntityRegistryEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/registry/BlockEntityRegistryEvent.java index 440779a4cd3..f5d5c5d5284 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/BlockEntityRegistryEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/registry/BlockEntityRegistryEvent.java @@ -24,13 +24,14 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.registry; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; +import org.geysermc.connector.event.events.GeyserEvent; import java.util.Set; diff --git a/connector/src/main/java/org/geysermc/connector/event/events/RuntimeBlockStateReadEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/registry/BlockTranslatorRegistryEvent.java similarity index 60% rename from connector/src/main/java/org/geysermc/connector/event/events/RuntimeBlockStateReadEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/registry/BlockTranslatorRegistryEvent.java index 06a974557c3..d454f0ed6c8 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/RuntimeBlockStateReadEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/registry/BlockTranslatorRegistryEvent.java @@ -24,17 +24,35 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.registry; +import com.google.common.collect.BiMap; import com.nukkitx.nbt.NbtList; import com.nukkitx.nbt.NbtMap; +import it.unimi.dsi.fastutil.ints.Int2BooleanMap; +import it.unimi.dsi.fastutil.ints.Int2DoubleMap; +import it.unimi.dsi.fastutil.ints.Int2IntMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.IntSet; +import it.unimi.dsi.fastutil.objects.Object2IntMap; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.GeyserEvent; @EqualsAndHashCode(callSuper = true) @AllArgsConstructor @Data -public class RuntimeBlockStateReadEvent extends GeyserEvent { - private NbtList blockStates; +public class BlockTranslatorRegistryEvent extends GeyserEvent { + NbtList blocks; + Int2IntMap javaToBedrockBlockMap; + BiMap javaIdBlockMap; + IntSet waterlogged; + Object2IntMap itemFrames; + Int2ObjectMap javaIdToBlockEntityMap; + Int2DoubleMap javaRuntimeIdToHardness; + Int2BooleanMap javaRuntimeIdToCanHarvestWithHand; + Int2ObjectMap javaRuntimeIdToToolType; + IntSet javaRuntimeWoolIds; } diff --git a/connector/src/main/java/org/geysermc/connector/event/events/InventoryTranslatorRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/registry/InventoryTranslatorRegistryEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/InventoryTranslatorRegistryEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/registry/InventoryTranslatorRegistryEvent.java index cc34e14a13c..8e43ce74d6c 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/InventoryTranslatorRegistryEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/registry/InventoryTranslatorRegistryEvent.java @@ -24,12 +24,13 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.registry; import com.github.steveice10.mc.protocol.data.game.window.WindowType; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.GeyserEvent; import org.geysermc.connector.network.translators.inventory.InventoryTranslator; import java.util.Map; diff --git a/connector/src/main/java/org/geysermc/connector/event/events/ItemRemapperRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/registry/ItemRemapperRegistryEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/ItemRemapperRegistryEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/registry/ItemRemapperRegistryEvent.java index 45a8adacd45..cc44758cc78 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/ItemRemapperRegistryEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/registry/ItemRemapperRegistryEvent.java @@ -24,13 +24,14 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.registry; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; +import org.geysermc.connector.event.events.GeyserEvent; import java.util.Set; diff --git a/connector/src/main/java/org/geysermc/connector/event/events/PacketTranslatorRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/registry/PacketTranslatorRegistryEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/PacketTranslatorRegistryEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/registry/PacketTranslatorRegistryEvent.java index e3c47c1dd39..bcbb6d8873b 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/PacketTranslatorRegistryEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/registry/PacketTranslatorRegistryEvent.java @@ -24,11 +24,12 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.registry; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.GeyserEvent; import java.util.Set; diff --git a/connector/src/main/java/org/geysermc/connector/event/events/SoundHandlerRegistryEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/registry/SoundHandlerRegistryEvent.java similarity index 93% rename from connector/src/main/java/org/geysermc/connector/event/events/SoundHandlerRegistryEvent.java rename to connector/src/main/java/org/geysermc/connector/event/events/registry/SoundHandlerRegistryEvent.java index 95d16c92ed7..6bda7fc9471 100644 --- a/connector/src/main/java/org/geysermc/connector/event/events/SoundHandlerRegistryEvent.java +++ b/connector/src/main/java/org/geysermc/connector/event/events/registry/SoundHandlerRegistryEvent.java @@ -24,13 +24,14 @@ * */ -package org.geysermc.connector.event.events; +package org.geysermc.connector.event.events.registry; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; +import org.geysermc.connector.event.events.GeyserEvent; import java.util.Set; diff --git a/connector/src/main/java/org/geysermc/connector/network/ConnectorServerEventHandler.java b/connector/src/main/java/org/geysermc/connector/network/ConnectorServerEventHandler.java index 30faf732f49..9f97b40c965 100644 --- a/connector/src/main/java/org/geysermc/connector/network/ConnectorServerEventHandler.java +++ b/connector/src/main/java/org/geysermc/connector/network/ConnectorServerEventHandler.java @@ -35,7 +35,7 @@ import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.configuration.GeyserConfiguration; import org.geysermc.connector.event.EventManager; -import org.geysermc.connector.event.events.BedrockPongEvent; +import org.geysermc.connector.event.events.network.BedrockPongEvent; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.ping.IGeyserPingPassthrough; import org.geysermc.connector.utils.MessageUtils; diff --git a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java index d03082efd31..c01288c9ad0 100644 --- a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java +++ b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java @@ -30,7 +30,7 @@ import org.geysermc.connector.common.AuthType; import org.geysermc.connector.configuration.GeyserConfiguration; import org.geysermc.connector.GeyserConnector; -import org.geysermc.connector.event.events.UpstreamPacketReceiveEvent; +import org.geysermc.connector.event.events.packet.UpstreamPacketReceiveEvent; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.translators.PacketTranslatorRegistry; import org.geysermc.connector.utils.LoginEncryptionUtils; diff --git a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java index 4a49f0de445..a3e9fc2fabd 100644 --- a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java +++ b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java @@ -61,9 +61,9 @@ import org.geysermc.connector.common.AuthType; import org.geysermc.connector.entity.Entity; import org.geysermc.connector.entity.PlayerEntity; -import org.geysermc.connector.event.events.DownstreamPacketReceiveEvent; -import org.geysermc.connector.event.events.DownstreamPacketSendEvent; -import org.geysermc.connector.event.events.UpstreamPacketSendEvent; +import org.geysermc.connector.event.events.packet.DownstreamPacketReceiveEvent; +import org.geysermc.connector.event.events.packet.DownstreamPacketSendEvent; +import org.geysermc.connector.event.events.packet.UpstreamPacketSendEvent; import org.geysermc.connector.inventory.PlayerInventory; import org.geysermc.connector.network.remote.RemoteServer; import org.geysermc.connector.network.session.auth.AuthData; diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java b/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java index 9c85982a636..0e1ca598a38 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/PacketTranslatorRegistry.java @@ -33,7 +33,7 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.event.EventManager; -import org.geysermc.connector.event.events.PacketTranslatorRegistryEvent; +import org.geysermc.connector.event.events.registry.PacketTranslatorRegistryEvent; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.utils.LanguageUtils; import org.reflections.Reflections; diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java index 39f8b15c9fb..4cdd8b2c745 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/InventoryTranslator.java @@ -30,7 +30,7 @@ import com.nukkitx.protocol.bedrock.data.inventory.InventoryActionData; import lombok.AllArgsConstructor; import org.geysermc.connector.event.EventManager; -import org.geysermc.connector.event.events.InventoryTranslatorRegistryEvent; +import org.geysermc.connector.event.events.registry.InventoryTranslatorRegistryEvent; import org.geysermc.connector.inventory.Inventory; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.translators.inventory.updater.ContainerInventoryUpdater; diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/item/ItemTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/item/ItemTranslator.java index 969235801b6..51124423996 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/item/ItemTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/item/ItemTranslator.java @@ -41,7 +41,7 @@ import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.event.EventManager; -import org.geysermc.connector.event.events.ItemRemapperRegistryEvent; +import org.geysermc.connector.event.events.registry.ItemRemapperRegistryEvent; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.translators.ItemRemapper; import org.geysermc.connector.utils.LanguageUtils; diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPluginMessageTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPluginMessageTranslator.java index a19099eb3d6..51747e91b9d 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPluginMessageTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaPluginMessageTranslator.java @@ -26,7 +26,7 @@ package org.geysermc.connector.network.translators.java; import org.geysermc.connector.GeyserConnector; -import org.geysermc.connector.event.events.PluginMessageEvent; +import org.geysermc.connector.event.events.plugin.PluginMessageEvent; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.translators.PacketTranslator; import org.geysermc.connector.network.translators.Translator; diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/sound/SoundHandlerRegistry.java b/connector/src/main/java/org/geysermc/connector/network/translators/sound/SoundHandlerRegistry.java index b018bdcb0d8..bac50cc7f4c 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/sound/SoundHandlerRegistry.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/sound/SoundHandlerRegistry.java @@ -27,7 +27,7 @@ package org.geysermc.connector.network.translators.sound; import org.geysermc.connector.event.EventManager; -import org.geysermc.connector.event.events.SoundHandlerRegistryEvent; +import org.geysermc.connector.event.events.registry.SoundHandlerRegistryEvent; import org.reflections.Reflections; import java.util.HashMap; diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java index 8add4610a09..37740d24dcb 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/world/block/BlockTranslator.java @@ -39,10 +39,8 @@ import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.event.EventManager; -import org.geysermc.connector.event.events.BlockEntityRegistryEvent; -import org.geysermc.connector.event.events.BuildBedrockStateEvent; -import org.geysermc.connector.event.events.BuildBlockStateMapEvent; -import org.geysermc.connector.event.events.RuntimeBlockStateReadEvent; +import org.geysermc.connector.event.events.registry.BlockEntityRegistryEvent; +import org.geysermc.connector.event.events.registry.BlockTranslatorRegistryEvent; import org.geysermc.connector.network.translators.world.block.entity.BlockEntity; import org.geysermc.connector.utils.FileUtils; import org.reflections.Reflections; @@ -82,29 +80,25 @@ public class BlockTranslator { private static final int BLOCK_STATE_VERSION = 17825806; static { + /* Load block palette */ + InputStream stream = FileUtils.getResource("bedrock/runtime_block_states.dat"); + + NbtList blocksTag; + try (NBTInputStream nbtInputStream = NbtUtils.createNetworkReader(stream)) { + blocksTag = (NbtList) nbtInputStream.readTag(); + } catch (Exception e) { + throw new AssertionError("Unable to get blocks from runtime block states", e); + } + Map blockStateMap = new HashMap<>(); - EventManager.getInstance().triggerEvent(new BuildBlockStateMapEvent(blockStateMap)) - .onNotCancelled(result -> { - /* Load block palette */ - InputStream stream = FileUtils.getResource("bedrock/runtime_block_states.dat"); - - NbtList blocksTag; - try (NBTInputStream nbtInputStream = NbtUtils.createNetworkReader(stream)) { - blocksTag = EventManager.getInstance().triggerEvent(new RuntimeBlockStateReadEvent( - (NbtList) nbtInputStream.readTag())).getEvent().getBlockStates(); - } catch (Exception e) { - throw new AssertionError("Unable to get blocks from runtime block states", e); - } - - for (NbtMap tag : blocksTag) { - if (blockStateMap.putIfAbsent(tag.getCompound("block"), tag) != null) { - throw new AssertionError("Duplicate block states in Bedrock palette"); - } - } - }); - - InputStream stream = FileUtils.getResource("mappings/blocks.json"); + for (NbtMap tag : blocksTag) { + if (blockStateMap.putIfAbsent(tag.getCompound("block"), tag) != null) { + throw new AssertionError("Duplicate block states in Bedrock palette"); + } + } + + stream = FileUtils.getResource("mappings/blocks.json"); JsonNode blocks; try { blocks = GeyserConnector.JSON_MAPPER.readTree(stream); @@ -114,10 +108,10 @@ public class BlockTranslator { Object2IntMap addedStatesMap = new Object2IntOpenHashMap<>(); addedStatesMap.defaultReturnValue(-1); List paletteList = new ArrayList<>(); - - BlockEntityRegistryEvent blockEntityEvent = EventManager.getInstance().triggerEvent(new BlockEntityRegistryEvent( + + Set> blockEntityClasses = EventManager.getInstance().triggerEvent(new BlockEntityRegistryEvent( new Reflections("org.geysermc.connector.network.translators.world.block.entity").getTypesAnnotatedWith(BlockEntity.class)) - ).getEvent(); + ).getEvent().getRegisteredTranslators(); int waterRuntimeId = -1; int javaRuntimeId = -1; @@ -163,7 +157,7 @@ public class BlockTranslator { // Used for adding all "special" Java block states to block state map String identifier; String bedrock_identifer = entry.getValue().get("bedrock_identifier").asText(); - for (Class clazz : blockEntityEvent.getRegisteredTranslators()) { + for (Class clazz : blockEntityClasses) { identifier = clazz.getAnnotation(BlockEntity.class).regex(); // Endswith, or else the block bedrock gets picked up for bed if (bedrock_identifer.endsWith(identifier) && !identifier.equals("")) { @@ -260,7 +254,20 @@ public class BlockTranslator { } BLOCKS = new NbtList<>(NbtType.COMPOUND, paletteList); - System.err.println(BLOCKS); + + EventManager.getInstance().triggerEvent( + new BlockTranslatorRegistryEvent( + BLOCKS, + JAVA_TO_BEDROCK_BLOCK_MAP, + JAVA_ID_BLOCK_MAP, + WATERLOGGED, + ITEM_FRAMES, + JAVA_ID_TO_BLOCK_ENTITY_MAP, + JAVA_RUNTIME_ID_TO_HARDNESS, + JAVA_RUNTIME_ID_TO_CAN_HARVEST_WITH_HAND, + JAVA_RUNTIME_ID_TO_TOOL_TYPE, + JAVA_RUNTIME_WOOL_IDS + )); } private BlockTranslator() { @@ -297,8 +304,7 @@ private static NbtMap buildBedrockState(JsonNode node) { } } tagBuilder.put("states", statesBuilder.build()); - - return EventManager.getInstance().triggerEvent(new BuildBedrockStateEvent(node, tagBuilder.build())).getEvent().getBlockState(); + return tagBuilder.build(); } public static int getBedrockBlockId(int state) { diff --git a/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java b/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java index dcfe2df9b59..f35495ec163 100644 --- a/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java +++ b/connector/src/main/java/org/geysermc/connector/plugin/GeyserPlugin.java @@ -31,8 +31,8 @@ import org.geysermc.connector.event.EventManager; import org.geysermc.connector.event.annotations.Event; import org.geysermc.connector.event.events.GeyserEvent; -import org.geysermc.connector.event.events.PluginDisableEvent; -import org.geysermc.connector.event.events.PluginEnableEvent; +import org.geysermc.connector.event.events.plugin.PluginDisableEvent; +import org.geysermc.connector.event.events.plugin.PluginEnableEvent; import org.geysermc.connector.event.handlers.EventHandler; import org.geysermc.connector.plugin.handlers.PluginLambdaEventHandler; import org.geysermc.connector.plugin.handlers.PluginMethodEventHandler; @@ -47,8 +47,6 @@ import java.util.ArrayList; import java.util.List; -import static jdk.xml.internal.SecuritySupport.getClassLoader; - /** * All GeyserPlugins extend from this */ diff --git a/connector/src/main/java/org/geysermc/connector/plugin/PluginManager.java b/connector/src/main/java/org/geysermc/connector/plugin/PluginManager.java index ae4308c9fa1..3d4f202c91f 100644 --- a/connector/src/main/java/org/geysermc/connector/plugin/PluginManager.java +++ b/connector/src/main/java/org/geysermc/connector/plugin/PluginManager.java @@ -29,7 +29,6 @@ import lombok.Getter; import lombok.ToString; import org.geysermc.connector.GeyserConnector; -import org.geysermc.connector.event.events.PluginEnableEvent; import java.io.File; import java.io.FileNotFoundException; diff --git a/connector/src/main/java/org/geysermc/connector/utils/FileUtils.java b/connector/src/main/java/org/geysermc/connector/utils/FileUtils.java index 85110fd4c44..d7bff8e0cec 100644 --- a/connector/src/main/java/org/geysermc/connector/utils/FileUtils.java +++ b/connector/src/main/java/org/geysermc/connector/utils/FileUtils.java @@ -29,7 +29,7 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.event.EventManager; -import org.geysermc.connector.event.events.ResourceReadEvent; +import org.geysermc.connector.event.events.geyser.ResourceReadEvent; import java.io.File; import java.io.FileOutputStream; diff --git a/connector/src/main/java/org/geysermc/connector/utils/SkinUtils.java b/connector/src/main/java/org/geysermc/connector/utils/SkinUtils.java index 2fc38a91b78..cac1a0fb45c 100644 --- a/connector/src/main/java/org/geysermc/connector/utils/SkinUtils.java +++ b/connector/src/main/java/org/geysermc/connector/utils/SkinUtils.java @@ -37,7 +37,7 @@ import org.geysermc.connector.GeyserConnector; import org.geysermc.connector.entity.PlayerEntity; import org.geysermc.connector.event.EventManager; -import org.geysermc.connector.event.events.LoadBedrockSkinEvent; +import org.geysermc.connector.event.events.geyser.LoadBedrockSkinEvent; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.session.auth.BedrockClientData; diff --git a/connector/src/main/resources/languages b/connector/src/main/resources/languages index fc8f930a238..08be7fdd7bd 160000 --- a/connector/src/main/resources/languages +++ b/connector/src/main/resources/languages @@ -1 +1 @@ -Subproject commit fc8f930a238a375c7e3be6e5c7ea1720b61d0cca +Subproject commit 08be7fdd7bd3c1ade46fa8968c04d3d67bb0d378 From d1b71f936d2569896fc39db41a36185e46ead658 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Fri, 10 Jul 2020 18:02:24 +0800 Subject: [PATCH 13/16] Fix up changed dependencies --- .../java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java | 2 +- connector/src/main/resources/languages | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java b/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java index ed246a984a1..0d828c1ea33 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java @@ -33,7 +33,7 @@ import org.geysermc.connector.command.CommandManager; import org.geysermc.connector.configuration.GeyserConfiguration; import org.geysermc.connector.dump.BootstrapDumpInfo; -import org.geysermc.connector.event.events.GeyserStartEvent; +import org.geysermc.connector.event.events.geyser.GeyserStartEvent; import org.geysermc.connector.network.translators.world.WorldManager; import org.geysermc.connector.ping.GeyserLegacyPingPassthrough; import org.geysermc.connector.ping.IGeyserPingPassthrough; diff --git a/connector/src/main/resources/languages b/connector/src/main/resources/languages index 3ab423197a4..08be7fdd7bd 160000 --- a/connector/src/main/resources/languages +++ b/connector/src/main/resources/languages @@ -1 +1 @@ -Subproject commit 3ab423197a4a308665ad1dcb28cab522aabc0815 +Subproject commit 08be7fdd7bd3c1ade46fa8968c04d3d67bb0d378 From ac20e61bb4b9fe7e1fddd09d879df1d57bedf5a1 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Fri, 10 Jul 2020 20:25:33 +0800 Subject: [PATCH 14/16] Implement SessionConnectEvent, SessionDisconnectEvent, GeyserAuthenticationEvent --- .../geyser/GeyserAuthenticationEvent.java | 42 +++++++++++++++++++ .../events/network/SessionConnectEvent.java | 41 ++++++++++++++++++ .../network/SessionDisconnectEvent.java | 41 ++++++++++++++++++ .../network/session/GeyserSession.java | 14 +++++++ 4 files changed, 138 insertions(+) create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserAuthenticationEvent.java create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/network/SessionConnectEvent.java create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/network/SessionDisconnectEvent.java diff --git a/connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserAuthenticationEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserAuthenticationEvent.java new file mode 100644 index 00000000000..33f86ba34a8 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserAuthenticationEvent.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events.geyser; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.CancellableGeyserEvent; +import org.geysermc.connector.network.session.GeyserSession; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class GeyserAuthenticationEvent extends CancellableGeyserEvent { + final GeyserSession session; + String username; + String password; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/network/SessionConnectEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/network/SessionConnectEvent.java new file mode 100644 index 00000000000..eb324e6bc81 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/network/SessionConnectEvent.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events.network; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.CancellableGeyserEvent; +import org.geysermc.connector.network.remote.RemoteServer; +import org.geysermc.connector.network.session.GeyserSession; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class SessionConnectEvent extends CancellableGeyserEvent { + final GeyserSession session; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/network/SessionDisconnectEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/network/SessionDisconnectEvent.java new file mode 100644 index 00000000000..b49c9c2abef --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/network/SessionDisconnectEvent.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events.network; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.CancellableGeyserEvent; +import org.geysermc.connector.event.events.GeyserEvent; +import org.geysermc.connector.network.session.GeyserSession; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class SessionDisconnectEvent extends GeyserEvent { + final GeyserSession session; +} diff --git a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java index 821dbe66376..43f38149d77 100644 --- a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java +++ b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java @@ -61,6 +61,10 @@ import org.geysermc.connector.common.AuthType; import org.geysermc.connector.entity.Entity; import org.geysermc.connector.entity.PlayerEntity; +import org.geysermc.connector.event.EventManager; +import org.geysermc.connector.event.events.geyser.GeyserAuthenticationEvent; +import org.geysermc.connector.event.events.network.SessionConnectEvent; +import org.geysermc.connector.event.events.network.SessionDisconnectEvent; import org.geysermc.connector.event.events.packet.DownstreamPacketReceiveEvent; import org.geysermc.connector.event.events.packet.DownstreamPacketSendEvent; import org.geysermc.connector.event.events.packet.UpstreamPacketSendEvent; @@ -216,7 +220,13 @@ public GeyserSession(GeyserConnector connector, BedrockServerSession bedrockServ this.inventoryCache.getInventories().put(0, inventory); + if (EventManager.getInstance().triggerEvent(new SessionConnectEvent(this)).isCancelled()) { + disconnect(""); + } + bedrockServerSession.addDisconnectHandler(disconnectReason -> { + EventManager.getInstance().triggerEvent(new SessionDisconnectEvent(this)); + connector.getLogger().info(LanguageUtils.getLocaleStringLog("geyser.network.disconnect", bedrockServerSession.getAddress().getAddress(), disconnectReason)); disconnect(disconnectReason.name()); @@ -285,6 +295,10 @@ public void authenticate(String username) { } public void authenticate(String username, String password) { + if (EventManager.getInstance().triggerEvent(new GeyserAuthenticationEvent(this, username, password)).isCancelled()) { + return; + } + if (loggedIn) { connector.getLogger().severe(LanguageUtils.getLocaleStringLog("geyser.auth.already_loggedin", username)); return; From fb27df971eb28d1dfb7f2566082d60f811654fd2 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Sat, 11 Jul 2020 16:07:43 +0800 Subject: [PATCH 15/16] Provide better Plugin concurrency and fix a bug in DropdownComponent --- .../common/window/component/DropdownComponent.java | 3 ++- .../org/geysermc/connector/event/EventManager.java | 8 +++++--- .../connector/event/handlers/LambdaEventHandler.java | 5 +++++ .../connector/network/UpstreamPacketHandler.java | 10 +--------- connector/src/main/resources/languages | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/org/geysermc/common/window/component/DropdownComponent.java b/common/src/main/java/org/geysermc/common/window/component/DropdownComponent.java index 4dac6b04385..9bb5589572e 100644 --- a/common/src/main/java/org/geysermc/common/window/component/DropdownComponent.java +++ b/common/src/main/java/org/geysermc/common/window/component/DropdownComponent.java @@ -28,6 +28,7 @@ import lombok.Getter; import lombok.Setter; +import java.util.ArrayList; import java.util.List; public class DropdownComponent extends FormComponent { @@ -38,7 +39,7 @@ public class DropdownComponent extends FormComponent { @Getter @Setter - private List options; + private List options = new ArrayList<>(); @Getter @Setter diff --git a/connector/src/main/java/org/geysermc/connector/event/EventManager.java b/connector/src/main/java/org/geysermc/connector/event/EventManager.java index e9d1f9720c5..74a30c631e3 100644 --- a/connector/src/main/java/org/geysermc/connector/event/EventManager.java +++ b/connector/src/main/java/org/geysermc/connector/event/EventManager.java @@ -41,14 +41,15 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.PriorityQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.PriorityBlockingQueue; @SuppressWarnings("unused") @Getter public class EventManager { @Getter private static EventManager instance; - private final Map, PriorityQueue>> eventHandlers = new HashMap<>(); + private final Map, PriorityBlockingQueue>> eventHandlers = new ConcurrentHashMap<>(); private final Map>> classEventHandlers = new HashMap<>(); private final GeyserConnector connector; @@ -68,6 +69,7 @@ public EventManager(GeyserConnector connector) { */ public TriggerResult triggerEvent(T event, Class filter) { if (eventHandlers.containsKey(event.getClass())) { + for (EventHandler handler : eventHandlers.get(event.getClass())) { if (handler.hasFilter(filter)) { try { @@ -98,7 +100,7 @@ public LambdaEventHandler.Builder on(Class cls, La */ public void register(EventHandler handler) { if (!eventHandlers.containsKey(handler.getEventClass())) { - eventHandlers.put(handler.getEventClass(), new PriorityQueue<>()); + eventHandlers.put(handler.getEventClass(), new PriorityBlockingQueue<>()); } eventHandlers.get(handler.getEventClass()).add(handler); } diff --git a/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java b/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java index 4091c6cf616..e5aab6f5e20 100644 --- a/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java +++ b/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java @@ -105,6 +105,11 @@ public Builder filter(Class[] filter) { return this; } + public Builder filter(Class filter) { + this.filter = new Class[]{filter}; + return this; + } + public LambdaEventHandler build() { LambdaEventHandler handler = new LambdaEventHandler<>(manager, cls, runnable, priority, ignoreCancelled, filter); manager.register(handler); diff --git a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java index c01288c9ad0..fb1ebfd61f3 100644 --- a/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java +++ b/connector/src/main/java/org/geysermc/connector/network/UpstreamPacketHandler.java @@ -103,7 +103,7 @@ public boolean handle(ResourcePackClientResponsePacket packet) { @Override public boolean handle(ModalFormResponsePacket packet) { - if (connector.getEventManager().triggerEvent(new UpstreamPacketReceiveEvent<>(session, packet), ModalFormResponsePacket.class).isCancelled()) { + if (connector.getEventManager().triggerEvent(new UpstreamPacketReceiveEvent<>(session, packet), packet.getClass()).isCancelled()) { return true; } @@ -129,10 +129,6 @@ private boolean couldLoginUserByName(String bedrockUsername) { @Override public boolean handle(SetLocalPlayerAsInitializedPacket packet) { - if (connector.getEventManager().triggerEvent(new UpstreamPacketReceiveEvent<>(session, packet), SetLocalPlayerAsInitializedPacket.class).isCancelled()) { - return true; - } - LanguageUtils.loadGeyserLocale(session.getClientData().getLanguageCode()); if (!session.isLoggedIn() && !session.isLoggingIn() && session.getConnector().getAuthType() == AuthType.ONLINE) { @@ -147,10 +143,6 @@ public boolean handle(SetLocalPlayerAsInitializedPacket packet) { @Override public boolean handle(MovePlayerPacket packet) { - if (connector.getEventManager().triggerEvent(new UpstreamPacketReceiveEvent<>(session, packet), MovePlayerPacket.class).isCancelled()) { - return true; - } - if (session.isLoggingIn()) { session.sendMessage(LanguageUtils.getPlayerLocaleString("geyser.auth.login.wait", session.getClientData().getLanguageCode())); } diff --git a/connector/src/main/resources/languages b/connector/src/main/resources/languages index 08be7fdd7bd..3ab423197a4 160000 --- a/connector/src/main/resources/languages +++ b/connector/src/main/resources/languages @@ -1 +1 @@ -Subproject commit 08be7fdd7bd3c1ade46fa8968c04d3d67bb0d378 +Subproject commit 3ab423197a4a308665ad1dcb28cab522aabc0815 From 5950cdb7a99c471631abbdb323815700d59c2d66 Mon Sep 17 00:00:00 2001 From: bundabrg Date: Sat, 11 Jul 2020 21:49:23 +0800 Subject: [PATCH 16/16] Add LoginEvent and fix bug --- bootstrap/standalone/pom.xml | 6 +++ .../event/events/geyser/GeyserLoginEvent.java | 40 +++++++++++++++++++ .../event/handlers/LambdaEventHandler.java | 3 -- .../network/session/GeyserSession.java | 5 +++ 4 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserLoginEvent.java diff --git a/bootstrap/standalone/pom.xml b/bootstrap/standalone/pom.xml index 9956b7078bb..a3c72651c0f 100644 --- a/bootstrap/standalone/pom.xml +++ b/bootstrap/standalone/pom.xml @@ -70,6 +70,12 @@ log4j-slf4j18-impl 2.13.1 + + + org.xerial + sqlite-jdbc + 3.32.3 + ${outputName} diff --git a/connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserLoginEvent.java b/connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserLoginEvent.java new file mode 100644 index 00000000000..dc4c42c8e70 --- /dev/null +++ b/connector/src/main/java/org/geysermc/connector/event/events/geyser/GeyserLoginEvent.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2019-2020 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.connector.event.events.geyser; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.geysermc.connector.event.events.CancellableGeyserEvent; +import org.geysermc.connector.network.session.GeyserSession; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class GeyserLoginEvent extends CancellableGeyserEvent { + final GeyserSession session; +} diff --git a/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java b/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java index e5aab6f5e20..2302c0171f4 100644 --- a/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java +++ b/connector/src/main/java/org/geysermc/connector/event/handlers/LambdaEventHandler.java @@ -53,9 +53,6 @@ public LambdaEventHandler(EventManager manager, Class cls, Runnable runnab this.priority = priority; this.ignoreCancelled = ignoreCancelled; Collections.addAll(this.filter, filter); - - // Register with event manager - manager.register(this); } @Override diff --git a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java index 43f38149d77..69df3edeb50 100644 --- a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java +++ b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java @@ -63,6 +63,7 @@ import org.geysermc.connector.entity.PlayerEntity; import org.geysermc.connector.event.EventManager; import org.geysermc.connector.event.events.geyser.GeyserAuthenticationEvent; +import org.geysermc.connector.event.events.geyser.GeyserLoginEvent; import org.geysermc.connector.event.events.network.SessionConnectEvent; import org.geysermc.connector.event.events.network.SessionDisconnectEvent; import org.geysermc.connector.event.events.packet.DownstreamPacketReceiveEvent; @@ -280,6 +281,10 @@ public void fetchOurSkin(PlayerListPacket.Entry entry) { } public void login() { + if (EventManager.getInstance().triggerEvent(new GeyserLoginEvent(this)).isCancelled()) { + return; + } + if (connector.getAuthType() != AuthType.ONLINE) { if (connector.getAuthType() == AuthType.OFFLINE) { connector.getLogger().info(LanguageUtils.getLocaleStringLog("geyser.auth.login.offline"));