aboutsummaryrefslogtreecommitdiff
path: root/mod/src/main/java/kr
diff options
context:
space:
mode:
authorsyeyoung <cyoung06@naver.com>2023-01-22 16:31:36 +0900
committersyeyoung <cyoung06@naver.com>2023-01-22 16:42:56 +0900
commit4b6f8e059e8417c14fc5e93a6bda55526986f646 (patch)
tree41f68e37dc2d42ebfb2231913e745a9e539b4631 /mod/src/main/java/kr
parent394c52045bcb53a93c08cfab6d60a42bfd777d59 (diff)
downloadSkyblock-Dungeons-Guide-4b6f8e059e8417c14fc5e93a6bda55526986f646.tar.gz
Skyblock-Dungeons-Guide-4b6f8e059e8417c14fc5e93a6bda55526986f646.tar.bz2
Skyblock-Dungeons-Guide-4b6f8e059e8417c14fc5e93a6bda55526986f646.zip
- parallel universe (process stuff based on packets)
=> Now there wouldn't be mod conflicts on tablist, scoreboard, and teams - Fixes Bettermap Incompatibility #79 Signed-off-by: syeyoung <cyoung06@naver.com>
Diffstat (limited to 'mod/src/main/java/kr')
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java9
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java25
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java26
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/PacketProcessedEvent.java (renamed from mod/src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CustomPacketPlayerListItem.java)36
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/RawPacketReceivedEvent.java29
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/DungeonListener.java7
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketInjector.java92
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketListener.java306
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/WrappedPacket.java63
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureTestPepole.java25
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonDeaths.java6
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMap.java43
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonMilestone.java6
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonScore.java10
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonSecrets.java10
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureDungeonTombs.java6
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/dungeon/FeatureWarnLowHealth.java13
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureEpicCountdown.java22
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/parallelUniverse/README.md1
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/parallelUniverse/scoreboard/Objective.java62
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/parallelUniverse/scoreboard/Score.java44
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/parallelUniverse/scoreboard/ScoreboardManager.java71
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/parallelUniverse/tab/TabList.java86
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/parallelUniverse/tab/TabListEntry.java135
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/parallelUniverse/teams/NameTagVisibility.java33
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/parallelUniverse/teams/Team.java56
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/parallelUniverse/teams/TeamManager.java89
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/ScoreBoardUtils.java76
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/TabListUtil.java31
30 files changed, 1063 insertions, 357 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
index cc380f0a..9cd0af73 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
@@ -33,6 +33,7 @@ import kr.syeyoung.dungeonsguide.mod.discord.DiscordIntegrationManager;
import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonFacade;
import kr.syeyoung.dungeonsguide.mod.events.annotations.EventHandlerRegistry;
import kr.syeyoung.dungeonsguide.mod.events.listener.DungeonListener;
+import kr.syeyoung.dungeonsguide.mod.events.listener.PacketInjector;
import kr.syeyoung.dungeonsguide.mod.events.listener.PacketListener;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.fonts.DefaultFontRenderer;
@@ -156,7 +157,7 @@ public class DungeonsGuide implements DGInterface {
}
- private PacketListener packetListener;
+ private PacketInjector packetInjector;
public void init(File f) {
ProgressManager.ProgressBar progressbar = ProgressManager.push("DungeonsGuide", 4);
@@ -220,8 +221,8 @@ public class DungeonsGuide implements DGInterface {
registerEventsForge(commandReparty = new CommandReparty());
-// registerEventsForge(new FeatureListener());
- registerEventsForge(packetListener = new PacketListener());
+ registerEventsForge(packetInjector = new PacketInjector());
+ registerEventsForge(new PacketListener());
registerEventsForge(new Keybinds());
registerEventsForge(PartyManager.INSTANCE);
@@ -317,7 +318,7 @@ public class DungeonsGuide implements DGInterface {
commands.remove(registeredCommand);
}
- if (packetListener != null) packetListener.cleanup();
+ if (packetInjector != null) packetInjector.cleanup();
try {
EntityPlayerSP ep = (EntityPlayerSP) Minecraft.getMinecraft().getRenderManager().livingPlayer;
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java
index 960c927a..dc48415f 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/SkyblockStatus.java
@@ -24,14 +24,13 @@ import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonLeftEvent;
import kr.syeyoung.dungeonsguide.mod.events.impl.HypixelJoinedEvent;
import kr.syeyoung.dungeonsguide.mod.events.impl.SkyblockJoinedEvent;
import kr.syeyoung.dungeonsguide.mod.events.impl.SkyblockLeftEvent;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.Objective;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.Score;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.ScoreboardManager;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
import lombok.Getter;
import lombok.Setter;
import net.minecraft.client.Minecraft;
-import net.minecraft.scoreboard.Score;
-import net.minecraft.scoreboard.ScoreObjective;
-import net.minecraft.scoreboard.ScorePlayerTeam;
-import net.minecraft.scoreboard.Scoreboard;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
@@ -111,11 +110,10 @@ public class SkyblockStatus {
return;
}
- Scoreboard scoreboard = Minecraft.getMinecraft().thePlayer.getWorldScoreboard();
- ScoreObjective scoreObjective = scoreboard.getObjectiveInDisplaySlot(1);
- if (scoreObjective == null) return;
+ Objective objective = ScoreboardManager.INSTANCE.getSidebarObjective();
+ if (objective == null) return;
- String objectiveName = TextUtils.stripColor(scoreObjective.getDisplayName());
+ String objectiveName = TextUtils.stripColor(objective.getDisplayName());
boolean skyblockFound = false;
for (String skyblock : SKYBLOCK_IN_ALL_LANGUAGES) {
if (objectiveName.startsWith(skyblock)) {
@@ -131,20 +129,21 @@ public class SkyblockStatus {
return;
}
- Collection<Score> scores = scoreboard.getSortedScores(scoreObjective);
+ Collection<Score> scores = objective.getScores();
boolean foundDungeon = false;
for (Score sc : scores) {
- ScorePlayerTeam scorePlayerTeam = scoreboard.getPlayersTeam(sc.getPlayerName());
- String strippedLine = TextUtils.keepScoreboardCharacters(TextUtils.stripColor(ScorePlayerTeam.formatPlayerName(scorePlayerTeam, sc.getPlayerName()))).trim();
+ String strippedLine = TextUtils.keepScoreboardCharacters(
+ TextUtils.stripColor(sc.getJustTeam())).trim();
if (strippedLine.contains("Cleared: ")) {
foundDungeon = true;
DungeonContext context = DungeonsGuide.getDungeonsGuide().getDungeonFacade().getContext();
if(context != null){
- context.setPercentage(Integer.parseInt(strippedLine.substring(9).split(" ")[0]));
+ context.setPercentage(Integer.parseInt(
+ strippedLine.substring(9).split(" ")[0]));
}
}
- if (ScorePlayerTeam.formatPlayerName(scorePlayerTeam, sc.getPlayerName()).startsWith(" §7⏣")) {
+ if (sc.getJustTeam().startsWith(" §7⏣")) {
DungeonContext.setDungeonName(strippedLine.trim());
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java
index 69518af8..7fefe9d7 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java
@@ -71,7 +71,7 @@ public class ChatTransmitter {
public void onTick(TickEvent.ClientTickEvent clientTickEvent) {
if(clientTickEvent.phase != TickEvent.Phase.START && Minecraft.getMinecraft().thePlayer == null) return;
- if (!receiveQueue.isEmpty()) {
+ while (!receiveQueue.isEmpty() && Minecraft.getMinecraft().thePlayer != null) {
ClientChatReceivedEvent event = new ClientChatReceivedEvent((byte) 1, receiveQueue.poll());
MinecraftForge.EVENT_BUS.post(event);
if (!event.isCanceled()) {
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java
index 620f4e75..45eb7dd2 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDgDebug.java
@@ -40,23 +40,30 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.bossfight.BossfightPr
import kr.syeyoung.dungeonsguide.mod.events.impl.DungeonLeftEvent;
import kr.syeyoung.dungeonsguide.mod.features.AbstractFeature;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.dungeon.FeatureDungeonMap;
import kr.syeyoung.dungeonsguide.mod.guiv2.GuiScreenAdapter;
import kr.syeyoung.dungeonsguide.mod.guiv2.view.TestView;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.Score;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.ScoreboardManager;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabList;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabListEntry;
import kr.syeyoung.dungeonsguide.mod.party.PartyContext;
import kr.syeyoung.dungeonsguide.mod.party.PartyManager;
import kr.syeyoung.dungeonsguide.mod.utils.AhUtils;
import kr.syeyoung.dungeonsguide.mod.utils.MapUtils;
-import kr.syeyoung.dungeonsguide.mod.utils.ScoreBoardUtils;
import kr.syeyoung.dungeonsguide.mod.utils.ShortUtils;
+import kr.syeyoung.dungeonsguide.mod.utils.TabListUtil;
import kr.syeyoung.dungeonsguide.mod.wsresource.StaticResourceCache;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.client.network.NetworkPlayerInfo;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.scoreboard.ScorePlayerTeam;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
@@ -96,13 +103,18 @@ public class CommandDgDebug extends CommandBase {
if ("scoreboard".equals(arg)) {
- ScoreBoardUtils.forEachLine(l -> {
- ChatTransmitter.addToQueue("LINE: " + l, false);
- });
+ for (Score score : ScoreboardManager.INSTANCE.getSidebarObjective().getScores()) {
+ ChatTransmitter.addToQueue("LINE: " + score.getVisibleName()+": "+score.getScore());
+ }
} else if ("scoreboardclean".equals(arg)) {
- ScoreBoardUtils.forEachLineClean(l -> {
- ChatTransmitter.addToQueue("LINE: " + l, false);
- });
+ for (Score score : ScoreboardManager.INSTANCE.getSidebarObjective().getScores()) {
+ ChatTransmitter.addToQueue("LINE: " + score.getJustTeam()+": "+score.getScore());
+ }
+ }else if ("tablist".equals(arg)) {
+ for (TabListEntry entry : TabList.INSTANCE.getTabListEntries()) {
+ ChatTransmitter.addToQueue(entry.getFormatted()+" "+entry.getEffectiveName()+"("+entry.getPing()+")" + entry.getGamemode());
+ }
+ ChatTransmitter.addToQueue("VS");
} else if ("mockdungeonstart".equals(arg)) {
if (!Minecraft.getMinecraft().isSingleplayer()) {
ChatTransmitter.addToQueue("This only works in singlepauer", false);
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CustomPacketPlayerListItem.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/PacketProcessedEvent.java
index 7cf0b6cf..2178fc03 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CustomPacketPlayerListItem.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/PacketProcessedEvent.java
@@ -1,6 +1,6 @@
/*
* Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
- * Copyright (C) 2021 cyoung06
+ * Copyright (C) 2023 cyoung06 (syeyoung)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
@@ -16,24 +16,24 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-package kr.syeyoung.dungeonsguide.mod.cosmetics;
+package kr.syeyoung.dungeonsguide.mod.events.impl;
-
-import kr.syeyoung.dungeonsguide.mod.events.impl.PlayerListItemPacketEvent;
+import lombok.AllArgsConstructor;
+import net.minecraft.network.Packet;
import net.minecraft.network.play.INetHandlerPlayClient;
-import net.minecraft.network.play.server.S38PacketPlayerListItem;
-import net.minecraftforge.common.MinecraftForge;
-
-public class CustomPacketPlayerListItem extends S38PacketPlayerListItem {
- public CustomPacketPlayerListItem(S38PacketPlayerListItem packet) {
- super(packet.getAction());
- getEntries().addAll(packet.getEntries());
- }
-
- @Override
- public void processPacket(INetHandlerPlayClient handler) {
- super.processPacket(handler);
+import net.minecraftforge.fml.common.eventhandler.Event;
- MinecraftForge.EVENT_BUS.post(new PlayerListItemPacketEvent(this));
- }
+@AllArgsConstructor
+public abstract class PacketProcessedEvent extends Event {
+ public Packet<INetHandlerPlayClient> packet;
+ public static class Pre extends PacketProcessedEvent {
+ public Pre(Packet<INetHandlerPlayClient> packet) {
+ super(packet);
+ }
+ };
+ public static class Post extends PacketProcessedEvent {
+ public Post(Packet<INetHandlerPlayClient> packet) {
+ super(packet);
+ }
+ };
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/RawPacketReceivedEvent.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/RawPacketReceivedEvent.java
new file mode 100644
index 00000000..efeb8eeb
--- /dev/null
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/impl/RawPacketReceivedEvent.java
@@ -0,0 +1,29 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2023 cyoung06 (syeyoung)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.mod.events.impl;
+
+import lombok.AllArgsConstructor;
+import net.minecraft.network.Packet;
+import net.minecraft.network.play.INetHandlerPlayClient;
+import net.minecraftforge.fml.common.eventhandler.Event;
+
+@AllArgsConstructor
+public class RawPacketReceivedEvent extends Event {
+ public Packet<INetHandlerPlayClient> packet;
+}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/DungeonListener.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/DungeonListener.java
index c36fac6d..d29f1084 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/DungeonListener.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/DungeonListener.java
@@ -35,6 +35,9 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.RoomProcessor;
import kr.syeyoung.dungeonsguide.mod.events.impl.*;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.ScoreboardManager;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabList;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.teams.TeamManager;
import kr.syeyoung.dungeonsguide.mod.utils.MapUtils;
import kr.syeyoung.dungeonsguide.mod.utils.RenderUtils;
import lombok.Getter;
@@ -43,6 +46,7 @@ import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.passive.EntityBat;
+import net.minecraft.scoreboard.Scoreboard;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
@@ -74,6 +78,9 @@ public class DungeonListener {
@SubscribeEvent
public void onWorldLoad(WorldEvent.Unload event) {
+ TabList.INSTANCE.clear();
+ TeamManager.INSTANCE.clear();
+ ScoreboardManager.INSTANCE.clear();
try {
Config.saveConfig();
} catch (IOException e) {
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketInjector.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketInjector.java
new file mode 100644
index 00000000..a18a3641
--- /dev/null
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketInjector.java
@@ -0,0 +1,92 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.mod.events.listener;
+
+import io.netty.channel.*;
+import kr.syeyoung.dungeonsguide.mod.events.impl.*;
+import net.minecraft.client.Minecraft;
+import net.minecraft.network.Packet;
+import net.minecraft.network.play.client.C02PacketUseEntity;
+import net.minecraft.network.play.server.*;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.network.FMLNetworkEvent;
+
+import java.util.HashSet;
+import java.util.Set;
+
+@ChannelHandler.Sharable
+public class PacketInjector extends ChannelDuplexHandler {
+
+ private static Set<Class> targettedPackets = new HashSet<>();
+ static {
+ targettedPackets.add(S04PacketEntityEquipment.class);
+ targettedPackets.add(S45PacketTitle.class);
+ targettedPackets.add(S38PacketPlayerListItem.class);
+ targettedPackets.add(S30PacketWindowItems.class);
+ targettedPackets.add(S2FPacketSetSlot.class);
+ targettedPackets.add(S23PacketBlockChange.class);
+ targettedPackets.add(S22PacketMultiBlockChange.class);
+ targettedPackets.add(S3BPacketScoreboardObjective.class);
+ targettedPackets.add(S3CPacketUpdateScore.class);
+ targettedPackets.add(S3DPacketDisplayScoreboard.class);
+ targettedPackets.add(S3EPacketTeams.class);
+ }
+ @Override
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
+ Packet packet = (Packet) msg;
+ if (targettedPackets.contains(msg.getClass())) {
+ RawPacketReceivedEvent receivedEvent = new RawPacketReceivedEvent(packet);
+ MinecraftForge.EVENT_BUS.post(receivedEvent);
+ packet = new WrappedPacket(receivedEvent.packet);
+ }
+ super.channelRead(ctx, packet);
+ }
+
+ @Override
+ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
+ Packet packet = (Packet) msg;
+ if (packet instanceof C02PacketUseEntity) {
+ C02PacketUseEntity packet2 = (C02PacketUseEntity) packet;
+ PlayerInteractEntityEvent piee;
+ if (packet2.getAction() == C02PacketUseEntity.Action.ATTACK)
+ piee = new PlayerInteractEntityEvent(true, packet2.getEntityFromWorld(Minecraft.getMinecraft().theWorld));
+ else
+ piee = new PlayerInteractEntityEvent(false, ((C02PacketUseEntity) packet).getEntityFromWorld(Minecraft.getMinecraft().theWorld));
+
+ if (MinecraftForge.EVENT_BUS.post(piee)) return;
+ }
+ super.write(ctx, msg, promise);
+ }
+
+ private ChannelPipeline thePipeline;
+ @SubscribeEvent
+ public void onServerConnect(FMLNetworkEvent.ClientConnectedToServerEvent event) {
+ (thePipeline =event.manager.channel().pipeline()).addBefore("packet_handler", "dg_packet_handler", this);
+ }
+
+ public void cleanup() {
+ try {
+ if (thePipeline != null)
+ thePipeline.remove("dg_packet_handler");
+ } catch (Exception e) {
+
+ }
+ }
+}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketListener.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketListener.java
index dcdc2c53..2012f129 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketListener.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketListener.java
@@ -1,6 +1,6 @@
/*
* Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
- * Copyright (C) 2021 cyoung06
+ * Copyright (C) 2023 cyoung06 (syeyoung)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
@@ -18,181 +18,193 @@
package kr.syeyoung.dungeonsguide.mod.events.listener;
-import io.netty.channel.*;
import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.SkyblockStatus;
-import kr.syeyoung.dungeonsguide.mod.cosmetics.CustomPacketPlayerListItem;
-import kr.syeyoung.dungeonsguide.mod.events.impl.BlockUpdateEvent;
-import kr.syeyoung.dungeonsguide.mod.events.impl.PlayerInteractEntityEvent;
-import kr.syeyoung.dungeonsguide.mod.events.impl.TitleEvent;
-import kr.syeyoung.dungeonsguide.mod.events.impl.WindowUpdateEvent;
+import kr.syeyoung.dungeonsguide.mod.events.impl.*;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
-import net.minecraft.block.state.IBlockState;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.Objective;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.scoreboard.ScoreboardManager;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabList;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.tab.TabListEntry;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.teams.NameTagVisibility;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.teams.Team;
+import kr.syeyoung.dungeonsguide.mod.parallelUniverse.teams.TeamManager;
import net.minecraft.client.Minecraft;
import net.minecraft.network.Packet;
-import net.minecraft.network.play.INetHandlerPlayClient;
-import net.minecraft.network.play.client.C02PacketUseEntity;
import net.minecraft.network.play.server.*;
-import net.minecraft.util.BlockPos;
+import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.Tuple;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
-import net.minecraftforge.fml.common.network.FMLNetworkEvent;
-import java.util.Arrays;
-
-@ChannelHandler.Sharable
-public class PacketListener extends ChannelDuplexHandler {
+public class PacketListener {
private final SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- @Override
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
- Packet packet = (Packet) msg;
+ @SubscribeEvent
+ public void onPacketReceive(RawPacketReceivedEvent event) {
+ Packet packet = event.packet;
if (skyblockStatus.isOnSkyblock()
- && msg instanceof S04PacketEntityEquipment
- && FeatureRegistry.FIX_SPIRIT_BOOTS.isEnabled()) { // Inventory packet name
- S04PacketEntityEquipment packet2 = (S04PacketEntityEquipment) msg;
+ && packet instanceof S04PacketEntityEquipment
+ && FeatureRegistry.FIX_SPIRIT_BOOTS.isEnabled()) { // Inventory packet name
+ S04PacketEntityEquipment packet2 = (S04PacketEntityEquipment) packet;
if (packet2.getEntityID() == Minecraft.getMinecraft().thePlayer.getEntityId()) {
packet2 = new S04PacketEntityEquipment(packet2.getEntityID(), packet2.getEquipmentSlot() + 1, packet2.getItemStack());
packet = packet2;
}
}
- if (packet instanceof S45PacketTitle) {
- MinecraftForge.EVENT_BUS.post(new TitleEvent((S45PacketTitle) packet));
- }
- if (packet instanceof S38PacketPlayerListItem) {
- packet = new CustomPacketPlayerListItem((S38PacketPlayerListItem) packet);
- }
- if (packet instanceof S30PacketWindowItems) {
- packet = new CustomWindowItems((S30PacketWindowItems) packet);
- }
- if (packet instanceof S2FPacketSetSlot) {
- packet = new CustomSetSlot((S2FPacketSetSlot) packet);
- }
- if (packet instanceof S23PacketBlockChange) {
- packet = new SingleBlockChange((S23PacketBlockChange) packet);
- } else if (packet instanceof S22PacketMultiBlockChange) {
- packet = new MultiBlockChange((S22PacketMultiBlockChange) packet);
- }
- super.channelRead(ctx, packet);
+ event.packet = packet;
}
- private static class CustomWindowItems extends S30PacketWindowItems {
- public CustomWindowItems(S30PacketWindowItems parent) {
- super(parent.func_148911_c(), Arrays.asList(parent.getItemStacks()));
- }
-
- @Override
- public void processPacket(INetHandlerPlayClient handler) {
- super.processPacket(handler);
- MinecraftForge.EVENT_BUS.post(new WindowUpdateEvent(this, null));
- }
- }
- private static class CustomSetSlot extends S2FPacketSetSlot {
- public CustomSetSlot(S2FPacketSetSlot parent) {
- super(parent.func_149175_c(), parent.func_149173_d(), parent.func_149174_e());
- }
- @Override
- public void processPacket(INetHandlerPlayClient handler) {
- super.processPacket(handler);
- MinecraftForge.EVENT_BUS.post(new WindowUpdateEvent(null, this));
+ @SubscribeEvent
+ public void packetProcessPost(PacketProcessedEvent.Post post) {
+ Packet packet = post.packet;
+ if (packet instanceof S30PacketWindowItems) {
+ MinecraftForge.EVENT_BUS.post(new WindowUpdateEvent((S30PacketWindowItems) packet, null));
+ } else if (packet instanceof S2FPacketSetSlot) {
+ MinecraftForge.EVENT_BUS.post(new WindowUpdateEvent( null, (S2FPacketSetSlot) packet));