From c516add3ed3ee986c9a5bf1d945c31911ee23d75 Mon Sep 17 00:00:00 2001 From: RaydanOMGr Date: Fri, 3 May 2024 21:54:27 +0200 Subject: [PATCH] basically finished it, all that is left to do is to test the thing --- .github/workflows/build_fabric.yml | 6 +- .gitignore | 1 + .../glowingeyes/GlowingEyes.java | 8 +- .../glowingeyes/client/GlowingEyesClient.java | 7 +- .../client/GlowingEyesClientEvents.java | 9 +- .../client/GlowingEyesKeybindings.java | 2 +- .../data/ClientPlayerDataComponent.java | 13 +++ .../eyes/ClientGlowingEyesComponent.java | 20 +++++ .../client/gui/ColorPickerScreen.java | 3 +- .../client/gui/EyesEditorScreen.java | 5 +- .../client/gui/preset/CreatePresetScreen.java | 2 +- .../client/gui/preset/PresetsScreen.java | 2 +- .../packet/C2SComponentUpdatePacket.java | 48 +++++++++++ .../client/packet/C2SHasModPacket.java | 20 +++++ .../client/packet/ClientPacketManager.java | 8 ++ .../client/presets/PresetManager.java | 5 +- .../client/render/GlowingEyesHeadLayer.java | 5 +- .../client/util/DynamicTextureCache.java | 67 +++++++++++++++ .../glowingeyes/client/util/GuiUtil.java | 18 ++++ .../component/eyes/GlowingEyesImpl.java | 83 ------------------- .../common/packet/PacketManager.java | 8 -- .../{common => server}/GlowingEyesEvents.java | 6 +- .../component/ComponentHandler.java | 10 +-- .../component/data/IPlayerData.java | 2 +- .../component/data/PlayerDataComponent.java | 13 +-- .../component/data/PlayerDataImpl.java | 2 +- .../component/eyes/GlowingEyesComponent.java | 27 +----- .../component/eyes/GlowingEyesImpl.java | 44 ++++++++++ .../component/eyes/IGlowingEyes.java | 5 +- .../server/packet/PacketManager.java | 8 ++ .../packet/S2CComponentUpdatePacket.java} | 50 ++++------- .../packet/S2CHasModPacket.java} | 23 ++--- .../scheduler/CodeScheduler.java | 2 +- .../scheduler/CodeTask.java | 2 +- .../scheduler/Scheduler.java | 2 +- .../{common => server}/scheduler/Task.java | 2 +- .../{common => server}/util/Util.java | 22 +---- src/main/resources/fabric.mod.json | 2 +- 38 files changed, 319 insertions(+), 243 deletions(-) create mode 100644 src/main/java/me/andreasmelone/glowingeyes/client/component/data/ClientPlayerDataComponent.java create mode 100644 src/main/java/me/andreasmelone/glowingeyes/client/component/eyes/ClientGlowingEyesComponent.java create mode 100644 src/main/java/me/andreasmelone/glowingeyes/client/packet/C2SComponentUpdatePacket.java create mode 100644 src/main/java/me/andreasmelone/glowingeyes/client/packet/C2SHasModPacket.java create mode 100644 src/main/java/me/andreasmelone/glowingeyes/client/packet/ClientPacketManager.java create mode 100644 src/main/java/me/andreasmelone/glowingeyes/client/util/DynamicTextureCache.java delete mode 100644 src/main/java/me/andreasmelone/glowingeyes/common/component/eyes/GlowingEyesImpl.java delete mode 100644 src/main/java/me/andreasmelone/glowingeyes/common/packet/PacketManager.java rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/GlowingEyesEvents.java (90%) rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/component/ComponentHandler.java (81%) rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/component/data/IPlayerData.java (85%) rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/component/data/PlayerDataComponent.java (82%) rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/component/data/PlayerDataImpl.java (95%) rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/component/eyes/GlowingEyesComponent.java (71%) create mode 100644 src/main/java/me/andreasmelone/glowingeyes/server/component/eyes/GlowingEyesImpl.java rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/component/eyes/IGlowingEyes.java (68%) create mode 100644 src/main/java/me/andreasmelone/glowingeyes/server/packet/PacketManager.java rename src/main/java/me/andreasmelone/glowingeyes/{common/packet/ComponentUpdatePacket.java => server/packet/S2CComponentUpdatePacket.java} (51%) rename src/main/java/me/andreasmelone/glowingeyes/{common/packet/HasModPacket.java => server/packet/S2CHasModPacket.java} (61%) rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/scheduler/CodeScheduler.java (94%) rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/scheduler/CodeTask.java (88%) rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/scheduler/Scheduler.java (76%) rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/scheduler/Task.java (61%) rename src/main/java/me/andreasmelone/glowingeyes/{common => server}/util/Util.java (72%) diff --git a/.github/workflows/build_fabric.yml b/.github/workflows/build_fabric.yml index a9f57b2..78cfd96 100644 --- a/.github/workflows/build_fabric.yml +++ b/.github/workflows/build_fabric.yml @@ -5,13 +5,13 @@ # This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle -name: Build GlowingEyes for fabric/1.19.2 +name: Build GlowingEyes for fabric/1.19.4 on: push: - branches: [ "fabric/1.19.2" ] + branches: [ "fabric/1.19.4" ] pull_request: - branches: [ "fabric/1.19.2" ] + branches: [ "fabric/1.19.4" ] jobs: build: diff --git a/.gitignore b/.gitignore index 3c37caf..db038fa 100644 --- a/.gitignore +++ b/.gitignore @@ -113,6 +113,7 @@ gradle-app.setting # Common working directory run/ +run_server/ # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) !gradle-wrapper.jar diff --git a/src/main/java/me/andreasmelone/glowingeyes/GlowingEyes.java b/src/main/java/me/andreasmelone/glowingeyes/GlowingEyes.java index 985059d..3ff8866 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/GlowingEyes.java +++ b/src/main/java/me/andreasmelone/glowingeyes/GlowingEyes.java @@ -1,9 +1,9 @@ package me.andreasmelone.glowingeyes; -import me.andreasmelone.glowingeyes.common.GlowingEyesEvents; -import me.andreasmelone.glowingeyes.common.packet.PacketManager; -import me.andreasmelone.glowingeyes.common.scheduler.CodeScheduler; -import me.andreasmelone.glowingeyes.common.scheduler.Scheduler; +import me.andreasmelone.glowingeyes.server.GlowingEyesEvents; +import me.andreasmelone.glowingeyes.server.packet.PacketManager; +import me.andreasmelone.glowingeyes.server.scheduler.CodeScheduler; +import me.andreasmelone.glowingeyes.server.scheduler.Scheduler; import net.fabricmc.api.ModInitializer; import java.awt.*; diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesClient.java b/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesClient.java index 2024782..242be86 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesClient.java +++ b/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesClient.java @@ -4,8 +4,9 @@ import me.andreasmelone.glowingeyes.client.commands.EyesCommand; import me.andreasmelone.glowingeyes.client.presets.PresetManager; import me.andreasmelone.glowingeyes.client.render.RenderManager; -import me.andreasmelone.glowingeyes.common.scheduler.CodeScheduler; -import me.andreasmelone.glowingeyes.common.scheduler.Scheduler; +import me.andreasmelone.glowingeyes.client.packet.ClientPacketManager; +import me.andreasmelone.glowingeyes.server.scheduler.CodeScheduler; +import me.andreasmelone.glowingeyes.server.scheduler.Scheduler; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import org.slf4j.Logger; @@ -20,6 +21,8 @@ public void onInitializeClient() { ClientCommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> { EyesCommand.register(dispatcher); }); + + ClientPacketManager.registerHandlers(); GlowingEyesKeybindings.register(); GlowingEyesClientEvents.registerEvents(); RenderManager.init(); diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesClientEvents.java b/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesClientEvents.java index 7bb5e92..ad65dc9 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesClientEvents.java +++ b/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesClientEvents.java @@ -1,11 +1,9 @@ package me.andreasmelone.glowingeyes.client; -import me.andreasmelone.glowingeyes.client.gui.EyesEditorScreen; -import me.andreasmelone.glowingeyes.common.component.data.PlayerDataComponent; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesComponent; +import me.andreasmelone.glowingeyes.client.component.data.ClientPlayerDataComponent; +import me.andreasmelone.glowingeyes.client.util.DynamicTextureCache; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; -import net.minecraft.world.entity.player.Player; public class GlowingEyesClientEvents { public static void registerEvents() { @@ -13,6 +11,7 @@ public static void registerEvents() { GlowingEyesClient.CLIENT_SCHEDULER.tick(); }); - ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> PlayerDataComponent.sendRequest()); + ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> ClientPlayerDataComponent.sendRequest()); + ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> DynamicTextureCache.clear()); } } diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesKeybindings.java b/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesKeybindings.java index 3aa8f8f..9c66438 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesKeybindings.java +++ b/src/main/java/me/andreasmelone/glowingeyes/client/GlowingEyesKeybindings.java @@ -2,7 +2,7 @@ import com.mojang.blaze3d.platform.InputConstants; import me.andreasmelone.glowingeyes.client.gui.EyesEditorScreen; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesComponent; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.minecraft.client.KeyMapping; diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/component/data/ClientPlayerDataComponent.java b/src/main/java/me/andreasmelone/glowingeyes/client/component/data/ClientPlayerDataComponent.java new file mode 100644 index 0000000..5d7dee2 --- /dev/null +++ b/src/main/java/me/andreasmelone/glowingeyes/client/component/data/ClientPlayerDataComponent.java @@ -0,0 +1,13 @@ +package me.andreasmelone.glowingeyes.client.component.data; + +import me.andreasmelone.glowingeyes.client.packet.C2SHasModPacket; + +public class ClientPlayerDataComponent { + /** + * Sends a packet to the server so it knows the player has the mod installed + * This is needed, so the server can send the player the glowing eyes data + */ + public static void sendRequest() { + C2SHasModPacket.sendToServer(); + } +} diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/component/eyes/ClientGlowingEyesComponent.java b/src/main/java/me/andreasmelone/glowingeyes/client/component/eyes/ClientGlowingEyesComponent.java new file mode 100644 index 0000000..7f90566 --- /dev/null +++ b/src/main/java/me/andreasmelone/glowingeyes/client/component/eyes/ClientGlowingEyesComponent.java @@ -0,0 +1,20 @@ +package me.andreasmelone.glowingeyes.client.component.eyes; + +import me.andreasmelone.glowingeyes.client.packet.C2SComponentUpdatePacket; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.player.Player; + +public class ClientGlowingEyesComponent { + private ClientGlowingEyesComponent() { + } + + /** + * Client-side only method to send an update to the server + * Throws an exception when ran on the wrong side, so make sure to check the side before calling this method + */ + public static void sendUpdate() { + Player localPlayer = Minecraft.getInstance().player; + new C2SComponentUpdatePacket(localPlayer, GlowingEyesComponent.getComponent(localPlayer)).sendToServer(); + } +} diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/gui/ColorPickerScreen.java b/src/main/java/me/andreasmelone/glowingeyes/client/gui/ColorPickerScreen.java index 69427f2..d62bae4 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/client/gui/ColorPickerScreen.java +++ b/src/main/java/me/andreasmelone/glowingeyes/client/gui/ColorPickerScreen.java @@ -6,12 +6,11 @@ import me.andreasmelone.glowingeyes.client.util.ColorUtil; import me.andreasmelone.glowingeyes.client.util.GuiUtil; import me.andreasmelone.glowingeyes.client.util.TextureLocations; -import me.andreasmelone.glowingeyes.common.util.Util; +import me.andreasmelone.glowingeyes.server.util.Util; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; -import org.lwjgl.glfw.GLFW; import java.awt.*; import java.util.function.Consumer; diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/gui/EyesEditorScreen.java b/src/main/java/me/andreasmelone/glowingeyes/client/gui/EyesEditorScreen.java index 5d17f7a..8164fb1 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/client/gui/EyesEditorScreen.java +++ b/src/main/java/me/andreasmelone/glowingeyes/client/gui/EyesEditorScreen.java @@ -3,11 +3,12 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.logging.LogUtils; +import me.andreasmelone.glowingeyes.client.component.eyes.ClientGlowingEyesComponent; import me.andreasmelone.glowingeyes.client.gui.preset.PresetsScreen; import me.andreasmelone.glowingeyes.client.util.ColorUtil; import me.andreasmelone.glowingeyes.client.util.GuiUtil; import me.andreasmelone.glowingeyes.client.util.TextureLocations; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesComponent; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.components.Button; @@ -256,7 +257,7 @@ public void onClose() { GlowingEyesComponent.setGlowingEyesMap(player, pixels); saved.set(true); - GlowingEyesComponent.sendUpdate(); + ClientGlowingEyesComponent.sendUpdate(); } if(!saved.get()) { LogUtils.getLogger().error("Could not save glowing eyes map to player capability"); diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/gui/preset/CreatePresetScreen.java b/src/main/java/me/andreasmelone/glowingeyes/client/gui/preset/CreatePresetScreen.java index ee14a40..b273e94 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/client/gui/preset/CreatePresetScreen.java +++ b/src/main/java/me/andreasmelone/glowingeyes/client/gui/preset/CreatePresetScreen.java @@ -4,7 +4,7 @@ import me.andreasmelone.glowingeyes.client.presets.PresetManager; import me.andreasmelone.glowingeyes.client.util.GuiUtil; import me.andreasmelone.glowingeyes.client.util.TextureLocations; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesComponent; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.EditBox; diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/gui/preset/PresetsScreen.java b/src/main/java/me/andreasmelone/glowingeyes/client/gui/preset/PresetsScreen.java index 297f0d3..84e0ec6 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/client/gui/preset/PresetsScreen.java +++ b/src/main/java/me/andreasmelone/glowingeyes/client/gui/preset/PresetsScreen.java @@ -9,7 +9,7 @@ import me.andreasmelone.glowingeyes.client.presets.PresetManager; import me.andreasmelone.glowingeyes.client.util.GuiUtil; import me.andreasmelone.glowingeyes.client.util.TextureLocations; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesComponent; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/packet/C2SComponentUpdatePacket.java b/src/main/java/me/andreasmelone/glowingeyes/client/packet/C2SComponentUpdatePacket.java new file mode 100644 index 0000000..1a96c2e --- /dev/null +++ b/src/main/java/me/andreasmelone/glowingeyes/client/packet/C2SComponentUpdatePacket.java @@ -0,0 +1,48 @@ +package me.andreasmelone.glowingeyes.client.packet; + +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; +import me.andreasmelone.glowingeyes.server.component.eyes.IGlowingEyes; +import me.andreasmelone.glowingeyes.server.packet.S2CComponentUpdatePacket; +import me.andreasmelone.glowingeyes.server.util.Util; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Player; + +import java.util.UUID; + +public class C2SComponentUpdatePacket extends S2CComponentUpdatePacket { + public C2SComponentUpdatePacket() {} + + public C2SComponentUpdatePacket(UUID playerUUID, IGlowingEyes glowingEyes) { + this.playerUUID = playerUUID; + this.glowingEyes = glowingEyes; + } + + public C2SComponentUpdatePacket(Player player, IGlowingEyes glowingEyes) { + this(player.getUUID(), glowingEyes); + } + + public void sendToServer() { + FriendlyByteBuf buf = PacketByteBufs.create(); + buf.writeUUID(this.playerUUID); + buf.writeBoolean(glowingEyes.isToggledOn()); + buf.writeByteArray(Util.serializeMap(glowingEyes.getGlowingEyesMap())); + ClientPlayNetworking.send(ID, buf); + } + + public static void registerHandlers() { + ClientPlayNetworking.registerGlobalReceiver(S2CComponentUpdatePacket.ID, (client, handler, buf, responseSender) -> { + S2CComponentUpdatePacket packet = new S2CComponentUpdatePacket(); + packet.deserialize(buf); + client.execute(() -> { + Player target = client.level.getPlayerByUUID(packet.playerUUID); + if (target == null) { + return; + } + GlowingEyesComponent.setGlowingEyesMap(target, packet.glowingEyes.getGlowingEyesMap()); + GlowingEyesComponent.setToggledOn(target, packet.glowingEyes.isToggledOn()); + }); + }); + } +} diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/packet/C2SHasModPacket.java b/src/main/java/me/andreasmelone/glowingeyes/client/packet/C2SHasModPacket.java new file mode 100644 index 0000000..4ec31af --- /dev/null +++ b/src/main/java/me/andreasmelone/glowingeyes/client/packet/C2SHasModPacket.java @@ -0,0 +1,20 @@ +package me.andreasmelone.glowingeyes.client.packet; + +import me.andreasmelone.glowingeyes.server.component.data.PlayerDataComponent; +import me.andreasmelone.glowingeyes.server.packet.S2CHasModPacket; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; + +public class C2SHasModPacket extends S2CHasModPacket { + public static void sendToServer() { + ClientPlayNetworking.send(ID, PacketByteBufs.create()); + } + + public static void registerHandlers() { + ClientPlayNetworking.registerGlobalReceiver(S2CHasModPacket.ID, (client, handler, buf, responseSender) -> { + client.execute(() -> { + PlayerDataComponent.setHasMod(client.player, true); + }); + }); + } +} diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/packet/ClientPacketManager.java b/src/main/java/me/andreasmelone/glowingeyes/client/packet/ClientPacketManager.java new file mode 100644 index 0000000..2690cdf --- /dev/null +++ b/src/main/java/me/andreasmelone/glowingeyes/client/packet/ClientPacketManager.java @@ -0,0 +1,8 @@ +package me.andreasmelone.glowingeyes.client.packet; + +public class ClientPacketManager { + public static void registerHandlers() { + C2SComponentUpdatePacket.registerHandlers(); + C2SHasModPacket.registerHandlers(); + } +} diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/presets/PresetManager.java b/src/main/java/me/andreasmelone/glowingeyes/client/presets/PresetManager.java index acfc902..23965cf 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/client/presets/PresetManager.java +++ b/src/main/java/me/andreasmelone/glowingeyes/client/presets/PresetManager.java @@ -5,9 +5,10 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonSyntaxException; import com.mojang.logging.LogUtils; +import me.andreasmelone.glowingeyes.client.component.eyes.ClientGlowingEyesComponent; import me.andreasmelone.glowingeyes.client.presets.gson.GsonPresetsFileModel; import me.andreasmelone.glowingeyes.client.presets.gson.PointColorMapSerializer; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesComponent; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; import net.minecraft.client.Minecraft; import org.slf4j.Logger; @@ -100,7 +101,7 @@ public void applyPreset(int id) { Preset preset = this.presets.get(id); GlowingEyesComponent.setGlowingEyesMap(Minecraft.getInstance().player, preset.getContent()); - GlowingEyesComponent.sendUpdate(); + ClientGlowingEyesComponent.sendUpdate(); } public boolean hasPreset(int id) { diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/render/GlowingEyesHeadLayer.java b/src/main/java/me/andreasmelone/glowingeyes/client/render/GlowingEyesHeadLayer.java index b48eed5..fbea934 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/client/render/GlowingEyesHeadLayer.java +++ b/src/main/java/me/andreasmelone/glowingeyes/client/render/GlowingEyesHeadLayer.java @@ -2,7 +2,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesComponent; +import me.andreasmelone.glowingeyes.client.util.DynamicTextureCache; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.renderer.MultiBufferSource; @@ -23,7 +24,7 @@ public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, T t, float v, float v1, float v2, float v3, float v4, float v5) { if(GlowingEyesComponent.isToggledOn(t) && !t.isInvisible()) { - ResourceLocation eyeOverlayResource = GlowingEyesComponent.getGlowingEyesTexture(t); + ResourceLocation eyeOverlayResource = DynamicTextureCache.getTexture(GlowingEyesComponent.getGlowingEyesMap(t)); if(eyeOverlayResource == null) return; RenderType eyeRenderType = RenderType.eyes(eyeOverlayResource); diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/util/DynamicTextureCache.java b/src/main/java/me/andreasmelone/glowingeyes/client/util/DynamicTextureCache.java new file mode 100644 index 0000000..7ed9f4e --- /dev/null +++ b/src/main/java/me/andreasmelone/glowingeyes/client/util/DynamicTextureCache.java @@ -0,0 +1,67 @@ +package me.andreasmelone.glowingeyes.client.util; + +import com.mojang.blaze3d.platform.NativeImage; +import me.andreasmelone.glowingeyes.GlowingEyes; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.resources.ResourceLocation; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class DynamicTextureCache { + private DynamicTextureCache() { + } + + private static final Map, ResourceLocation> cache = new HashMap<>(); + + public static ResourceLocation getTexture(Map glowingEyesMap) { + ResourceLocation texture = cache.get(glowingEyesMap); + if (texture != null) { + return texture; + } + + texture = createTexture(glowingEyesMap); + cache.put(glowingEyesMap, texture); + return texture; + } + + public static void clear() { + for(ResourceLocation texture : cache.values()) { + Minecraft.getInstance().getTextureManager().release(texture); + } + cache.clear(); + } + + private static ResourceLocation createTexture(Map glowingEyesMap) { + BufferedImage image = new BufferedImage(64, 64, BufferedImage.TYPE_INT_ARGB); + for (Map.Entry entry : glowingEyesMap.entrySet()) { + Point point = entry.getKey(); + Color color = entry.getValue(); + image.setRGB(point.x + 8, point.y + 8, color.getRGB()); + } + + NativeImage nativeImage = GuiUtil.toNativeImage(image); + DynamicTexture dynamicTexture = new DynamicTexture(nativeImage); + return Minecraft.getInstance().getTextureManager().register(GlowingEyes.MOD_ID + "_" + UUID.randomUUID(), dynamicTexture); + } + + private static boolean areEqual(Map map1, Map map2) { + if (map1.size() != map2.size()) { + return false; + } + + for (Map.Entry entry : map1.entrySet()) { + K key = entry.getKey(); + V value = entry.getValue(); + if (!map2.containsKey(key) || !map2.get(key).equals(value)) { + return false; + } + } + + return true; + } +} diff --git a/src/main/java/me/andreasmelone/glowingeyes/client/util/GuiUtil.java b/src/main/java/me/andreasmelone/glowingeyes/client/util/GuiUtil.java index 83fccf7..cd66365 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/client/util/GuiUtil.java +++ b/src/main/java/me/andreasmelone/glowingeyes/client/util/GuiUtil.java @@ -1,11 +1,13 @@ package me.andreasmelone.glowingeyes.client.util; +import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.Gui; import net.minecraft.resources.ResourceLocation; import java.awt.*; +import java.awt.image.BufferedImage; public class GuiUtil { /** @@ -21,4 +23,20 @@ public static void drawBackground(PoseStack poseStack, ResourceLocation backgrou // Draw the background texture Gui.blit(poseStack, x, y, 0, 0, width, height, 256, 256); } + + public static NativeImage toNativeImage(BufferedImage image) { + NativeImage nativeImage = new NativeImage(image.getWidth(), image.getHeight(), true); + for (int y = 0; y < image.getHeight(); y++) { + for (int x = 0; x < image.getWidth(); x++) { + int argb = image.getRGB(x, y); + // native textures use BGR instead of RGB so we have to convert the color + Color bgr = new Color(argb); + bgr = new Color(bgr.getBlue(), bgr.getGreen(), bgr.getRed()); + + nativeImage.setPixelRGBA(x, y, bgr.getRGB()); + } + } + + return nativeImage; + } } diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/component/eyes/GlowingEyesImpl.java b/src/main/java/me/andreasmelone/glowingeyes/common/component/eyes/GlowingEyesImpl.java deleted file mode 100644 index 931a1c7..0000000 --- a/src/main/java/me/andreasmelone/glowingeyes/common/component/eyes/GlowingEyesImpl.java +++ /dev/null @@ -1,83 +0,0 @@ -package me.andreasmelone.glowingeyes.common.component.eyes; - -import me.andreasmelone.glowingeyes.GlowingEyes; -import me.andreasmelone.glowingeyes.common.util.Util; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.texture.DynamicTexture; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; - -import java.awt.*; -import java.awt.image.BufferedImage; -import java.util.HashMap; -import java.util.UUID; - -public class GlowingEyesImpl implements IGlowingEyes { - private boolean toggledOn = true; - private HashMap glowingEyesMap = new HashMap<>(); - - @Override - public HashMap getGlowingEyesMap() { - return this.glowingEyesMap; - } - - @Override - public void setGlowingEyesMap(HashMap glowingEyesMap) { - this.glowingEyesMap = glowingEyesMap; - try { - updateTexture(); - } catch (Exception ignored) { - /* - this only happens when the game is running on the wrong thread, - which only happens when we are running on the wrong side (server instead of client) - or when the method is called from the wrong thread - since I have no idea how to check that, I'll just try catch it lol - */ - } - } - - @Override - public boolean isToggledOn() { - return toggledOn; - } - - @Override - public void setToggledOn(boolean toggledOn) { - this.toggledOn = toggledOn; - } - - ResourceLocation resourceLocation; - @Override - public ResourceLocation getGlowingEyesTexture() { - return resourceLocation; - } - - private void updateTexture() { - if (resourceLocation != null) { - Minecraft.getInstance().getTextureManager().release(resourceLocation); - } - - BufferedImage eyeOverlayTexture = new BufferedImage(64, 64, BufferedImage.TYPE_INT_ARGB); - for (Point point : glowingEyesMap.keySet()) { - Color color = glowingEyesMap.get(point); - eyeOverlayTexture.setRGB(point.x + 8, point.y + 8, color.getRGB()); - } - DynamicTexture dynamicTexture = new DynamicTexture(Util.toNativeImage(eyeOverlayTexture)); - Minecraft.getInstance().getTextureManager().register( - resourceLocation = new ResourceLocation(GlowingEyes.MOD_ID + ":eyes_texture" + UUID.randomUUID()), - dynamicTexture - ); - } - - @Override - public void readFromNbt(CompoundTag tag) { - setToggledOn(tag.getBoolean("toggledOn")); - setGlowingEyesMap(Util.deserializeMap(tag.getByteArray("glowingEyesMap"))); - } - - @Override - public void writeToNbt(CompoundTag tag) { - tag.putBoolean("toggledOn", isToggledOn()); - tag.putByteArray("glowingEyesMap", Util.serializeMap(getGlowingEyesMap())); - } -} diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/packet/PacketManager.java b/src/main/java/me/andreasmelone/glowingeyes/common/packet/PacketManager.java deleted file mode 100644 index 40af1f6..0000000 --- a/src/main/java/me/andreasmelone/glowingeyes/common/packet/PacketManager.java +++ /dev/null @@ -1,8 +0,0 @@ -package me.andreasmelone.glowingeyes.common.packet; - -public class PacketManager { - public static void registerHandlers() { - ComponentUpdatePacket.registerHandlers(); - HasModPacket.registerHandlers(); - } -} diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/GlowingEyesEvents.java b/src/main/java/me/andreasmelone/glowingeyes/server/GlowingEyesEvents.java similarity index 90% rename from src/main/java/me/andreasmelone/glowingeyes/common/GlowingEyesEvents.java rename to src/main/java/me/andreasmelone/glowingeyes/server/GlowingEyesEvents.java index d6e54ae..0463823 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/GlowingEyesEvents.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/GlowingEyesEvents.java @@ -1,8 +1,8 @@ -package me.andreasmelone.glowingeyes.common; +package me.andreasmelone.glowingeyes.server; import me.andreasmelone.glowingeyes.GlowingEyes; -import me.andreasmelone.glowingeyes.common.component.data.PlayerDataComponent; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesComponent; +import me.andreasmelone.glowingeyes.server.component.data.PlayerDataComponent; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.networking.v1.EntityTrackingEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/component/ComponentHandler.java b/src/main/java/me/andreasmelone/glowingeyes/server/component/ComponentHandler.java similarity index 81% rename from src/main/java/me/andreasmelone/glowingeyes/common/component/ComponentHandler.java rename to src/main/java/me/andreasmelone/glowingeyes/server/component/ComponentHandler.java index 0c06113..6de0b2f 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/component/ComponentHandler.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/component/ComponentHandler.java @@ -1,4 +1,4 @@ -package me.andreasmelone.glowingeyes.common.component; +package me.andreasmelone.glowingeyes.server.component; import com.mojang.logging.LogUtils; import dev.onyxstudios.cca.api.v3.component.ComponentKey; @@ -7,10 +7,10 @@ import dev.onyxstudios.cca.api.v3.entity.EntityComponentInitializer; import dev.onyxstudios.cca.api.v3.entity.RespawnCopyStrategy; import me.andreasmelone.glowingeyes.GlowingEyes; -import me.andreasmelone.glowingeyes.common.component.data.IPlayerData; -import me.andreasmelone.glowingeyes.common.component.data.PlayerDataImpl; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesImpl; -import me.andreasmelone.glowingeyes.common.component.eyes.IGlowingEyes; +import me.andreasmelone.glowingeyes.server.component.data.IPlayerData; +import me.andreasmelone.glowingeyes.server.component.data.PlayerDataImpl; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesImpl; +import me.andreasmelone.glowingeyes.server.component.eyes.IGlowingEyes; import net.minecraft.resources.ResourceLocation; public class ComponentHandler implements EntityComponentInitializer { diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/component/data/IPlayerData.java b/src/main/java/me/andreasmelone/glowingeyes/server/component/data/IPlayerData.java similarity index 85% rename from src/main/java/me/andreasmelone/glowingeyes/common/component/data/IPlayerData.java rename to src/main/java/me/andreasmelone/glowingeyes/server/component/data/IPlayerData.java index 76cbc20..a805fd1 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/component/data/IPlayerData.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/component/data/IPlayerData.java @@ -1,4 +1,4 @@ -package me.andreasmelone.glowingeyes.common.component.data; +package me.andreasmelone.glowingeyes.server.component.data; import dev.onyxstudios.cca.api.v3.component.Component; import net.minecraft.world.entity.player.Player; diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/component/data/PlayerDataComponent.java b/src/main/java/me/andreasmelone/glowingeyes/server/component/data/PlayerDataComponent.java similarity index 82% rename from src/main/java/me/andreasmelone/glowingeyes/common/component/data/PlayerDataComponent.java rename to src/main/java/me/andreasmelone/glowingeyes/server/component/data/PlayerDataComponent.java index 5feffd8..a53ea71 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/component/data/PlayerDataComponent.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/component/data/PlayerDataComponent.java @@ -1,7 +1,6 @@ -package me.andreasmelone.glowingeyes.common.component.data; +package me.andreasmelone.glowingeyes.server.component.data; -import me.andreasmelone.glowingeyes.common.component.ComponentHandler; -import me.andreasmelone.glowingeyes.common.packet.HasModPacket; +import me.andreasmelone.glowingeyes.server.component.ComponentHandler; import net.minecraft.world.entity.player.Player; import java.util.Set; @@ -64,12 +63,4 @@ public static void addTrackedBy(Player playerTracked, Player trackedBy) { public static void removeTrackedBy(Player playerTracked, Player trackedBy) { getComponent(playerTracked).removeTrackedBy(trackedBy); } - - /** - * Sends a packet to the server so it knows the player has the mod installed - * This is needed, so the server can send the player the glowing eyes data - */ - public static void sendRequest() { - HasModPacket.sendToServer(); - } } diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/component/data/PlayerDataImpl.java b/src/main/java/me/andreasmelone/glowingeyes/server/component/data/PlayerDataImpl.java similarity index 95% rename from src/main/java/me/andreasmelone/glowingeyes/common/component/data/PlayerDataImpl.java rename to src/main/java/me/andreasmelone/glowingeyes/server/component/data/PlayerDataImpl.java index 22e5f85..7f56fd1 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/component/data/PlayerDataImpl.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/component/data/PlayerDataImpl.java @@ -1,4 +1,4 @@ -package me.andreasmelone.glowingeyes.common.component.data; +package me.andreasmelone.glowingeyes.server.component.data; import dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/component/eyes/GlowingEyesComponent.java b/src/main/java/me/andreasmelone/glowingeyes/server/component/eyes/GlowingEyesComponent.java similarity index 71% rename from src/main/java/me/andreasmelone/glowingeyes/common/component/eyes/GlowingEyesComponent.java rename to src/main/java/me/andreasmelone/glowingeyes/server/component/eyes/GlowingEyesComponent.java index 531194b..3aaf940 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/component/eyes/GlowingEyesComponent.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/component/eyes/GlowingEyesComponent.java @@ -1,9 +1,7 @@ -package me.andreasmelone.glowingeyes.common.component.eyes; +package me.andreasmelone.glowingeyes.server.component.eyes; -import me.andreasmelone.glowingeyes.common.component.ComponentHandler; -import me.andreasmelone.glowingeyes.common.packet.ComponentUpdatePacket; -import net.minecraft.client.Minecraft; -import net.minecraft.resources.ResourceLocation; +import me.andreasmelone.glowingeyes.server.component.ComponentHandler; +import me.andreasmelone.glowingeyes.server.packet.S2CComponentUpdatePacket; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; @@ -64,14 +62,6 @@ public static void setToggledOn(Player player, boolean toggledOn) { getComponent(player).setToggledOn(toggledOn); } - /** - * Gets the texture for the glowing eyes for a player - * @param player the player to get the glowing eyes texture for - * @return the glowing eyes texture - */ - public static ResourceLocation getGlowingEyesTexture(Player player) { - return getComponent(player).getGlowingEyesTexture(); - } /** * Server-side only method to send the updated component to the client @@ -87,15 +77,6 @@ public static void sendUpdate(ServerPlayer updatedPlayer) { * @param receivingPlayer another player who will receive the update */ public static void sendUpdate(ServerPlayer updatedPlayer, ServerPlayer receivingPlayer) { - new ComponentUpdatePacket(updatedPlayer, getComponent(updatedPlayer)).sendToClient(receivingPlayer); - } - - /** - * Client-side only method to send an update to the server - * Throws an exception when ran on the wrong side, so make sure to check the side before calling this method - */ - public static void sendUpdate() { - Player localPlayer = Minecraft.getInstance().player; - new ComponentUpdatePacket(localPlayer, getComponent(localPlayer)).sendToServer(); + new S2CComponentUpdatePacket(updatedPlayer, getComponent(updatedPlayer)).sendToClient(receivingPlayer); } } diff --git a/src/main/java/me/andreasmelone/glowingeyes/server/component/eyes/GlowingEyesImpl.java b/src/main/java/me/andreasmelone/glowingeyes/server/component/eyes/GlowingEyesImpl.java new file mode 100644 index 0000000..e6f9f86 --- /dev/null +++ b/src/main/java/me/andreasmelone/glowingeyes/server/component/eyes/GlowingEyesImpl.java @@ -0,0 +1,44 @@ +package me.andreasmelone.glowingeyes.server.component.eyes; + +import me.andreasmelone.glowingeyes.server.util.Util; +import net.minecraft.nbt.CompoundTag; + +import java.awt.*; +import java.util.HashMap; + +public class GlowingEyesImpl implements IGlowingEyes { + private boolean toggledOn = true; + private HashMap glowingEyesMap = new HashMap<>(); + + @Override + public HashMap getGlowingEyesMap() { + return this.glowingEyesMap; + } + + @Override + public void setGlowingEyesMap(HashMap glowingEyesMap) { + this.glowingEyesMap = glowingEyesMap; + } + + @Override + public boolean isToggledOn() { + return toggledOn; + } + + @Override + public void setToggledOn(boolean toggledOn) { + this.toggledOn = toggledOn; + } + + @Override + public void readFromNbt(CompoundTag tag) { + setToggledOn(tag.getBoolean("toggledOn")); + setGlowingEyesMap(Util.deserializeMap(tag.getByteArray("glowingEyesMap"))); + } + + @Override + public void writeToNbt(CompoundTag tag) { + tag.putBoolean("toggledOn", isToggledOn()); + tag.putByteArray("glowingEyesMap", Util.serializeMap(getGlowingEyesMap())); + } +} diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/component/eyes/IGlowingEyes.java b/src/main/java/me/andreasmelone/glowingeyes/server/component/eyes/IGlowingEyes.java similarity index 68% rename from src/main/java/me/andreasmelone/glowingeyes/common/component/eyes/IGlowingEyes.java rename to src/main/java/me/andreasmelone/glowingeyes/server/component/eyes/IGlowingEyes.java index a477ec0..7b62928 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/component/eyes/IGlowingEyes.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/component/eyes/IGlowingEyes.java @@ -1,7 +1,6 @@ -package me.andreasmelone.glowingeyes.common.component.eyes; +package me.andreasmelone.glowingeyes.server.component.eyes; import dev.onyxstudios.cca.api.v3.component.Component; -import net.minecraft.resources.ResourceLocation; import java.awt.*; import java.util.HashMap; @@ -11,6 +10,4 @@ public interface IGlowingEyes extends Component { void setGlowingEyesMap(HashMap glowingEyesMap); boolean isToggledOn(); void setToggledOn(boolean toggledOn); - - ResourceLocation getGlowingEyesTexture(); } diff --git a/src/main/java/me/andreasmelone/glowingeyes/server/packet/PacketManager.java b/src/main/java/me/andreasmelone/glowingeyes/server/packet/PacketManager.java new file mode 100644 index 0000000..226e633 --- /dev/null +++ b/src/main/java/me/andreasmelone/glowingeyes/server/packet/PacketManager.java @@ -0,0 +1,8 @@ +package me.andreasmelone.glowingeyes.server.packet; + +public class PacketManager { + public static void registerHandlers() { + S2CComponentUpdatePacket.registerHandlers(); + S2CHasModPacket.registerHandlers(); + } +} diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/packet/ComponentUpdatePacket.java b/src/main/java/me/andreasmelone/glowingeyes/server/packet/S2CComponentUpdatePacket.java similarity index 51% rename from src/main/java/me/andreasmelone/glowingeyes/common/packet/ComponentUpdatePacket.java rename to src/main/java/me/andreasmelone/glowingeyes/server/packet/S2CComponentUpdatePacket.java index 3d1a5c7..52805a5 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/packet/ComponentUpdatePacket.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/packet/S2CComponentUpdatePacket.java @@ -1,11 +1,10 @@ -package me.andreasmelone.glowingeyes.common.packet; +package me.andreasmelone.glowingeyes.server.packet; import me.andreasmelone.glowingeyes.GlowingEyes; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesComponent; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesImpl; -import me.andreasmelone.glowingeyes.common.component.eyes.IGlowingEyes; -import me.andreasmelone.glowingeyes.common.util.Util; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesImpl; +import me.andreasmelone.glowingeyes.server.component.eyes.IGlowingEyes; +import me.andreasmelone.glowingeyes.server.util.Util; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.fabricmc.fabric.api.networking.v1.PlayerLookup; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; @@ -16,20 +15,20 @@ import java.util.UUID; -public class ComponentUpdatePacket { +public class S2CComponentUpdatePacket { public static final ResourceLocation ID = new ResourceLocation(GlowingEyes.MOD_ID, "capability_update"); - private UUID playerUUID; - private IGlowingEyes glowingEyes; + public UUID playerUUID; + public IGlowingEyes glowingEyes; - public ComponentUpdatePacket() {} + public S2CComponentUpdatePacket() {} - public ComponentUpdatePacket(UUID playerUUID, IGlowingEyes glowingEyes) { + public S2CComponentUpdatePacket(UUID playerUUID, IGlowingEyes glowingEyes) { this.playerUUID = playerUUID; this.glowingEyes = glowingEyes; } - public ComponentUpdatePacket(Player player, IGlowingEyes glowingEyes) { + public S2CComponentUpdatePacket(Player player, IGlowingEyes glowingEyes) { this(player.getUUID(), glowingEyes); } @@ -40,14 +39,6 @@ public void deserialize(FriendlyByteBuf buf) { glowingEyes.setGlowingEyesMap(Util.deserializeMap(buf.readByteArray())); } - public void sendToServer() { - FriendlyByteBuf buf = PacketByteBufs.create(); - buf.writeUUID(this.playerUUID); - buf.writeBoolean(glowingEyes.isToggledOn()); - buf.writeByteArray(Util.serializeMap(glowingEyes.getGlowingEyesMap())); - ClientPlayNetworking.send(ID, buf); - } - public void sendToClient(ServerPlayer player) { FriendlyByteBuf buf = PacketByteBufs.create(); buf.writeUUID(this.playerUUID); @@ -57,8 +48,8 @@ public void sendToClient(ServerPlayer player) { } public static void registerHandlers() { - ServerPlayNetworking.registerGlobalReceiver(ID, (server, player, handler, buf, responseSender) -> { - ComponentUpdatePacket packet = new ComponentUpdatePacket(); + ServerPlayNetworking.registerGlobalReceiver(S2CComponentUpdatePacket.ID, (server, player, handler, buf, responseSender) -> { + S2CComponentUpdatePacket packet = new S2CComponentUpdatePacket(); packet.deserialize(buf); server.execute(() -> { Player target = server.getPlayerList().getPlayer(packet.playerUUID); @@ -68,23 +59,10 @@ public static void registerHandlers() { for (ServerPlayer serverPlayer : PlayerLookup.tracking(target)) { if (serverPlayer == target) return; - ComponentUpdatePacket newPacket = new ComponentUpdatePacket(target, packet.glowingEyes); + S2CComponentUpdatePacket newPacket = new S2CComponentUpdatePacket(target, packet.glowingEyes); newPacket.sendToClient(serverPlayer); } }); }); - - ClientPlayNetworking.registerGlobalReceiver(ID, (client, handler, buf, responseSender) -> { - ComponentUpdatePacket packet = new ComponentUpdatePacket(); - packet.deserialize(buf); - client.execute(() -> { - Player target = client.level.getPlayerByUUID(packet.playerUUID); - if (target == null) { - return; - } - GlowingEyesComponent.setGlowingEyesMap(target, packet.glowingEyes.getGlowingEyesMap()); - GlowingEyesComponent.setToggledOn(target, packet.glowingEyes.isToggledOn()); - }); - }); } } diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/packet/HasModPacket.java b/src/main/java/me/andreasmelone/glowingeyes/server/packet/S2CHasModPacket.java similarity index 61% rename from src/main/java/me/andreasmelone/glowingeyes/common/packet/HasModPacket.java rename to src/main/java/me/andreasmelone/glowingeyes/server/packet/S2CHasModPacket.java index 667d6b7..b6f2b19 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/packet/HasModPacket.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/packet/S2CHasModPacket.java @@ -1,31 +1,26 @@ -package me.andreasmelone.glowingeyes.common.packet; +package me.andreasmelone.glowingeyes.server.packet; import me.andreasmelone.glowingeyes.GlowingEyes; -import me.andreasmelone.glowingeyes.common.component.data.PlayerDataComponent; -import me.andreasmelone.glowingeyes.common.component.eyes.GlowingEyesComponent; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import me.andreasmelone.glowingeyes.server.component.data.PlayerDataComponent; +import me.andreasmelone.glowingeyes.server.component.eyes.GlowingEyesComponent; import net.fabricmc.fabric.api.networking.v1.PacketByteBufs; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; -public class HasModPacket { +public class S2CHasModPacket { public static final ResourceLocation ID = new ResourceLocation(GlowingEyes.MOD_ID, "has_mod"); - public static void sendToServer() { - ClientPlayNetworking.send(ID, PacketByteBufs.create()); - } - public static void sendToClient(ServerPlayer player) { ServerPlayNetworking.send(player, ID, PacketByteBufs.create()); } public static void registerHandlers() { - ServerPlayNetworking.registerGlobalReceiver(ID, (server, player, handler, buf, responseSender) -> { + ServerPlayNetworking.registerGlobalReceiver(S2CHasModPacket.ID, (server, player, handler, buf, responseSender) -> { server.execute(() -> { PlayerDataComponent.setHasMod(player, true); - sendToClient(player); + S2CHasModPacket.sendToClient(player); GlowingEyesComponent.sendUpdate(player); for (Player trackedByPlayer : PlayerDataComponent.getTrackedBy(player)) { @@ -37,11 +32,5 @@ public static void registerHandlers() { } }); }); - - ClientPlayNetworking.registerGlobalReceiver(ID, (client, handler, buf, responseSender) -> { - client.execute(() -> { - PlayerDataComponent.setHasMod(client.player, true); - }); - }); } } diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/scheduler/CodeScheduler.java b/src/main/java/me/andreasmelone/glowingeyes/server/scheduler/CodeScheduler.java similarity index 94% rename from src/main/java/me/andreasmelone/glowingeyes/common/scheduler/CodeScheduler.java rename to src/main/java/me/andreasmelone/glowingeyes/server/scheduler/CodeScheduler.java index 3e90a75..757e8dd 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/scheduler/CodeScheduler.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/scheduler/CodeScheduler.java @@ -1,4 +1,4 @@ -package me.andreasmelone.glowingeyes.common.scheduler; +package me.andreasmelone.glowingeyes.server.scheduler; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/scheduler/CodeTask.java b/src/main/java/me/andreasmelone/glowingeyes/server/scheduler/CodeTask.java similarity index 88% rename from src/main/java/me/andreasmelone/glowingeyes/common/scheduler/CodeTask.java rename to src/main/java/me/andreasmelone/glowingeyes/server/scheduler/CodeTask.java index 47ce405..d501f0a 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/scheduler/CodeTask.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/scheduler/CodeTask.java @@ -1,4 +1,4 @@ -package me.andreasmelone.glowingeyes.common.scheduler; +package me.andreasmelone.glowingeyes.server.scheduler; public class CodeTask implements Task { private final Runnable runnable; diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/scheduler/Scheduler.java b/src/main/java/me/andreasmelone/glowingeyes/server/scheduler/Scheduler.java similarity index 76% rename from src/main/java/me/andreasmelone/glowingeyes/common/scheduler/Scheduler.java rename to src/main/java/me/andreasmelone/glowingeyes/server/scheduler/Scheduler.java index 3384ea7..4b557b0 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/scheduler/Scheduler.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/scheduler/Scheduler.java @@ -1,4 +1,4 @@ -package me.andreasmelone.glowingeyes.common.scheduler; +package me.andreasmelone.glowingeyes.server.scheduler; public interface Scheduler { Task runLater(Runnable runnable, long ticks); diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/scheduler/Task.java b/src/main/java/me/andreasmelone/glowingeyes/server/scheduler/Task.java similarity index 61% rename from src/main/java/me/andreasmelone/glowingeyes/common/scheduler/Task.java rename to src/main/java/me/andreasmelone/glowingeyes/server/scheduler/Task.java index ca59c91..fb16c9b 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/scheduler/Task.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/scheduler/Task.java @@ -1,4 +1,4 @@ -package me.andreasmelone.glowingeyes.common.scheduler; +package me.andreasmelone.glowingeyes.server.scheduler; public interface Task { void run(); diff --git a/src/main/java/me/andreasmelone/glowingeyes/common/util/Util.java b/src/main/java/me/andreasmelone/glowingeyes/server/util/Util.java similarity index 72% rename from src/main/java/me/andreasmelone/glowingeyes/common/util/Util.java rename to src/main/java/me/andreasmelone/glowingeyes/server/util/Util.java index 0d1032e..18aff8c 100644 --- a/src/main/java/me/andreasmelone/glowingeyes/common/util/Util.java +++ b/src/main/java/me/andreasmelone/glowingeyes/server/util/Util.java @@ -1,9 +1,5 @@ -package me.andreasmelone.glowingeyes.common.util; +package me.andreasmelone.glowingeyes.server.util; -import com.mojang.blaze3d.platform.NativeImage; - -import java.awt.*; -import java.awt.image.BufferedImage; import java.io.*; import java.util.Map; @@ -46,22 +42,6 @@ public static , K extends Serializable, V extends Serializ } } - public static NativeImage toNativeImage(BufferedImage image) { - NativeImage nativeImage = new NativeImage(image.getWidth(), image.getHeight(), true); - for (int y = 0; y < image.getHeight(); y++) { - for (int x = 0; x < image.getWidth(); x++) { - int argb = image.getRGB(x, y); - // native textures use BGR instead of RGB so we have to convert the color - Color bgr = new Color(argb); - bgr = new Color(bgr.getBlue(), bgr.getGreen(), bgr.getRed()); - - nativeImage.setPixelRGBA(x, y, bgr.getRGB()); - } - } - - return nativeImage; - } - public static float round(float value, int places) { if (places < 0) throw new IllegalArgumentException(); long factor = (long) Math.pow(10, places); diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 417249d..275d4c1 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -21,7 +21,7 @@ "me.andreasmelone.glowingeyes.GlowingEyes" ], "cardinal-components": [ - "me.andreasmelone.glowingeyes.common.component.ComponentHandler" + "me.andreasmelone.glowingeyes.server.component.ComponentHandler" ] }, "depends": {