diff options
| author | syeyoung <cyoung06@naver.com> | 2023-01-22 16:31:36 +0900 |
|---|---|---|
| committer | syeyoung <cyoung06@naver.com> | 2023-01-22 16:42:56 +0900 |
| commit | 4b6f8e059e8417c14fc5e93a6bda55526986f646 (patch) | |
| tree | 41f68e37dc2d42ebfb2231913e745a9e539b4631 /mod/src/main/java/kr | |
| parent | 394c52045bcb53a93c08cfab6d60a42bfd777d59 (diff) | |
| download | Skyblock-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')
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)); |
