From f052efd30f6479eedf6e268dd2860d31c7e14b82 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Sat, 30 Jan 2021 18:04:56 +0800 Subject: [PATCH] Implement bridge methods (#125) --- .../common/mixin/core/world/WorldMixin.java | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/WorldMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/WorldMixin.java index c0241b2a..b4af83a6 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/WorldMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/WorldMixin.java @@ -17,6 +17,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; import net.minecraft.world.DimensionType; import net.minecraft.world.IWorld; +import net.minecraft.world.IWorldWriter; import net.minecraft.world.World; import net.minecraft.world.border.WorldBorder; import net.minecraft.world.chunk.Chunk; @@ -31,6 +32,7 @@ import org.bukkit.craftbukkit.v.block.CraftBlock; import org.bukkit.craftbukkit.v.block.data.CraftBlockData; import org.bukkit.craftbukkit.v.event.CraftEventFactory; import org.bukkit.event.block.BlockPhysicsEvent; +import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.generator.ChunkGenerator; import org.spigotmc.SpigotWorldConfig; import org.spongepowered.asm.mixin.Final; @@ -49,7 +51,7 @@ import java.util.Optional; import java.util.function.Supplier; @Mixin(World.class) -public abstract class WorldMixin implements WorldBridge { +public abstract class WorldMixin implements WorldBridge, IWorldWriter { // @formatter:off @Shadow @Nullable public TileEntity getTileEntity(BlockPos pos) { return null; } @@ -177,7 +179,7 @@ public abstract class WorldMixin implements WorldBridge { ci.cancel(); } } - } catch(StackOverflowError e) { + } catch (StackOverflowError e) { lastPhysicsProblem = pos; } } @@ -195,7 +197,7 @@ public abstract class WorldMixin implements WorldBridge { ci.cancel(); } } - } catch(StackOverflowError e) { + } catch (StackOverflowError e) { lastPhysicsProblem = pos; } } @@ -269,4 +271,34 @@ public abstract class WorldMixin implements WorldBridge { public ChunkGenerator bridge$getGenerator() { return generator; } + + @Override + public ServerWorld bridge$getMinecraftWorld() { + return getWorld().getHandle(); + } + + @Override + public boolean bridge$addEntity(Entity entity, CreatureSpawnEvent.SpawnReason reason) { + if (getWorld().getHandle() != (Object) this) { + return ((WorldBridge) getWorld().getHandle()).bridge$addEntity(entity, reason); + } else { + this.bridge$pushAddEntityReason(reason); + return this.addEntity(entity); + } + } + + @Override + public void bridge$pushAddEntityReason(CreatureSpawnEvent.SpawnReason reason) { + if (getWorld().getHandle() != (Object) this) { + ((WorldBridge) getWorld().getHandle()).bridge$pushAddEntityReason(reason); + } + } + + @Override + public CreatureSpawnEvent.SpawnReason bridge$getAddEntityReason() { + if (getWorld().getHandle() != (Object) this) { + return ((WorldBridge) getWorld().getHandle()).bridge$getAddEntityReason(); + } + return null; + } }