1414import com .enderio .machines .common .init .MachineBlockEntities ;
1515import com .enderio .machines .common .obelisk .ObeliskAreaManager ;
1616import com .mojang .authlib .GameProfile ;
17- import java .util .List ;
18- import java .util .UUID ;
17+ import me .liliandev .ensure .ensures .EnsureSide ;
1918import net .minecraft .core .BlockPos ;
2019import net .minecraft .server .level .ServerLevel ;
2120import net .minecraft .world .entity .LivingEntity ;
3938import net .neoforged .neoforge .common .util .FakePlayer ;
4039import org .jetbrains .annotations .Nullable ;
4140
41+ import java .util .List ;
42+
4243public class AttractorObeliskBlockEntity extends ObeliskBlockEntity <AttractorObeliskBlockEntity > {
4344
4445 private static final QuadraticScalable ENERGY_CAPACITY = new QuadraticScalable (CapacitorModifier .ENERGY_CAPACITY ,
@@ -51,6 +52,7 @@ public class AttractorObeliskBlockEntity extends ObeliskBlockEntity<AttractorObe
5152 private final Vec3 targetPos ;
5253
5354 @ UseOnly (LogicalSide .SERVER )
55+ @ Nullable
5456 private FakePlayer fakePlayer ;
5557
5658 public AttractorObeliskBlockEntity (BlockPos worldPosition , BlockState blockState ) {
@@ -59,6 +61,20 @@ public AttractorObeliskBlockEntity(BlockPos worldPosition, BlockState blockState
5961 targetPos = new Vec3 (worldPosition .getX () + 0.5 , worldPosition .getY () + 0.5 , worldPosition .getZ () + 0.5 );
6062 }
6163
64+ @ EnsureSide (EnsureSide .Side .SERVER )
65+ private FakePlayer getFakePlayer () {
66+ if (!(level instanceof ServerLevel serverLevel )) {
67+ throw new IllegalStateException ("Level is null" );
68+ }
69+
70+ if (fakePlayer == null ) {
71+ fakePlayer = new FakePlayer (serverLevel , new GameProfile (getMachineOwnerOrRandom (), "enderio:attractor:" + worldPosition ));
72+ fakePlayer .setPos (targetPos .x , targetPos .y , targetPos .z );
73+ }
74+
75+ return fakePlayer ;
76+ }
77+
6278 @ Override
6379 protected @ Nullable ObeliskAreaManager <AttractorObeliskBlockEntity > getAreaManager (ServerLevel level ) {
6480 return null ;
@@ -92,10 +108,6 @@ public String getColor() {
92108 @ Override
93109 public void setLevel (Level level ) {
94110 super .setLevel (level );
95- if (level instanceof ServerLevel sl ) {
96- fakePlayer = new FakePlayer (sl , new GameProfile (getMachineOwnerOrRandom (), "enderio:attractor:" + worldPosition ));
97- fakePlayer .setPos (targetPos .x , targetPos .y , targetPos .z );
98- }
99111 }
100112
101113 @ Override
@@ -144,7 +156,7 @@ private boolean useTarget(Mob mob) {
144156
145157 private void setTarget (Mob mob ) {
146158 assert level != null ;
147- mob .setTarget (fakePlayer );
159+ mob .setTarget (getFakePlayer () );
148160 }
149161
150162 private void attractMob (Mob mob ) {
@@ -168,8 +180,12 @@ private void directPull(LivingEntity mob, float speed) {
168180 @ Override
169181 public void setRemoved () {
170182 super .setRemoved ();
171- if (!level .isClientSide ) {
172- fakePlayer .discard ();
183+
184+ if (level != null && !level .isClientSide ) {
185+ if (fakePlayer != null ) {
186+ fakePlayer .discard ();
187+ fakePlayer = null ;
188+ }
173189 }
174190 }
175191}
0 commit comments