diff --git a/src/main/java/net/minecraftforge/fml/LogicalSidedProvider.java b/src/main/java/net/minecraftforge/fml/LogicalSidedProvider.java index 03eafed1e8..c44acb6911 100644 --- a/src/main/java/net/minecraftforge/fml/LogicalSidedProvider.java +++ b/src/main/java/net/minecraftforge/fml/LogicalSidedProvider.java @@ -21,14 +21,17 @@ package net.minecraftforge.fml; import net.minecraft.client.Minecraft; import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; +import java.util.Optional; import java.util.function.Function; import java.util.function.Supplier; public enum LogicalSidedProvider { WORKQUEUE((c)->c.get(), (s)->s.get()), - INSTANCE((c)->c.get(), (s)->s.get()) + INSTANCE((c)->c.get(), (s)->s.get()), + CLIENTWORLD((c)-> Optional.of(c.get().world), (s)->Optional.empty()) ; private static Supplier client; private static Supplier server; diff --git a/src/main/java/net/minecraftforge/fml/network/FMLPlayMessages.java b/src/main/java/net/minecraftforge/fml/network/FMLPlayMessages.java index 636b374234..eaef0a2d06 100644 --- a/src/main/java/net/minecraftforge/fml/network/FMLPlayMessages.java +++ b/src/main/java/net/minecraftforge/fml/network/FMLPlayMessages.java @@ -27,11 +27,14 @@ import net.minecraft.entity.EntityType; import net.minecraft.network.PacketBuffer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; import net.minecraftforge.fml.ExtensionPoint; +import net.minecraftforge.fml.LogicalSidedProvider; import net.minecraftforge.fml.ModList; import net.minecraft.util.registry.IRegistry; import net.minecraftforge.fml.common.registry.IEntityAdditionalSpawnData; +import java.util.Optional; import java.util.UUID; import java.util.function.Supplier; @@ -128,7 +131,8 @@ public class FMLPlayMessages throw new RuntimeException(String.format("Could not spawn entity (id %d) with unknown type at (%f, %f, %f)", msg.entityId, msg.posX, msg.posY, msg.posZ)); } - Entity e = type.handleSpawnMessage(Minecraft.getInstance().world, msg); + Optional world = LogicalSidedProvider.CLIENTWORLD.get(ctx.get().getDirection().getLogicalSide()); + Entity e = world.map(w->type.handleSpawnMessage(w, msg)).orElse(null); if (e == null) { return; diff --git a/src/main/java/net/minecraftforge/fml/network/NetworkEvent.java b/src/main/java/net/minecraftforge/fml/network/NetworkEvent.java index 42f3d690dc..ce8e8dc33c 100644 --- a/src/main/java/net/minecraftforge/fml/network/NetworkEvent.java +++ b/src/main/java/net/minecraftforge/fml/network/NetworkEvent.java @@ -34,9 +34,7 @@ import net.minecraft.util.IThreadListener; import net.minecraft.util.ResourceLocation; import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.fml.LogicalSidedProvider; -import org.apache.commons.lang3.tuple.Pair; -import java.util.ArrayList; import java.util.List; import java.util.function.Supplier;