Skip to content

Commit

Permalink
Fix possible NullPointerException when sending network packet
Browse files Browse the repository at this point in the history
  • Loading branch information
edoren committed Jul 9, 2024
1 parent d28320c commit e154133
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 21 deletions.
15 changes: 10 additions & 5 deletions src/main/java/me/edoren/skin_changer/SkinChanger.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import me.edoren.skin_changer.server.ServerController;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.server.ServerStartedEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
Expand All @@ -16,19 +17,23 @@ public SkinChanger() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onForgePreInit);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onClientSetup);

MinecraftForge.EVENT_BUS.addListener(this::onServerStarted);
MinecraftForge.EVENT_BUS.register(this);
}

private void onForgePreInit(final FMLCommonSetupEvent event) {
NetworkContext.GetInstance().initialize();
event.enqueueWork(() -> {
NetworkContext.GetInstance().initialize();
});
}

private void onClientSetup(final FMLClientSetupEvent event) {
// LogManager.getLogger().info("Got game settings {}", event.getMinecraftSupplier().get().gameSettings);
ClientController.GetInstance().initialize();
event.enqueueWork(() -> {
ClientController.GetInstance().initialize();
});
}

private void onServerStarted(ServerStartedEvent event) {
@SubscribeEvent
public void onServerStarted(ServerStartedEvent event) {
ServerController.GetInstance().initialize(event.getServer());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;

import java.nio.ByteBuffer;
import java.util.Map;
Expand All @@ -31,7 +32,8 @@ private ClientController() {
}

public void initialize() {
MinecraftForge.EVENT_BUS.addListener(this::onClientTickEvent);
MinecraftForge.EVENT_BUS.unregister(this);
MinecraftForge.EVENT_BUS.register(this);
}

public ResourceLocation getLocationCape(PlayerModel model) {
Expand Down Expand Up @@ -78,7 +80,8 @@ public CustomSkinTexture getOrCreateTexture(ByteBuffer data, ISkin skin) {
return textures.get(data);
}

private void onClientTickEvent(TickEvent.ClientTickEvent event) {
@SubscribeEvent
public void onClientTickEvent(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.START) {
ClientLevel world = Minecraft.getInstance().level;
if (world != null) {
Expand Down
27 changes: 17 additions & 10 deletions src/main/java/me/edoren/skin_changer/common/NetworkContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import me.edoren.skin_changer.common.messages.PlayerSkinUpdateMessage;
import me.edoren.skin_changer.server.ServerMessageHandler;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.network.NetworkDirection;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.simple.SimpleChannel;
//import net.minecraft.util.ResourceLocation;
Expand Down Expand Up @@ -33,17 +34,23 @@ private NetworkContext() {
}

public void initialize() {
simpleChannel = NetworkRegistry.newSimpleChannel(simpleChannelRL, () -> MESSAGE_PROTOCOL_VERSION,
ClientMessageHandler::isThisProtocolAcceptedByClient,
ServerMessageHandler::isThisProtocolAcceptedByServer);
simpleChannel = NetworkRegistry.ChannelBuilder.named(simpleChannelRL)
.networkProtocolVersion(() -> MESSAGE_PROTOCOL_VERSION)
.clientAcceptedVersions(ClientMessageHandler::isThisProtocolAcceptedByClient)
.serverAcceptedVersions(ServerMessageHandler::isThisProtocolAcceptedByServer).simpleChannel();

simpleChannel.messageBuilder(PlayerSkinUpdateMessage.class, PLAYER_SKIN_UPDATE_MESSAGE_ID, NetworkDirection.PLAY_TO_CLIENT)
.encoder(PlayerSkinUpdateMessage::encode)
.decoder(PlayerSkinUpdateMessage::decode)
.consumerMainThread(ClientMessageHandler::onMessageReceived)
.add();

simpleChannel.messageBuilder(PlayerSkinRequestMessage.class, PLAYER_SKIN_REQUEST_MESSAGE_ID, NetworkDirection.PLAY_TO_SERVER)
.encoder(PlayerSkinRequestMessage::encode)
.decoder(PlayerSkinRequestMessage::decode)
.consumerMainThread(ServerMessageHandler::onMessageReceived)
.add();

simpleChannel.registerMessage(PLAYER_SKIN_UPDATE_MESSAGE_ID, PlayerSkinUpdateMessage.class,
PlayerSkinUpdateMessage::encode, PlayerSkinUpdateMessage::decode,
ClientMessageHandler::onMessageReceived);

simpleChannel.registerMessage(PLAYER_SKIN_REQUEST_MESSAGE_ID, PlayerSkinRequestMessage.class,
PlayerSkinRequestMessage::encode, PlayerSkinRequestMessage::decode,
ServerMessageHandler::onMessageReceived);
}

public SimpleChannel getSimpleChannel() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.network.PacketDistributor;
import org.apache.logging.log4j.LogManager;

Expand Down Expand Up @@ -80,8 +81,8 @@ public void initialize(File saveFolder) {
}
this.cacheFile = cacheFile.getPath();

MinecraftForge.EVENT_BUS.addListener(this::onPlayerLogin);
MinecraftForge.EVENT_BUS.addListener(this::onPlayerLogout);
MinecraftForge.EVENT_BUS.unregister(this);
MinecraftForge.EVENT_BUS.register(this);
}

public void registerCapeProvider(ISkinProvider provider) {
Expand Down Expand Up @@ -286,7 +287,8 @@ private void writeCacheFile(List<PlayerModel> playersCache) throws IOException {
fw.close();
}

private void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) {
@SubscribeEvent
public void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) {
ServerPlayer player = (ServerPlayer) event.getEntity();
GameProfile profile = event.getEntity().getGameProfile();
LogManager.getLogger().info("Player {} just logged in with id {}", profile.getName(), profile.getId());
Expand All @@ -307,7 +309,8 @@ private void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event) {
});
}

private void onPlayerLogout(PlayerEvent.PlayerLoggedOutEvent event) {
@SubscribeEvent
public void onPlayerLogout(PlayerEvent.PlayerLoggedOutEvent event) {
GameProfile profile = event.getEntity().getGameProfile();
PlayerModel model = new PlayerModel(profile);
if (loadedData.get(DataType.SKIN).containsKey(model) || loadedData.get(DataType.CAPE).containsKey(model)) {
Expand Down

0 comments on commit e154133

Please sign in to comment.