Skip to content

Commit 9e116e2

Browse files
SonOfTheStarsdavboecki
authored andcommitted
Fixed improper fake Player creation (#1197)
1 parent b285129 commit 9e116e2

File tree

6 files changed

+299
-37
lines changed

6 files changed

+299
-37
lines changed

common/logisticspipes/blocks/crafting/FakePlayer.java

-29
This file was deleted.

common/logisticspipes/blocks/crafting/LogisticsCraftingTableTileEntity.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import net.minecraft.entity.EntityLivingBase;
99
import net.minecraft.entity.player.EntityPlayer;
10+
import net.minecraft.entity.player.EntityPlayerMP;
1011
import net.minecraft.inventory.IInventory;
1112
import net.minecraft.inventory.InventoryCraftResult;
1213
import net.minecraft.inventory.SlotCrafting;
@@ -19,6 +20,8 @@
1920

2021
import net.minecraftforge.common.capabilities.Capability;
2122
import net.minecraftforge.common.util.Constants;
23+
import net.minecraftforge.event.world.WorldEvent;
24+
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
2225
import net.minecraftforge.items.CapabilityItemHandler;
2326
import net.minecraftforge.items.wrapper.InvWrapper;
2427

@@ -58,7 +61,7 @@ public class LogisticsCraftingTableTileEntity extends LogisticsSolidTileEntity i
5861
public DictResource[] fuzzyFlags = new DictResource[9];
5962
public DictResource outputFuzzyFlags = new DictResource(null, null);
6063
private IRecipe cache;
61-
private EntityPlayer fake;
64+
private EntityPlayerMP fake;
6265
private PlayerIdentifier placedBy = null;
6366

6467
private InvWrapper invWrapper = new InvWrapper(this);
@@ -284,7 +287,7 @@ public ItemStack getOutput(IResource wanted, IRoutedPowerProvider power) {
284287
}
285288
result = recipe.getCraftingResult(crafter);
286289
if (fake == null) {
287-
fake = MainProxy.getFakePlayer(this);
290+
fake = MainProxy.getFakePlayer(this.world);
288291
}
289292
result = result.copy();
290293
SlotCrafting craftingSlot = new SlotCrafting(fake, crafter, resultInv, 0, 0, 0) {
@@ -551,4 +554,10 @@ public boolean hasCustomName() {
551554
public ITextComponent getDisplayName() {
552555
return null;
553556
}
557+
558+
@SubscribeEvent
559+
public void onWorldUnload(WorldEvent.Unload worldEvent) {
560+
if (fake.world == worldEvent.getWorld())
561+
fake = null;
562+
}
554563
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
package logisticspipes.entity;
2+
3+
import io.netty.channel.Channel;
4+
import io.netty.channel.ChannelHandlerContext;
5+
import io.netty.util.concurrent.Future;
6+
import io.netty.util.concurrent.GenericFutureListener;
7+
import net.minecraft.entity.player.EntityPlayerMP;
8+
import net.minecraft.network.*;
9+
import net.minecraft.network.play.client.*;
10+
import net.minecraft.network.play.server.SPacketPlayerPosLook;
11+
import net.minecraft.server.MinecraftServer;
12+
import net.minecraft.util.text.ITextComponent;
13+
14+
import javax.crypto.SecretKey;
15+
import java.net.SocketAddress;
16+
import java.util.Set;
17+
18+
19+
public class FakeNetServerHandler extends NetHandlerPlayServer {
20+
21+
public static class NetworkManagerFake extends NetworkManager {
22+
23+
public NetworkManagerFake() {
24+
super(EnumPacketDirection.CLIENTBOUND);
25+
}
26+
27+
@Override
28+
public void channelActive(ChannelHandlerContext p_channelActive_1_) throws Exception { }
29+
30+
@Override
31+
public void setConnectionState(EnumConnectionState newState) { }
32+
33+
@Override
34+
public void channelInactive(ChannelHandlerContext p_channelInactive_1_) { }
35+
36+
@Override
37+
public void exceptionCaught(ChannelHandlerContext p_exceptionCaught_1_, Throwable p_exceptionCaught_2_) { }
38+
39+
@Override
40+
public void setNetHandler(INetHandler handler) { }
41+
42+
@Override
43+
public void sendPacket(Packet<?> packetIn) { }
44+
45+
@Override
46+
public void sendPacket(Packet<?> packetIn, GenericFutureListener<? extends Future<? super Void>> listener, GenericFutureListener<? extends Future<? super Void>>... listeners) { }
47+
48+
@Override
49+
public void processReceivedPackets() { }
50+
51+
@Override
52+
public SocketAddress getRemoteAddress() {
53+
return null;
54+
}
55+
56+
@Override
57+
public boolean isLocalChannel() {
58+
return false;
59+
}
60+
61+
@Override
62+
public void enableEncryption(SecretKey key) { }
63+
64+
@Override
65+
public boolean isChannelOpen() {
66+
return false;
67+
}
68+
69+
@Override
70+
public INetHandler getNetHandler() {
71+
return null;
72+
}
73+
74+
@Override
75+
public ITextComponent getExitMessage() {
76+
return null;
77+
}
78+
79+
@Override
80+
public void setCompressionThreshold(int threshold) { }
81+
82+
@Override
83+
public void disableAutoRead() { }
84+
85+
@Override
86+
public void checkDisconnected() { }
87+
88+
@Override
89+
public Channel channel() {
90+
return null;
91+
}
92+
93+
}
94+
95+
public FakeNetServerHandler(MinecraftServer server, EntityPlayerMP playerIn) {
96+
super(server, new NetworkManagerFake(), playerIn);
97+
}
98+
99+
@Override
100+
public void update() { }
101+
102+
@Override
103+
public void disconnect(final ITextComponent textComponent) { }
104+
105+
@Override
106+
public void processInput(CPacketInput packetIn) { }
107+
108+
@Override
109+
public void processVehicleMove(CPacketVehicleMove packetIn) { }
110+
111+
@Override
112+
public void processConfirmTeleport(CPacketConfirmTeleport packetIn) { }
113+
114+
@Override
115+
public void processPlayer(CPacketPlayer packetIn) { }
116+
117+
@Override
118+
public void setPlayerLocation(double x, double y, double z, float yaw, float pitch) { }
119+
120+
@Override
121+
public void setPlayerLocation(double x, double y, double z, float yaw, float pitch, Set<SPacketPlayerPosLook.EnumFlags> relativeSet) { }
122+
123+
@Override
124+
public void processPlayerDigging(CPacketPlayerDigging packetIn) { }
125+
126+
@Override
127+
public void processTryUseItemOnBlock(CPacketPlayerTryUseItemOnBlock packetIn) { }
128+
129+
@Override
130+
public void processTryUseItem(CPacketPlayerTryUseItem packetIn) { }
131+
132+
@Override
133+
public void handleSpectate(CPacketSpectate packetIn) { }
134+
135+
@Override
136+
public void handleResourcePackStatus(CPacketResourcePackStatus packetIn) { }
137+
138+
@Override
139+
public void processSteerBoat(CPacketSteerBoat packetIn) { }
140+
141+
@Override
142+
public void onDisconnect(ITextComponent reason) { }
143+
144+
@Override
145+
public void sendPacket(final Packet<?> packetIn) { }
146+
147+
@Override
148+
public void processHeldItemChange(CPacketHeldItemChange packetIn) { }
149+
150+
@Override
151+
public void processChatMessage(CPacketChatMessage packetIn) { }
152+
153+
@Override
154+
public void handleAnimation(CPacketAnimation packetIn) { }
155+
156+
@Override
157+
public void processEntityAction(CPacketEntityAction packetIn) { }
158+
159+
@Override
160+
public void processUseEntity(CPacketUseEntity packetIn) { }
161+
162+
@Override
163+
public void processClientStatus(CPacketClientStatus packetIn) { }
164+
165+
@Override
166+
public void processCloseWindow(CPacketCloseWindow packetIn) { }
167+
168+
@Override
169+
public void processClickWindow(CPacketClickWindow packetIn) { }
170+
171+
@Override
172+
public void processEnchantItem(CPacketEnchantItem packetIn) { }
173+
174+
@Override
175+
public void processCreativeInventoryAction(CPacketCreativeInventoryAction packetIn) { }
176+
177+
@Override
178+
public void processConfirmTransaction(CPacketConfirmTransaction packetIn) { }
179+
180+
@Override
181+
public void processUpdateSign(CPacketUpdateSign packetIn) { }
182+
183+
@Override
184+
public void processKeepAlive(CPacketKeepAlive packetIn) { }
185+
186+
@Override
187+
public void processPlayerAbilities(CPacketPlayerAbilities packetIn) { }
188+
189+
@Override
190+
public void processTabComplete(CPacketTabComplete packetIn) { }
191+
192+
@Override
193+
public void processClientSettings(CPacketClientSettings packetIn) { }
194+
195+
@Override
196+
public void processCustomPayload(CPacketCustomPayload packetIn) { }
197+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package logisticspipes.entity;
2+
3+
import com.mojang.authlib.GameProfile;
4+
import net.minecraft.item.crafting.IRecipe;
5+
import net.minecraft.util.ResourceLocation;
6+
import net.minecraft.util.text.ITextComponent;
7+
import net.minecraft.util.text.TextComponentString;
8+
import net.minecraft.world.WorldServer;
9+
import net.minecraftforge.common.util.FakePlayer;
10+
import net.minecraftforge.fml.common.FMLCommonHandler;
11+
12+
import java.util.List;
13+
import java.util.UUID;
14+
15+
public class FakePlayerLP extends FakePlayer {
16+
17+
public static GameProfile LPPLAYER = new GameProfile(UUID.fromString("e7d8e347-3828-4f39-b76f-ea519857c004"), "[LogisticsPipes]");
18+
19+
public String myName = "[LogisticsPipes]";
20+
21+
public FakePlayerLP(WorldServer world) {
22+
super(world, LPPLAYER);
23+
connection = new FakeNetServerHandler(FMLCommonHandler.instance().getMinecraftServerInstance(), this);
24+
this.addedToChunk = false;
25+
this.posX = 0;
26+
this.posY = 0;
27+
this.posZ = 0;
28+
}
29+
30+
@Override
31+
public ITextComponent getDisplayName() {
32+
return new TextComponentString(getName());
33+
}
34+
35+
@Override
36+
public void onUpdate() { }
37+
38+
@Override
39+
public void unlockRecipes(List<IRecipe> p_192021_1_) { }
40+
41+
@Override
42+
public void unlockRecipes(ResourceLocation[] p_193102_1_) { }
43+
44+
@Override
45+
public void resetRecipes(List<IRecipe> p_192022_1_) { }
46+
}

common/logisticspipes/pipes/PipeBlockRequestTable.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import logisticspipes.utils.tuples.Pair;
4242

4343
import net.minecraft.entity.player.EntityPlayer;
44+
import net.minecraft.entity.player.EntityPlayerMP;
4445
import net.minecraft.inventory.IInventory;
4546
import net.minecraft.inventory.InventoryCraftResult;
4647
import net.minecraft.inventory.SlotCrafting;
@@ -51,6 +52,8 @@
5152

5253
import net.minecraft.util.EnumFacing;
5354
import net.minecraft.util.text.TextComponentTranslation;
55+
import net.minecraftforge.event.world.WorldEvent;
56+
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
5457

5558
public class PipeBlockRequestTable extends PipeItemsRequestLogistics implements ISimpleInventoryEventHandler, IRequestWatcher, IGuiOpenControler, IRotationProvider {
5659

@@ -61,7 +64,7 @@ public class PipeBlockRequestTable extends PipeItemsRequestLogistics implements
6164
public SimpleStackInventory toSortInv = new SimpleStackInventory(1, "Sorting Slot", 64);
6265
private InventoryCraftResult vanillaResult = new InventoryCraftResult();
6366
private IRecipe cache;
64-
private EntityPlayer fake;
67+
private EntityPlayerMP fake;
6568
private int delay = 0;
6669
private int tick = 0;
6770
private int rotation;
@@ -429,7 +432,7 @@ public ItemStack getOutput(boolean oreDict) {
429432
}
430433
result = cache.getCraftingResult(crafter);
431434
if (fake == null) {
432-
fake = MainProxy.getFakePlayer(container);
435+
fake = MainProxy.getFakePlayer(getWorld());
433436
}
434437
result = result.copy();
435438

@@ -613,4 +616,10 @@ public void setRotation(int rotation) {
613616
public boolean isMultipartAllowedInPipe() {
614617
return false;
615618
}
619+
620+
@SubscribeEvent
621+
public void onWorldUnload(WorldEvent.Unload worldEvent) {
622+
if (fake.world == worldEvent.getWorld())
623+
fake = null;
624+
}
616625
}

0 commit comments

Comments
 (0)