From f2b16223557d2540ef8d7aa061681db80b187de9 Mon Sep 17 00:00:00 2001 From: Lex Manos Date: Sun, 7 Dec 2014 01:52:29 -0800 Subject: [PATCH] Added CreateSpawnPosition event. --- .../minecraft/world/WorldServer.java.patch | 20 +++++++++++++------ .../event/ForgeEventFactory.java | 6 ++++++ .../event/world/WorldEvent.java | 17 ++++++++++++++++ 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/patches/minecraft/net/minecraft/world/WorldServer.java.patch b/patches/minecraft/net/minecraft/world/WorldServer.java.patch index 7973f3c17..82158837d 100644 --- a/patches/minecraft/net/minecraft/world/WorldServer.java.patch +++ b/patches/minecraft/net/minecraft/world/WorldServer.java.patch @@ -174,7 +174,15 @@ return !this.field_73061_a.func_175579_a(this, p_175660_2_, p_175660_1_) && this.func_175723_af().func_177746_a(p_175660_2_); } -@@ -855,7 +898,7 @@ +@@ -810,6 +853,7 @@ + } + else + { ++ if (net.minecraftforge.event.ForgeEventFactory.onCreateWorldSpawn(this, p_73052_1_)) return; + this.field_72987_B = true; + WorldChunkManager worldchunkmanager = this.field_73011_w.func_177499_m(); + List list = worldchunkmanager.func_76932_a(); +@@ -855,7 +899,7 @@ protected void func_73047_i() { @@ -183,7 +191,7 @@ for (int i = 0; i < 10; ++i) { -@@ -892,6 +935,7 @@ +@@ -892,6 +936,7 @@ } this.field_73020_y.func_73151_a(p_73044_1_, p_73044_2_); @@ -191,7 +199,7 @@ List list = this.field_73059_b.func_152380_a(); Iterator iterator = list.iterator(); -@@ -929,6 +973,7 @@ +@@ -929,6 +974,7 @@ this.field_72986_A.func_176135_e(this.func_175723_af().func_177732_i()); this.field_73019_z.func_75755_a(this.field_72986_A, this.field_73061_a.func_71203_ab().func_72378_q()); this.field_72988_C.func_75744_a(); @@ -199,7 +207,7 @@ } public void func_72923_a(Entity p_72923_1_) -@@ -984,6 +1029,7 @@ +@@ -984,6 +1030,7 @@ public Explosion func_72885_a(Entity p_72885_1_, double p_72885_2_, double p_72885_4_, double p_72885_6_, float p_72885_8_, boolean p_72885_9_, boolean p_72885_10_) { Explosion explosion = new Explosion(this, p_72885_1_, p_72885_2_, p_72885_4_, p_72885_6_, p_72885_8_, p_72885_9_, p_72885_10_); @@ -207,7 +215,7 @@ explosion.func_77278_a(); explosion.func_77279_a(false); -@@ -1074,19 +1120,23 @@ +@@ -1074,19 +1121,23 @@ this.field_73061_a.func_71203_ab().func_148537_a(new S2BPacketChangeGameState(8, this.field_73017_q), this.field_73011_w.func_177502_q()); } @@ -235,7 +243,7 @@ } } -@@ -1152,6 +1202,11 @@ +@@ -1152,6 +1203,11 @@ return this.field_73061_a.func_152345_ab(); } diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 9bcd37d32..784854f12 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -27,6 +27,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.Explosion; import net.minecraft.world.World; import net.minecraft.world.WorldServer; +import net.minecraft.world.WorldSettings; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.storage.IPlayerFileData; import net.minecraft.world.storage.SaveHandler; @@ -372,4 +373,9 @@ public class ForgeEventFactory */ MinecraftForge.EVENT_BUS.post(new ExplosionEvent.Detonate(world, explosion, list)); } + + public static boolean onCreateWorldSpawn(World world, WorldSettings settings) + { + return MinecraftForge.EVENT_BUS.post(new WorldEvent.CreateSpawnPosition(world, settings)); + } } diff --git a/src/main/java/net/minecraftforge/event/world/WorldEvent.java b/src/main/java/net/minecraftforge/event/world/WorldEvent.java index eaffe5ab6..e5b9beb4d 100644 --- a/src/main/java/net/minecraftforge/event/world/WorldEvent.java +++ b/src/main/java/net/minecraftforge/event/world/WorldEvent.java @@ -2,9 +2,11 @@ package net.minecraftforge.event.world; import java.util.ArrayList; import java.util.List; + import net.minecraft.entity.EnumCreatureType; import net.minecraft.util.BlockPos; import net.minecraft.world.World; +import net.minecraft.world.WorldSettings; import net.minecraft.world.biome.BiomeGenBase.SpawnListEntry; import net.minecraftforge.fml.common.eventhandler.Cancelable; import net.minecraftforge.fml.common.eventhandler.Event; @@ -109,4 +111,19 @@ public class WorldEvent extends Event } } } + + /** + * Called by WorldServer when it attempts to create a spawnpoint for a dimension. + * Canceling the event will prevent the vanilla code from running. + */ + @Cancelable + public static class CreateSpawnPosition extends WorldEvent + { + public final WorldSettings settings; + public CreateSpawnPosition(World world, WorldSettings settings) + { + super(world); + this.settings = settings; + } + } }