From ead6762eb1c005914b05f9d3c29f334989c67513 Mon Sep 17 00:00:00 2001 From: nea Date: Tue, 16 May 2023 01:23:43 +0200 Subject: Replace references to NEU with Firmament --- .../java/moe/nea/firmament/init/MixinPlugin.java | 46 ++++ .../firmament/mixins/MixinClientPacketHandler.java | 23 ++ .../mixins/MixinDownloadingTerrainScreen.java | 16 ++ .../nea/firmament/mixins/MixinMessageHandler.java | 34 +++ .../moe/nea/firmament/mixins/MixinMinecraft.java | 26 +++ .../nea/firmament/mixins/MixinWorldRenderer.java | 26 +++ .../mixins/accessor/AccessorHandledScreen.java | 14 ++ .../mixins/devenv/DisableCommonPacketWarnings.java | 37 ++++ .../mixins/devenv/DisableInvalidFishingHook.java | 15 ++ .../firmament/mixins/devenv/MixinScoreboard.java | 15 ++ .../moe/nea/notenoughupdates/init/MixinPlugin.java | 47 ---- .../mixins/MixinClientPacketHandler.java | 23 -- .../mixins/MixinDownloadingTerrainScreen.java | 16 -- .../mixins/MixinMessageHandler.java | 34 --- .../notenoughupdates/mixins/MixinMinecraft.java | 26 --- .../mixins/MixinWorldRenderer.java | 26 --- .../mixins/accessor/AccessorHandledScreen.java | 14 -- .../mixins/devenv/DisableCommonPacketWarnings.java | 37 ---- .../mixins/devenv/DisableInvalidFishingHook.java | 15 -- .../mixins/devenv/MixinScoreboard.java | 16 -- src/main/kotlin/moe/nea/firmament/Firmament.kt | 92 ++++++++ src/main/kotlin/moe/nea/firmament/commands/dsl.kt | 81 +++++++ src/main/kotlin/moe/nea/firmament/commands/rome.kt | 66 ++++++ .../nea/firmament/dbus/FirmamentDbusInterface.kt | 11 + .../moe/nea/firmament/dbus/FirmamentDbusObject.kt | 21 ++ .../kotlin/moe/nea/firmament/events/NEUEvent.kt | 36 +++ .../kotlin/moe/nea/firmament/events/NEUEventBus.kt | 37 ++++ .../moe/nea/firmament/events/ParticleSpawnEvent.kt | 13 ++ .../moe/nea/firmament/events/ScreenOpenEvent.kt | 7 + .../events/ServerChatLineReceivedEvent.kt | 13 ++ .../firmament/events/SkyblockServerUpdateEvent.kt | 13 ++ .../moe/nea/firmament/events/WorldReadyEvent.kt | 5 + .../nea/firmament/events/WorldRenderLastEvent.kt | 22 ++ .../moe/nea/firmament/features/FeatureManager.kt | 53 +++++ .../moe/nea/firmament/features/NEUFeature.kt | 18 ++ .../firmament/features/fishing/FishingWarning.kt | 117 ++++++++++ .../moe/nea/firmament/features/world/FairySouls.kt | 120 ++++++++++ src/main/kotlin/moe/nea/firmament/gui/ConfigGui.kt | 94 ++++++++ .../moe/nea/firmament/gui/WGridPanelWithPadding.kt | 33 +++ src/main/kotlin/moe/nea/firmament/gui/repogui.kt | 36 +++ .../moe/nea/firmament/hud/RepoDownloadProgress.kt | 63 ++++++ .../moe/nea/firmament/recipes/SBCraftingRecipe.kt | 53 +++++ .../moe/nea/firmament/recipes/SBForgeRecipe.kt | 53 +++++ .../kotlin/moe/nea/firmament/recipes/SBRecipe.kt | 24 ++ .../moe/nea/firmament/rei/FirmamentReiPlugin.kt | 73 +++++++ .../moe/nea/firmament/rei/NEUItemEntryRenderer.kt | 31 +++ .../nea/firmament/rei/NEUItemEntrySerializer.kt | 25 +++ .../moe/nea/firmament/rei/SBItemEntryDefinition.kt | 85 +++++++ .../rei/SkyblockCraftingRecipeDynamicGenerator.kt | 52 +++++ .../rei/SkyblockItemIdFocusedStackProvider.kt | 25 +++ .../kotlin/moe/nea/firmament/repo/ItemCache.kt | 123 +++++++++++ .../moe/nea/firmament/repo/RepoDownloadManager.kt | 118 ++++++++++ .../kotlin/moe/nea/firmament/repo/RepoManager.kt | 102 +++++++++ src/main/kotlin/moe/nea/firmament/util/ItemUtil.kt | 24 ++ .../moe/nea/firmament/util/LegacyTagParser.kt | 243 +++++++++++++++++++++ src/main/kotlin/moe/nea/firmament/util/Locraw.kt | 8 + src/main/kotlin/moe/nea/firmament/util/MC.kt | 13 ++ .../moe/nea/firmament/util/MinecraftDispatcher.kt | 22 ++ src/main/kotlin/moe/nea/firmament/util/SBData.kt | 62 ++++++ .../kotlin/moe/nea/firmament/util/ScreenUtil.kt | 36 +++ .../kotlin/moe/nea/firmament/util/SequenceUtil.kt | 9 + .../kotlin/moe/nea/firmament/util/SkyblockId.kt | 48 ++++ src/main/kotlin/moe/nea/firmament/util/TimeMark.kt | 15 ++ src/main/kotlin/moe/nea/firmament/util/Timer.kt | 23 ++ .../moe/nea/firmament/util/config/ManagedConfig.kt | 204 +++++++++++++++++ .../moe/nea/firmament/util/data/DataHolder.kt | 60 +++++ .../moe/nea/firmament/util/data/IDataHolder.kt | 75 +++++++ .../util/data/ProfileSpecificDataHolder.kt | 82 +++++++ .../kotlin/moe/nea/firmament/util/render/block.kt | 105 +++++++++ src/main/kotlin/moe/nea/firmament/util/textutil.kt | 70 ++++++ .../moe/nea/notenoughupdates/NotEnoughUpdates.kt | 92 -------- .../moe/nea/notenoughupdates/commands/dsl.kt | 81 ------- .../moe/nea/notenoughupdates/commands/rome.kt | 66 ------ .../nea/notenoughupdates/dbus/NEUDbusInterface.kt | 11 - .../moe/nea/notenoughupdates/dbus/NEUDbusObject.kt | 21 -- .../moe/nea/notenoughupdates/events/NEUEvent.kt | 36 --- .../moe/nea/notenoughupdates/events/NEUEventBus.kt | 37 ---- .../notenoughupdates/events/ParticleSpawnEvent.kt | 13 -- .../nea/notenoughupdates/events/ScreenOpenEvent.kt | 7 - .../events/ServerChatLineReceivedEvent.kt | 13 -- .../events/SkyblockServerUpdateEvent.kt | 13 -- .../nea/notenoughupdates/events/WorldReadyEvent.kt | 5 - .../events/WorldRenderLastEvent.kt | 22 -- .../notenoughupdates/features/FeatureManager.kt | 53 ----- .../nea/notenoughupdates/features/NEUFeature.kt | 18 -- .../features/fishing/FishingWarning.kt | 117 ---------- .../notenoughupdates/features/world/FairySouls.kt | 120 ---------- .../moe/nea/notenoughupdates/gui/ConfigGui.kt | 94 -------- .../notenoughupdates/gui/WGridPanelWithPadding.kt | 33 --- .../kotlin/moe/nea/notenoughupdates/gui/repogui.kt | 36 --- .../notenoughupdates/hud/RepoDownloadProgress.kt | 63 ------ .../notenoughupdates/recipes/SBCraftingRecipe.kt | 53 ----- .../nea/notenoughupdates/recipes/SBForgeRecipe.kt | 53 ----- .../moe/nea/notenoughupdates/recipes/SBRecipe.kt | 24 -- .../notenoughupdates/rei/NEUItemEntryRenderer.kt | 31 --- .../notenoughupdates/rei/NEUItemEntrySerializer.kt | 25 --- .../moe/nea/notenoughupdates/rei/NEUReiPlugin.kt | 73 ------- .../notenoughupdates/rei/SBItemEntryDefinition.kt | 85 ------- .../rei/SkyblockCraftingRecipeDynamicGenerator.kt | 52 ----- .../rei/SkyblockItemIdFocusedStackProvider.kt | 25 --- .../moe/nea/notenoughupdates/repo/ItemCache.kt | 123 ----------- .../notenoughupdates/repo/RepoDownloadManager.kt | 118 ---------- .../moe/nea/notenoughupdates/repo/RepoManager.kt | 102 --------- .../moe/nea/notenoughupdates/util/ItemUtil.kt | 24 -- .../nea/notenoughupdates/util/LegacyTagParser.kt | 243 --------------------- .../kotlin/moe/nea/notenoughupdates/util/Locraw.kt | 8 - .../kotlin/moe/nea/notenoughupdates/util/MC.kt | 13 -- .../notenoughupdates/util/MinecraftDispatcher.kt | 22 -- .../kotlin/moe/nea/notenoughupdates/util/SBData.kt | 64 ------ .../moe/nea/notenoughupdates/util/ScreenUtil.kt | 36 --- .../moe/nea/notenoughupdates/util/SequenceUtil.kt | 9 - .../moe/nea/notenoughupdates/util/SkyblockId.kt | 48 ---- .../moe/nea/notenoughupdates/util/TimeMark.kt | 15 -- .../kotlin/moe/nea/notenoughupdates/util/Timer.kt | 23 -- .../notenoughupdates/util/config/ManagedConfig.kt | 206 ----------------- .../nea/notenoughupdates/util/data/DataHolder.kt | 60 ----- .../nea/notenoughupdates/util/data/IDataHolder.kt | 75 ------- .../util/data/ProfileSpecificDataHolder.kt | 82 ------- .../moe/nea/notenoughupdates/util/render/block.kt | 105 --------- .../moe/nea/notenoughupdates/util/textutil.kt | 70 ------ src/main/resources/assets/firmament/icon.png | Bin 0 -> 20279 bytes .../resources/assets/firmament/lang/en_us.json | 26 +++ .../resources/assets/notenoughupdates/icon.png | Bin 20279 -> 0 bytes .../assets/notenoughupdates/lang/en_us.json | 26 --- src/main/resources/fabric.mod.json | 18 +- src/main/resources/firmament.accesswidener | 1 + src/main/resources/firmament.mixins.json | 22 ++ src/main/resources/notenoughupdates.accesswidener | 1 - src/main/resources/notenoughupdates.mixins.json | 22 -- 129 files changed, 3124 insertions(+), 3130 deletions(-) create mode 100644 src/main/java/moe/nea/firmament/init/MixinPlugin.java create mode 100644 src/main/java/moe/nea/firmament/mixins/MixinClientPacketHandler.java create mode 100644 src/main/java/moe/nea/firmament/mixins/MixinDownloadingTerrainScreen.java create mode 100644 src/main/java/moe/nea/firmament/mixins/MixinMessageHandler.java create mode 100644 src/main/java/moe/nea/firmament/mixins/MixinMinecraft.java create mode 100644 src/main/java/moe/nea/firmament/mixins/MixinWorldRenderer.java create mode 100644 src/main/java/moe/nea/firmament/mixins/accessor/AccessorHandledScreen.java create mode 100644 src/main/java/moe/nea/firmament/mixins/devenv/DisableCommonPacketWarnings.java create mode 100644 src/main/java/moe/nea/firmament/mixins/devenv/DisableInvalidFishingHook.java create mode 100644 src/main/java/moe/nea/firmament/mixins/devenv/MixinScoreboard.java delete mode 100644 src/main/java/moe/nea/notenoughupdates/init/MixinPlugin.java delete mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/MixinClientPacketHandler.java delete mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/MixinDownloadingTerrainScreen.java delete mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/MixinMessageHandler.java delete mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/MixinMinecraft.java delete mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/MixinWorldRenderer.java delete mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/accessor/AccessorHandledScreen.java delete mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/devenv/DisableCommonPacketWarnings.java delete mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/devenv/DisableInvalidFishingHook.java delete mode 100644 src/main/java/moe/nea/notenoughupdates/mixins/devenv/MixinScoreboard.java create mode 100644 src/main/kotlin/moe/nea/firmament/Firmament.kt create mode 100644 src/main/kotlin/moe/nea/firmament/commands/dsl.kt create mode 100644 src/main/kotlin/moe/nea/firmament/commands/rome.kt create mode 100644 src/main/kotlin/moe/nea/firmament/dbus/FirmamentDbusInterface.kt create mode 100644 src/main/kotlin/moe/nea/firmament/dbus/FirmamentDbusObject.kt create mode 100644 src/main/kotlin/moe/nea/firmament/events/NEUEvent.kt create mode 100644 src/main/kotlin/moe/nea/firmament/events/NEUEventBus.kt create mode 100644 src/main/kotlin/moe/nea/firmament/events/ParticleSpawnEvent.kt create mode 100644 src/main/kotlin/moe/nea/firmament/events/ScreenOpenEvent.kt create mode 100644 src/main/kotlin/moe/nea/firmament/events/ServerChatLineReceivedEvent.kt create mode 100644 src/main/kotlin/moe/nea/firmament/events/SkyblockServerUpdateEvent.kt create mode 100644 src/main/kotlin/moe/nea/firmament/events/WorldReadyEvent.kt create mode 100644 src/main/kotlin/moe/nea/firmament/events/WorldRenderLastEvent.kt create mode 100644 src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt create mode 100644 src/main/kotlin/moe/nea/firmament/features/NEUFeature.kt create mode 100644 src/main/kotlin/moe/nea/firmament/features/fishing/FishingWarning.kt create mode 100644 src/main/kotlin/moe/nea/firmament/features/world/FairySouls.kt create mode 100644 src/main/kotlin/moe/nea/firmament/gui/ConfigGui.kt create mode 100644 src/main/kotlin/moe/nea/firmament/gui/WGridPanelWithPadding.kt create mode 100644 src/main/kotlin/moe/nea/firmament/gui/repogui.kt create mode 100644 src/main/kotlin/moe/nea/firmament/hud/RepoDownloadProgress.kt create mode 100644 src/main/kotlin/moe/nea/firmament/recipes/SBCraftingRecipe.kt create mode 100644 src/main/kotlin/moe/nea/firmament/recipes/SBForgeRecipe.kt create mode 100644 src/main/kotlin/moe/nea/firmament/recipes/SBRecipe.kt create mode 100644 src/main/kotlin/moe/nea/firmament/rei/FirmamentReiPlugin.kt create mode 100644 src/main/kotlin/moe/nea/firmament/rei/NEUItemEntryRenderer.kt create mode 100644 src/main/kotlin/moe/nea/firmament/rei/NEUItemEntrySerializer.kt create mode 100644 src/main/kotlin/moe/nea/firmament/rei/SBItemEntryDefinition.kt create mode 100644 src/main/kotlin/moe/nea/firmament/rei/SkyblockCraftingRecipeDynamicGenerator.kt create mode 100644 src/main/kotlin/moe/nea/firmament/rei/SkyblockItemIdFocusedStackProvider.kt create mode 100644 src/main/kotlin/moe/nea/firmament/repo/ItemCache.kt create mode 100644 src/main/kotlin/moe/nea/firmament/repo/RepoDownloadManager.kt create mode 100644 src/main/kotlin/moe/nea/firmament/repo/RepoManager.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/ItemUtil.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/LegacyTagParser.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/Locraw.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/MC.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/MinecraftDispatcher.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/SBData.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/ScreenUtil.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/SequenceUtil.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/SkyblockId.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/TimeMark.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/Timer.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/config/ManagedConfig.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/data/DataHolder.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/data/IDataHolder.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/data/ProfileSpecificDataHolder.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/render/block.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/textutil.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/NotEnoughUpdates.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/commands/dsl.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/commands/rome.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/dbus/NEUDbusInterface.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/dbus/NEUDbusObject.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/events/NEUEvent.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/events/NEUEventBus.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/events/ParticleSpawnEvent.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/events/ScreenOpenEvent.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/events/ServerChatLineReceivedEvent.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/events/SkyblockServerUpdateEvent.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/events/WorldReadyEvent.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/events/WorldRenderLastEvent.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/features/FeatureManager.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/features/NEUFeature.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/features/fishing/FishingWarning.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/features/world/FairySouls.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/gui/ConfigGui.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/gui/WGridPanelWithPadding.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/gui/repogui.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/hud/RepoDownloadProgress.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/recipes/SBCraftingRecipe.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/recipes/SBForgeRecipe.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/recipes/SBRecipe.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/rei/NEUItemEntryRenderer.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/rei/NEUItemEntrySerializer.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/rei/NEUReiPlugin.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/rei/SBItemEntryDefinition.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/rei/SkyblockCraftingRecipeDynamicGenerator.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/rei/SkyblockItemIdFocusedStackProvider.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/repo/ItemCache.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/repo/RepoDownloadManager.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/repo/RepoManager.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/ItemUtil.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/LegacyTagParser.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/Locraw.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/MC.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/MinecraftDispatcher.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/SBData.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/ScreenUtil.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/SequenceUtil.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/SkyblockId.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/TimeMark.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/Timer.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/config/ManagedConfig.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/data/DataHolder.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/data/IDataHolder.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/data/ProfileSpecificDataHolder.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/render/block.kt delete mode 100644 src/main/kotlin/moe/nea/notenoughupdates/util/textutil.kt create mode 100644 src/main/resources/assets/firmament/icon.png create mode 100644 src/main/resources/assets/firmament/lang/en_us.json delete mode 100644 src/main/resources/assets/notenoughupdates/icon.png delete mode 100644 src/main/resources/assets/notenoughupdates/lang/en_us.json create mode 100644 src/main/resources/firmament.accesswidener create mode 100644 src/main/resources/firmament.mixins.json delete mode 100644 src/main/resources/notenoughupdates.accesswidener delete mode 100644 src/main/resources/notenoughupdates.mixins.json (limited to 'src') diff --git a/src/main/java/moe/nea/firmament/init/MixinPlugin.java b/src/main/java/moe/nea/firmament/init/MixinPlugin.java new file mode 100644 index 0000000..ddb17f4 --- /dev/null +++ b/src/main/java/moe/nea/firmament/init/MixinPlugin.java @@ -0,0 +1,46 @@ +package moe.nea.firmament.init; + +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class MixinPlugin implements IMixinConfigPlugin { + @Override + public void onLoad(String mixinPackage) { + + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return Boolean.getBoolean("firmament.debug") || + !mixinClassName.startsWith("moe.nea.firmament.mixins.devenv"); + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } +} diff --git a/src/main/java/moe/nea/firmament/mixins/MixinClientPacketHandler.java b/src/main/java/moe/nea/firmament/mixins/MixinClientPacketHandler.java new file mode 100644 index 0000000..01ef98e --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/MixinClientPacketHandler.java @@ -0,0 +1,23 @@ +package moe.nea.firmament.mixins; + +import moe.nea.firmament.events.ParticleSpawnEvent; +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; +import net.minecraft.util.math.Vec3d; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ClientPlayNetworkHandler.class) +public class MixinClientPacketHandler { + @Inject(method = "onParticle", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/util/thread/ThreadExecutor;)V", shift = At.Shift.AFTER)) + public void onParticleSpawn(ParticleS2CPacket packet, CallbackInfo ci) { + ParticleSpawnEvent.Companion.publish(new ParticleSpawnEvent( + packet.getParameters(), + new Vec3d(packet.getX(), packet.getY(), packet.getZ()), + new Vec3d(packet.getOffsetX(), packet.getOffsetY(), packet.getOffsetZ()), + packet.isLongDistance() + )); + } +} diff --git a/src/main/java/moe/nea/firmament/mixins/MixinDownloadingTerrainScreen.java b/src/main/java/moe/nea/firmament/mixins/MixinDownloadingTerrainScreen.java new file mode 100644 index 0000000..a1c4ff3 --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/MixinDownloadingTerrainScreen.java @@ -0,0 +1,16 @@ +package moe.nea.firmament.mixins; + +import moe.nea.firmament.events.WorldReadyEvent; +import net.minecraft.client.gui.screen.DownloadingTerrainScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(DownloadingTerrainScreen.class) +public class MixinDownloadingTerrainScreen { + @Inject(method = "close", at = @At("HEAD")) + public void onClose(CallbackInfo ci) { + WorldReadyEvent.Companion.publish(new WorldReadyEvent()); + } +} diff --git a/src/main/java/moe/nea/firmament/mixins/MixinMessageHandler.java b/src/main/java/moe/nea/firmament/mixins/MixinMessageHandler.java new file mode 100644 index 0000000..34dd5a1 --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/MixinMessageHandler.java @@ -0,0 +1,34 @@ +package moe.nea.firmament.mixins; + +import com.mojang.authlib.GameProfile; +import moe.nea.firmament.events.ServerChatLineReceivedEvent; +import net.minecraft.client.network.message.MessageHandler; +import net.minecraft.network.message.MessageType; +import net.minecraft.network.message.SignedMessage; +import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(MessageHandler.class) +public class MixinMessageHandler { + @Inject(method = "onChatMessage", cancellable = true, at = @At("HEAD")) + public void onOnChatMessage(SignedMessage message, GameProfile sender, MessageType.Parameters params, CallbackInfo ci) { + var decoratedText = params.applyChatDecoration(message.unsignedContent() != null ? message.unsignedContent() : message.getContent()); + var event = new ServerChatLineReceivedEvent(decoratedText); + if (ServerChatLineReceivedEvent.Companion.publish(event).getCancelled()) { + ci.cancel(); + } + } + + @Inject(method = "onGameMessage", at = @At("HEAD"), cancellable = true) + public void onOnGameMessage(Text message, boolean overlay, CallbackInfo ci) { + if (!overlay) { + var event = new ServerChatLineReceivedEvent(message); + if (ServerChatLineReceivedEvent.Companion.publish(event).getCancelled()) { + ci.cancel(); + } + } + } +} diff --git a/src/main/java/moe/nea/firmament/mixins/MixinMinecraft.java b/src/main/java/moe/nea/firmament/mixins/MixinMinecraft.java new file mode 100644 index 0000000..f2313d7 --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/MixinMinecraft.java @@ -0,0 +1,26 @@ +package moe.nea.firmament.mixins; + +import moe.nea.firmament.events.ScreenOpenEvent; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(MinecraftClient.class) +public abstract class MixinMinecraft { + @Shadow + @Nullable + public Screen currentScreen; + + @Inject(method = "setScreen", at = @At("HEAD"), cancellable = true) + public void onScreenChange(Screen screen, CallbackInfo ci) { + var event = new ScreenOpenEvent(currentScreen, screen); + if (ScreenOpenEvent.Companion.publish(event).getCancelled()) { + ci.cancel(); + } + } +} diff --git a/src/main/java/moe/nea/firmament/mixins/MixinWorldRenderer.java b/src/main/java/moe/nea/firmament/mixins/MixinWorldRenderer.java new file mode 100644 index 0000000..e149168 --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/MixinWorldRenderer.java @@ -0,0 +1,26 @@ +package moe.nea.firmament.mixins; + +import moe.nea.firmament.events.WorldRenderLastEvent; +import net.minecraft.client.render.Camera; +import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.render.LightmapTextureManager; +import net.minecraft.client.render.WorldRenderer; +import net.minecraft.client.util.math.MatrixStack; +import org.joml.Matrix4f; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(WorldRenderer.class) +public class MixinWorldRenderer { + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderChunkDebugInfo(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/render/Camera;)V", shift = At.Shift.AFTER)) + public void onWorldRenderLast(MatrixStack matrices, float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f positionMatrix, CallbackInfo ci) { + var event = new WorldRenderLastEvent( + matrices, tickDelta, renderBlockOutline, + camera, gameRenderer, lightmapTextureManager, + positionMatrix + ); + WorldRenderLastEvent.Companion.publish(event); + } +} diff --git a/src/main/java/moe/nea/firmament/mixins/accessor/AccessorHandledScreen.java b/src/main/java/moe/nea/firmament/mixins/accessor/AccessorHandledScreen.java new file mode 100644 index 0000000..1a575c6 --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/accessor/AccessorHandledScreen.java @@ -0,0 +1,14 @@ +package moe.nea.firmament.mixins.accessor; + +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.screen.slot.Slot; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(HandledScreen.class) +public interface AccessorHandledScreen { + @Accessor("focusedSlot") + @Nullable + Slot getFocusedSlot_NEU(); +} diff --git a/src/main/java/moe/nea/firmament/mixins/devenv/DisableCommonPacketWarnings.java b/src/main/java/moe/nea/firmament/mixins/devenv/DisableCommonPacketWarnings.java new file mode 100644 index 0000000..16ca7c1 --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/devenv/DisableCommonPacketWarnings.java @@ -0,0 +1,37 @@ +package moe.nea.firmament.mixins.devenv; + +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.util.Identifier; +import org.slf4j.Logger; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.Objects; + +@Mixin(ClientPlayNetworkHandler.class) +public class DisableCommonPacketWarnings { + + @Redirect(method = "onCustomPayload", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) + public void onCustomPacket(Logger instance, String s, Object o) { + if (!Objects.equals(o, Identifier.of("badlion", "mods"))) { + instance.warn(s, o); + } + } + + @Redirect(method = "onEntityPassengersSet", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;)V")) + public void onUnknownPassenger(Logger instance, String s) { + // Ignore passenger data for unknown entities, since HyPixel just sends a lot of those. + } + + @Redirect(method = "onTeam", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;[Ljava/lang/Object;)V")) + public void onOnTeam(Logger instance, String s, Object[] objects) { + // Ignore data for unknown teams, since HyPixel just sends a lot of invalid team data. + } + + @Redirect(method = "onPlayerList", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) + public void onOnPlayerList(Logger instance, String s, Object o) { + // Ignore invalid player info, since HyPixel just sends a lot of invalid player info + } + +} diff --git a/src/main/java/moe/nea/firmament/mixins/devenv/DisableInvalidFishingHook.java b/src/main/java/moe/nea/firmament/mixins/devenv/DisableInvalidFishingHook.java new file mode 100644 index 0000000..b1a4049 --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/devenv/DisableInvalidFishingHook.java @@ -0,0 +1,15 @@ +package moe.nea.firmament.mixins.devenv; + +import net.minecraft.entity.projectile.FishingBobberEntity; +import org.slf4j.Logger; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(FishingBobberEntity.class) +public class DisableInvalidFishingHook { + @Redirect(method = "onSpawnPacket", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V")) + public void onOnSpawnPacket(Logger instance, String s, Object o, Object o1) { + // Don't warn for broken fishing hooks, since HyPixel sends a bunch of those + } +} diff --git a/src/main/java/moe/nea/firmament/mixins/devenv/MixinScoreboard.java b/src/main/java/moe/nea/firmament/mixins/devenv/MixinScoreboard.java new file mode 100644 index 0000000..acb0033 --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/devenv/MixinScoreboard.java @@ -0,0 +1,15 @@ +package moe.nea.firmament.mixins.devenv; + +import net.minecraft.scoreboard.Scoreboard; +import org.slf4j.Logger; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(Scoreboard.class) +public class MixinScoreboard { + @Redirect(method = "addTeam", at=@At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) + public void onExistingteam(Logger instance, String s, Object o) { + // Ignore creations of existing teams + } +} diff --git a/src/main/java/moe/nea/notenoughupdates/init/MixinPlugin.java b/src/main/java/moe/nea/notenoughupdates/init/MixinPlugin.java deleted file mode 100644 index b2e7e4c..0000000 --- a/src/main/java/moe/nea/notenoughupdates/init/MixinPlugin.java +++ /dev/null @@ -1,47 +0,0 @@ -package moe.nea.notenoughupdates.init; - -import moe.nea.notenoughupdates.NotEnoughUpdates; -import org.objectweb.asm.tree.ClassNode; -import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; -import org.spongepowered.asm.mixin.extensibility.IMixinInfo; - -import java.util.List; -import java.util.Set; - -public class MixinPlugin implements IMixinConfigPlugin { - @Override - public void onLoad(String mixinPackage) { - - } - - @Override - public String getRefMapperConfig() { - return null; - } - - @Override - public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { - return Boolean.getBoolean("notenoughupdates.debug") || - !mixinClassName.startsWith("moe.nea.notenoughupdates.mixins.devenv"); - } - - @Override - public void acceptTargets(Set myTargets, Set otherTargets) { - - } - - @Override - public List getMixins() { - return null; - } - - @Override - public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - - } - - @Override - public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { - - } -} diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/MixinClientPacketHandler.java b/src/main/java/moe/nea/notenoughupdates/mixins/MixinClientPacketHandler.java deleted file mode 100644 index dc57113..0000000 --- a/src/main/java/moe/nea/notenoughupdates/mixins/MixinClientPacketHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -package moe.nea.notenoughupdates.mixins; - -import moe.nea.notenoughupdates.events.ParticleSpawnEvent; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; -import net.minecraft.util.math.Vec3d; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ClientPlayNetworkHandler.class) -public class MixinClientPacketHandler { - @Inject(method = "onParticle", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/util/thread/ThreadExecutor;)V", shift = At.Shift.AFTER)) - public void onParticleSpawn(ParticleS2CPacket packet, CallbackInfo ci) { - ParticleSpawnEvent.Companion.publish(new ParticleSpawnEvent( - packet.getParameters(), - new Vec3d(packet.getX(), packet.getY(), packet.getZ()), - new Vec3d(packet.getOffsetX(), packet.getOffsetY(), packet.getOffsetZ()), - packet.isLongDistance() - )); - } -} diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/MixinDownloadingTerrainScreen.java b/src/main/java/moe/nea/notenoughupdates/mixins/MixinDownloadingTerrainScreen.java deleted file mode 100644 index 3ed8a73..0000000 --- a/src/main/java/moe/nea/notenoughupdates/mixins/MixinDownloadingTerrainScreen.java +++ /dev/null @@ -1,16 +0,0 @@ -package moe.nea.notenoughupdates.mixins; - -import moe.nea.notenoughupdates.events.WorldReadyEvent; -import net.minecraft.client.gui.screen.DownloadingTerrainScreen; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(DownloadingTerrainScreen.class) -public class MixinDownloadingTerrainScreen { - @Inject(method = "close", at = @At("HEAD")) - public void onClose(CallbackInfo ci) { - WorldReadyEvent.Companion.publish(new WorldReadyEvent()); - } -} diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/MixinMessageHandler.java b/src/main/java/moe/nea/notenoughupdates/mixins/MixinMessageHandler.java deleted file mode 100644 index 5d3e70f..0000000 --- a/src/main/java/moe/nea/notenoughupdates/mixins/MixinMessageHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -package moe.nea.notenoughupdates.mixins; - -import com.mojang.authlib.GameProfile; -import moe.nea.notenoughupdates.events.ServerChatLineReceivedEvent; -import net.minecraft.client.network.message.MessageHandler; -import net.minecraft.network.message.MessageType; -import net.minecraft.network.message.SignedMessage; -import net.minecraft.text.Text; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(MessageHandler.class) -public class MixinMessageHandler { - @Inject(method = "onChatMessage", cancellable = true, at = @At("HEAD")) - public void onOnChatMessage(SignedMessage message, GameProfile sender, MessageType.Parameters params, CallbackInfo ci) { - var decoratedText = params.applyChatDecoration(message.unsignedContent() != null ? message.unsignedContent() : message.getContent()); - var event = new ServerChatLineReceivedEvent(decoratedText); - if (ServerChatLineReceivedEvent.Companion.publish(event).getCancelled()) { - ci.cancel(); - } - } - - @Inject(method = "onGameMessage", at = @At("HEAD"), cancellable = true) - public void onOnGameMessage(Text message, boolean overlay, CallbackInfo ci) { - if (!overlay) { - var event = new ServerChatLineReceivedEvent(message); - if (ServerChatLineReceivedEvent.Companion.publish(event).getCancelled()) { - ci.cancel(); - } - } - } -} diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/MixinMinecraft.java b/src/main/java/moe/nea/notenoughupdates/mixins/MixinMinecraft.java deleted file mode 100644 index 17f49e1..0000000 --- a/src/main/java/moe/nea/notenoughupdates/mixins/MixinMinecraft.java +++ /dev/null @@ -1,26 +0,0 @@ -package moe.nea.notenoughupdates.mixins; - -import moe.nea.notenoughupdates.events.ScreenOpenEvent; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(MinecraftClient.class) -public abstract class MixinMinecraft { - @Shadow - @Nullable - public Screen currentScreen; - - @Inject(method = "setScreen", at = @At("HEAD"), cancellable = true) - public void onScreenChange(Screen screen, CallbackInfo ci) { - var event = new ScreenOpenEvent(currentScreen, screen); - if (ScreenOpenEvent.Companion.publish(event).getCancelled()) { - ci.cancel(); - } - } -} diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/MixinWorldRenderer.java b/src/main/java/moe/nea/notenoughupdates/mixins/MixinWorldRenderer.java deleted file mode 100644 index c3d70fe..0000000 --- a/src/main/java/moe/nea/notenoughupdates/mixins/MixinWorldRenderer.java +++ /dev/null @@ -1,26 +0,0 @@ -package moe.nea.notenoughupdates.mixins; - -import moe.nea.notenoughupdates.events.WorldRenderLastEvent; -import net.minecraft.client.render.Camera; -import net.minecraft.client.render.GameRenderer; -import net.minecraft.client.render.LightmapTextureManager; -import net.minecraft.client.render.WorldRenderer; -import net.minecraft.client.util.math.MatrixStack; -import org.joml.Matrix4f; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(WorldRenderer.class) -public class MixinWorldRenderer { - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderChunkDebugInfo(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/render/Camera;)V", shift = At.Shift.AFTER)) - public void onWorldRenderLast(MatrixStack matrices, float tickDelta, long limitTime, boolean renderBlockOutline, Camera camera, GameRenderer gameRenderer, LightmapTextureManager lightmapTextureManager, Matrix4f positionMatrix, CallbackInfo ci) { - var event = new WorldRenderLastEvent( - matrices, tickDelta, renderBlockOutline, - camera, gameRenderer, lightmapTextureManager, - positionMatrix - ); - WorldRenderLastEvent.Companion.publish(event); - } -} diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/accessor/AccessorHandledScreen.java b/src/main/java/moe/nea/notenoughupdates/mixins/accessor/AccessorHandledScreen.java deleted file mode 100644 index cea44cf..0000000 --- a/src/main/java/moe/nea/notenoughupdates/mixins/accessor/AccessorHandledScreen.java +++ /dev/null @@ -1,14 +0,0 @@ -package moe.nea.notenoughupdates.mixins.accessor; - -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.screen.slot.Slot; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(HandledScreen.class) -public interface AccessorHandledScreen { - @Accessor("focusedSlot") - @Nullable - Slot getFocusedSlot_NEU(); -} diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/devenv/DisableCommonPacketWarnings.java b/src/main/java/moe/nea/notenoughupdates/mixins/devenv/DisableCommonPacketWarnings.java deleted file mode 100644 index 8302170..0000000 --- a/src/main/java/moe/nea/notenoughupdates/mixins/devenv/DisableCommonPacketWarnings.java +++ /dev/null @@ -1,37 +0,0 @@ -package moe.nea.notenoughupdates.mixins.devenv; - -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.util.Identifier; -import org.slf4j.Logger; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.util.Objects; - -@Mixin(ClientPlayNetworkHandler.class) -public class DisableCommonPacketWarnings { - - @Redirect(method = "onCustomPayload", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) - public void onCustomPacket(Logger instance, String s, Object o) { - if (!Objects.equals(o, Identifier.of("badlion", "mods"))) { - instance.warn(s, o); - } - } - - @Redirect(method = "onEntityPassengersSet", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;)V")) - public void onUnknownPassenger(Logger instance, String s) { - // Ignore passenger data for unknown entities, since HyPixel just sends a lot of those. - } - - @Redirect(method = "onTeam", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;[Ljava/lang/Object;)V")) - public void onOnTeam(Logger instance, String s, Object[] objects) { - // Ignore data for unknown teams, since HyPixel just sends a lot of invalid team data. - } - - @Redirect(method = "onPlayerList", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) - public void onOnPlayerList(Logger instance, String s, Object o) { - // Ignore invalid player info, since HyPixel just sends a lot of invalid player info - } - -} diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/devenv/DisableInvalidFishingHook.java b/src/main/java/moe/nea/notenoughupdates/mixins/devenv/DisableInvalidFishingHook.java deleted file mode 100644 index 0c434bd..0000000 --- a/src/main/java/moe/nea/notenoughupdates/mixins/devenv/DisableInvalidFishingHook.java +++ /dev/null @@ -1,15 +0,0 @@ -package moe.nea.notenoughupdates.mixins.devenv; - -import net.minecraft.entity.projectile.FishingBobberEntity; -import org.slf4j.Logger; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(FishingBobberEntity.class) -public class DisableInvalidFishingHook { - @Redirect(method = "onSpawnPacket", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V")) - public void onOnSpawnPacket(Logger instance, String s, Object o, Object o1) { - // Don't warn for broken fishing hooks, since HyPixel sends a bunch of those - } -} diff --git a/src/main/java/moe/nea/notenoughupdates/mixins/devenv/MixinScoreboard.java b/src/main/java/moe/nea/notenoughupdates/mixins/devenv/MixinScoreboard.java deleted file mode 100644 index 306b900..0000000 --- a/src/main/java/moe/nea/notenoughupdates/mixins/devenv/MixinScoreboard.java +++ /dev/null @@ -1,16 +0,0 @@ -package moe.nea.notenoughupdates.mixins.devenv; - -import net.minecraft.scoreboard.Scoreboard; -import org.slf4j.Logger; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(Scoreboard.class) -public class MixinScoreboard { - @Redirect(method = "addTeam", at=@At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V")) - public void onExistingteam(Logger instance, String s, Object o) { - // Ignore creations of existing teams - } -} diff --git a/src/main/kotlin/moe/nea/firmament/Firmament.kt b/src/main/kotlin/moe/nea/firmament/Firmament.kt new file mode 100644 index 0000000..ec6cd3e --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/Firmament.kt @@ -0,0 +1,92 @@ +package moe.nea.firmament + +import com.mojang.brigadier.CommandDispatcher +import io.ktor.client.* +import io.ktor.client.plugins.* +import io.ktor.client.plugins.contentnegotiation.* +import io.ktor.serialization.kotlinx.json.* +import java.nio.file.Files +import java.nio.file.Path +import net.fabricmc.api.ClientModInitializer +import net.fabricmc.api.ModInitializer +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents +import net.fabricmc.loader.api.FabricLoader +import net.fabricmc.loader.api.Version +import net.fabricmc.loader.api.metadata.ModMetadata +import org.apache.logging.log4j.LogManager +import org.freedesktop.dbus.connections.impl.DBusConnectionBuilder +import kotlinx.coroutines.* +import kotlinx.serialization.json.Json +import kotlin.coroutines.EmptyCoroutineContext +import net.minecraft.command.CommandRegistryAccess +import moe.nea.firmament.commands.registerFirmamentCommand +import moe.nea.firmament.dbus.FirmamentDbusObject +import moe.nea.firmament.features.FeatureManager +import moe.nea.firmament.repo.RepoManager +import moe.nea.firmament.util.SBData +import moe.nea.firmament.util.data.IDataHolder + +object Firmament : ModInitializer, ClientModInitializer { + const val MOD_ID = "firmament" + + val DEBUG = System.getProperty("firmament.debug") == "true" + val DATA_DIR: Path = Path.of(".firmament").also { Files.createDirectories(it) } + val CONFIG_DIR: Path = Path.of("config/firmament").also { Files.createDirectories(it) } + val logger = LogManager.getLogger("Firmament") + val metadata: ModMetadata by lazy { FabricLoader.getInstance().getModContainer(MOD_ID).orElseThrow().metadata } + val version: Version by lazy { metadata.version } + + val json = Json { + prettyPrint = DEBUG + ignoreUnknownKeys = true + encodeDefaults = true + } + + val httpClient by lazy { + HttpClient { + install(ContentNegotiation) { + json(json) + } + install(UserAgent) { + agent = "Firmament/$version" + } + } + } + + val globalJob = Job() + val dbusConnection = DBusConnectionBuilder.forSessionBus() + .build() + val coroutineScope = + CoroutineScope(EmptyCoroutineContext + CoroutineName("Firmament")) + SupervisorJob(globalJob) + + private fun registerCommands( + dispatcher: CommandDispatcher, + @Suppress("UNUSED_PARAMETER") + ctx: CommandRegistryAccess + ) { + registerFirmamentCommand(dispatcher) + } + + override fun onInitialize() { + + dbusConnection.requestBusName("moe.nea.firmament") + dbusConnection.exportObject(FirmamentDbusObject) + IDataHolder.registerEvents() + RepoManager.initialize() + SBData.init() + FeatureManager.autoload() + + ClientCommandRegistrationCallback.EVENT.register(this::registerCommands) + ClientLifecycleEvents.CLIENT_STOPPING.register(ClientLifecycleEvents.ClientStopping { + runBlocking { + logger.info("Shutting down NEU coroutines") + globalJob.cancel() + } + }) + } + + override fun onInitializeClient() { + } +} diff --git a/src/main/kotlin/moe/nea/firmament/commands/dsl.kt b/src/main/kotlin/moe/nea/firmament/commands/dsl.kt new file mode 100644 index 0000000..5ead624 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/commands/dsl.kt @@ -0,0 +1,81 @@ +package moe.nea.firmament.commands + +import com.mojang.brigadier.arguments.ArgumentType +import com.mojang.brigadier.builder.ArgumentBuilder +import com.mojang.brigadier.builder.LiteralArgumentBuilder +import com.mojang.brigadier.builder.RequiredArgumentBuilder +import com.mojang.brigadier.context.CommandContext +import java.lang.reflect.ParameterizedType +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource +import moe.nea.firmament.util.iterate + + +typealias DefaultSource = FabricClientCommandSource + + +inline val > T.context get() = this +operator fun > C.get(arg: TypeSafeArg): T { + return arg.get(this) +} + +fun literal( + name: String, + block: LiteralArgumentBuilder.() -> Unit +): LiteralArgumentBuilder = + LiteralArgumentBuilder.literal(name).also(block) + +data class TypeSafeArg(val name: String, val argument: ArgumentType) { + val argClass by lazy { + argument.javaClass + .iterate>> { + it.superclass + } + .map { + it.genericSuperclass + } + .filterIsInstance() + .find { it.rawType == ArgumentType::class.java }!! + .let { it.actualTypeArguments[0] as Class<*> } + } + + @JvmName("getWithThis") + fun CommandContext.get(): T = + get(this) + + + fun get(ctx: CommandContext): T { + return ctx.getArgument(name, argClass) as T + } +} + + +fun argument( + name: String, + argument: ArgumentType, + block: RequiredArgumentBuilder.(TypeSafeArg) -> Unit +): RequiredArgumentBuilder = + RequiredArgumentBuilder.argument(name, argument).also { block(it, TypeSafeArg(name, argument)) } + +fun , AT : Any> T.thenArgument( + name: String, + argument: ArgumentType, + block: RequiredArgumentBuilder.(TypeSafeArg) -> Unit +): T = then(argument(name, argument, block)) + + +fun > T.thenLiteral( + name: String, + block: LiteralArgumentBuilder.() -> Unit +): T = + then(literal(name, block)) + +fun > T.then(node: ArgumentBuilder, block: T.() -> Unit): T = + then(node).also(block) + +fun > T.thenExecute(block: CommandContext.() -> Unit): T = + executes { + block(it) + 1 + } + + diff --git a/src/main/kotlin/moe/nea/firmament/commands/rome.kt b/src/main/kotlin/moe/nea/firmament/commands/rome.kt new file mode 100644 index 0000000..bdbaa3f --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/commands/rome.kt @@ -0,0 +1,66 @@ +package moe.nea.firmament.commands + +import com.mojang.brigadier.CommandDispatcher +import io.github.cottonmc.cotton.gui.client.CottonClientScreen +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource +import net.minecraft.text.Text +import moe.nea.firmament.features.world.FairySouls +import moe.nea.firmament.gui.repoGui +import moe.nea.firmament.repo.RepoManager +import moe.nea.firmament.util.SBData +import moe.nea.firmament.util.ScreenUtil.setScreenLater + + +fun firmamentCommand() = literal("firmament") { + thenLiteral("repo") { + thenLiteral("reload") { + thenLiteral("fetch") { + thenExecute { + source.sendFeedback(Text.translatable("firmament.repo.reload.network")) // TODO better reporting + RepoManager.launchAsyncUpdate() + } + } + thenExecute { + source.sendFeedback(Text.translatable("firmament.repo.reload.disk")) + RepoManager.reload() + } + } + thenExecute { + setScreenLater(CottonClientScreen(repoGui())) + } + } + thenLiteral("dev") { + thenLiteral("config") { + thenExecute { + FairySouls.TConfig.showConfigEditor() + } + } + thenLiteral("sbdata") { + thenExecute { + source.sendFeedback(Text.translatable("firmament.sbinfo.profile", SBData.profileCuteName)) + val locrawInfo = SBData.locraw + if (locrawInfo == null) { + source.sendFeedback(Text.translatable("firmament.sbinfo.nolocraw")) + } else { + source.sendFeedback(Text.translatable("firmament.sbinfo.server", locrawInfo.server)) + source.sendFeedback(Text.translatable("firmament.sbinfo.gametype", locrawInfo.gametype)) + source.sendFeedback(Text.translatable("firmament.sbinfo.mode", locrawInfo.mode)) + source.sendFeedback(Text.translatable("firmament.sbinfo.map", locrawInfo.map)) + } + + } + } + } +} + + +fun registerFirmamentCommand(dispatcher: CommandDispatcher) { + val firmament = dispatcher.register(firmamentCommand()) + dispatcher.register(literal("firm") { + redirect(firmament) + }) +} + + + + diff --git a/src/main/kotlin/moe/nea/firmament/dbus/FirmamentDbusInterface.kt b/src/main/kotlin/moe/nea/firmament/dbus/FirmamentDbusInterface.kt new file mode 100644 index 0000000..24b7dc8 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/dbus/FirmamentDbusInterface.kt @@ -0,0 +1,11 @@ +package moe.nea.firmament.dbus + +import org.freedesktop.dbus.annotations.DBusInterfaceName +import org.freedesktop.dbus.interfaces.DBusInterface + +@DBusInterfaceName("moe.nea.Firmament") +interface FirmamentDbusInterface : DBusInterface { + fun sayHello(): String + fun getCurrentRepoCommit(): String + fun requestRepoReDownload() +} diff --git a/src/main/kotlin/moe/nea/firmament/dbus/FirmamentDbusObject.kt b/src/main/kotlin/moe/nea/firmament/dbus/FirmamentDbusObject.kt new file mode 100644 index 0000000..48d4cf7 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/dbus/FirmamentDbusObject.kt @@ -0,0 +1,21 @@ +package moe.nea.firmament.dbus + +import moe.nea.firmament.repo.RepoManager + +object FirmamentDbusObject : FirmamentDbusInterface { + override fun sayHello(): String { + return "Hello from Firmanet" + } + + override fun getCurrentRepoCommit(): String { + return RepoManager.currentDownloadedSha ?: "none" + } + + override fun requestRepoReDownload() { + RepoManager.launchAsyncUpdate() + } + + override fun getObjectPath(): String { + return "/moe/nea/Firmament" + } +} diff --git a/src/main/kotlin/moe/nea/firmament/events/NEUEvent.kt b/src/main/kotlin/moe/nea/firmament/events/NEUEvent.kt new file mode 100644 index 0000000..722ea64 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/events/NEUEvent.kt @@ -0,0 +1,36 @@ +package moe.nea.firmament.events + +/** + * An event that can be fired by a [NEUEventBus]. + * + * Typically, that event bus is implemented as a companion object + * + * ``` + * class SomeEvent : NEUEvent() { + * companion object : NEUEventBus() + * } + * ``` + */ +abstract class NEUEvent { + /** + * A [NEUEvent] that can be [cancelled] + */ + abstract class Cancellable : NEUEvent() { + /** + * Cancels this is event. + * + * @see cancelled + */ + fun cancel() { + cancelled = true + } + + /** + * Whether this event is cancelled. + * + * Cancelled events will bypass handlers unless otherwise specified and will prevent the action that this + * event was originally fired for. + */ + var cancelled: Boolean = false + } +} diff --git a/src/main/kotlin/moe/nea/firmament/events/NEUEventBus.kt b/src/main/kotlin/moe/nea/firmament/events/NEUEventBus.kt new file mode 100644 index 0000000..b3b9152 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/events/NEUEventBus.kt @@ -0,0 +1,37 @@ +package moe.nea.firmament.events + +import java.util.concurrent.CopyOnWriteArrayList +import moe.nea.firmament.Firmament + +/** + * A pubsub event bus. + * + * [subscribe] to events [publish]ed on this event bus. + * Subscriptions may not necessarily be delivered in the order or registering. + */ +open class NEUEventBus { + data class Handler(val invocation: (T) -> Unit, val receivesCancelled: Boolean) + + private val toHandle: MutableList> = CopyOnWriteArrayList() + fun subscribe(handle: (T) -> Unit) { + subscribe(handle, false) + } + + fun subscribe(handle: (T) -> Unit, receivesCancelled: Boolean) { + toHandle.add(Handler(handle, receivesCancelled)) + } + + fun publish(event: T): T { + for (function in toHandle) { + if (function.receivesCancelled || event !is NEUEvent.Cancellable || !event.cancelled) { + try { + function.invocation(event) + } catch (e: Exception) { + Firmament.logger.error("Caught exception during processing event $event", e) + } + } + } + return event + } + +} diff --git a/src/main/kotlin/moe/nea/firmament/events/ParticleSpawnEvent.kt b/src/main/kotlin/moe/nea/firmament/events/ParticleSpawnEvent.kt new file mode 100644 index 0000000..bbf7289 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/events/ParticleSpawnEvent.kt @@ -0,0 +1,13 @@ +package moe.nea.firmament.events + +import net.minecraft.particle.ParticleEffect +import net.minecraft.util.math.Vec3d + +data class ParticleSpawnEvent( + val particleEffect: ParticleEffect, + val position: Vec3d, + val offset: Vec3d, + val longDistance: Boolean, +) : NEUEvent() { + companion object : NEUEventBus() +} diff --git a/src/main/kotlin/moe/nea/firmament/events/ScreenOpenEvent.kt b/src/main/kotlin/moe/nea/firmament/events/ScreenOpenEvent.kt new file mode 100644 index 0000000..ee162ab --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/events/ScreenOpenEvent.kt @@ -0,0 +1,7 @@ +package moe.nea.firmament.events + +import net.minecraft.client.gui.screen.Screen + +data class ScreenOpenEvent(val old: Screen?, val new: Screen?) : NEUEvent.Cancellable() { + companion object : NEUEventBus() +} diff --git a/src/main/kotlin/moe/nea/firmament/events/ServerChatLineReceivedEvent.kt b/src/main/kotlin/moe/nea/firmament/events/ServerChatLineReceivedEvent.kt new file mode 100644 index 0000000..7e8531c --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/events/ServerChatLineReceivedEvent.kt @@ -0,0 +1,13 @@ +package moe.nea.firmament.events + +import net.minecraft.text.Text +import moe.nea.firmament.util.unformattedString + +/** + * This event gets published whenever the client receives a chat message from the server. + */ +data class ServerChatLineReceivedEvent(val text: Text) : NEUEvent.Cancellable() { + companion object : NEUEventBus() + + val unformattedString = text.unformattedString +} diff --git a/src/main/kotlin/moe/nea/firmament/events/SkyblockServerUpdateEvent.kt b/src/main/kotlin/moe/nea/firmament/events/SkyblockServerUpdateEvent.kt new file mode 100644 index 0000000..ae3227f --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/events/SkyblockServerUpdateEvent.kt @@ -0,0 +1,13 @@ +package moe.nea.firmament.events + +import moe.nea.firmament.util.Locraw + +/** + * This event gets published whenever `/locraw` is queried and HyPixel returns a location different to the old one. + * + * **N.B.:** This event may get fired multiple times while on the server (for example, first to null, then to the + * correct location). + */ +data class SkyblockServerUpdateEvent(val oldLocraw: Locraw?, val newLocraw: Locraw?) : NEUEvent() { + companion object : NEUEventBus() +} diff --git a/src/main/kotlin/moe/nea/firmament/events/WorldReadyEvent.kt b/src/main/kotlin/moe/nea/firmament/events/WorldReadyEvent.kt new file mode 100644 index 0000000..5b01258 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/events/WorldReadyEvent.kt @@ -0,0 +1,5 @@ +package moe.nea.firmament.events + +class WorldReadyEvent : NEUEvent() { + companion object : NEUEventBus() +} diff --git a/src/main/kotlin/moe/nea/firmament/events/WorldRenderLastEvent.kt b/src/main/kotlin/moe/nea/firmament/events/WorldRenderLastEvent.kt new file mode 100644 index 0000000..c23d923 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/events/WorldRenderLastEvent.kt @@ -0,0 +1,22 @@ +package moe.nea.firmament.events + +import org.joml.Matrix4f +import net.minecraft.client.render.Camera +import net.minecraft.client.render.GameRenderer +import net.minecraft.client.render.LightmapTextureManager +import net.minecraft.client.util.math.MatrixStack + +/** + * This event is called after all world rendering is done, but before any GUI rendering (including hand) has been done. + */ +data class WorldRenderLastEvent( + val matrices: MatrixStack, + val tickDelta: Float, + val renderBlockOutline: Boolean, + val camera: Camera, + val gameRenderer: GameRenderer, + val lightmapTextureManager: LightmapTextureManager, + val positionMatrix: Matrix4f, +) : NEUEvent() { + companion object : NEUEventBus() +} diff --git a/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt new file mode 100644 index 0000000..68205f4 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/features/FeatureManager.kt @@ -0,0 +1,53 @@ +package moe.nea.firmament.features + +import kotlinx.serialization.Serializable +import kotlinx.serialization.serializer +import moe.nea.firmament.Firmament +import moe.nea.firmament.features.fishing.FishingWarning +import moe.nea.firmament.features.world.FairySouls +import moe.nea.firmament.util.data.DataHolder + +object FeatureManager : DataHolder(serializer(), "features", ::Config) { + @Serializable + data class Config( + val enabledFeatures: MutableMap = mutableMapOf() + ) + + private val features = mutableMapOf() + + private var hasAutoloaded = false + + init { + autoload() + } + + fun autoload() { + synchronized(this) { + if (hasAutoloaded) return + loadFeature(FairySouls) + loadFeature(FishingWarning) + hasAutoloaded = true + } +