diff --git a/src/main/java/net/theprogrammersworld/herobrine/AI/cores/Graveyard.java b/src/main/java/net/theprogrammersworld/herobrine/AI/cores/Graveyard.java index e6667d4..0d55084 100644 --- a/src/main/java/net/theprogrammersworld/herobrine/AI/cores/Graveyard.java +++ b/src/main/java/net/theprogrammersworld/herobrine/AI/cores/Graveyard.java @@ -66,7 +66,7 @@ public class Graveyard extends Core { cachePreGraveyardPositionToDisk(loc, player); loc.setWorld(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName)); loc.setX(-2.49); - loc.setY(4); + loc.setY(Herobrine.getPluginCore().getConfigDB().graveyardYCoord); loc.setZ(10.69); loc.setYaw(-179.85f); loc.setPitch(0.44999f); @@ -88,7 +88,8 @@ public class Graveyard extends Core { public void Start() { ticks = 0; - PluginCore.HerobrineNPC.moveTo(new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49, 4, -4.12)); + PluginCore.HerobrineNPC.moveTo(new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), + -2.49, Herobrine.getPluginCore().getConfigDB().graveyardYCoord, -4.12)); HandlerInterval(); } @@ -138,17 +139,21 @@ public class Graveyard extends Core { PluginCore.HerobrineNPC.lookAtPoint(ploc); if (ticks == 1) { PluginCore.HerobrineNPC.moveTo( - new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49, 4, -4.12)); + new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49, + Herobrine.getPluginCore().getConfigDB().graveyardYCoord, -4.12)); } else if (ticks == 40) { PluginCore.HerobrineNPC.moveTo( - new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49, 4, -0.5)); + new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49, + Herobrine.getPluginCore().getConfigDB().graveyardYCoord, -0.5)); } else if (ticks == 60) { PluginCore.HerobrineNPC.moveTo( - new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49, 4, 5.1)); + new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49, + Herobrine.getPluginCore().getConfigDB().graveyardYCoord, 5.1)); } else if (ticks == 84) { PluginCore.HerobrineNPC.moveTo( - new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49, 4, 7.5)); + new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49, + Herobrine.getPluginCore().getConfigDB().graveyardYCoord, 7.5)); } diff --git a/src/main/java/net/theprogrammersworld/herobrine/AI/extensions/GraveyardWorld.java b/src/main/java/net/theprogrammersworld/herobrine/AI/extensions/GraveyardWorld.java index a48bd5a..1e42bd0 100644 --- a/src/main/java/net/theprogrammersworld/herobrine/AI/extensions/GraveyardWorld.java +++ b/src/main/java/net/theprogrammersworld/herobrine/AI/extensions/GraveyardWorld.java @@ -11,18 +11,18 @@ public class GraveyardWorld { public static void Create() { - Location loc = new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), 0, 3, 0); + Location loc = new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), 0, -61, 0); for (int x = -50; x <= 50; x++) { for (int z = -50; z <= 50; z++) { - loc.getWorld().getBlockAt(x, 3, z).setType(Material.MYCELIUM); + loc.getWorld().getBlockAt(x, -61, z).setType(Material.MYCELIUM); } } int MainX = -10; - int MainY = 3; + int MainY = -61; int MainZ = -10; StructureLoader structLoader = new StructureLoader(Herobrine.getPluginCore().getInputStreamData("/res/graveyard_world.yml")); diff --git a/src/main/java/net/theprogrammersworld/herobrine/ConfigDB.java b/src/main/java/net/theprogrammersworld/herobrine/ConfigDB.java index 8d17d0c..c2f1075 100644 --- a/src/main/java/net/theprogrammersworld/herobrine/ConfigDB.java +++ b/src/main/java/net/theprogrammersworld/herobrine/ConfigDB.java @@ -89,6 +89,15 @@ public class ConfigDB { public boolean newVersionFound = false; + /* Starting with Minecraft 1.18, the Y coordinate used for the flat world generated for Herobrine's Graveyard is -61 instead of 3. + * This elevation change required graveyard generation as well as Herobrine and player location management to be shifted down to + * accommodate it. This change is only applied to graveyard worlds generated on 1.18 or newer, however, and would cause graveyards + * generated on older versions to not show Herobrine or the player in the right place. To work around this, we now use the + * "graveyardYCoord" variable to indicate the Y coordinate that should be used for Herobrine and the player when in the graveyard + * world. The default stored value is the one used for graveyard generated on 1.18 or newer. A conditional check will be used + * to change this value to 4 as part of the server launch process if doing so is appropriate. */ + public double graveyardYCoord = -60; + private boolean isStartupDone = false; final public String pluginVersionString = Bukkit.getServer().getPluginManager().getPlugin("Herobrine") diff --git a/src/main/java/net/theprogrammersworld/herobrine/Herobrine.java b/src/main/java/net/theprogrammersworld/herobrine/Herobrine.java index 31115bd..c0b6598 100644 --- a/src/main/java/net/theprogrammersworld/herobrine/Herobrine.java +++ b/src/main/java/net/theprogrammersworld/herobrine/Herobrine.java @@ -145,6 +145,16 @@ public class Herobrine extends JavaPlugin implements Listener { wc.createWorld(); GraveyardWorld.Create(); + + /* Starting with Minecraft 1.18, the Y coordinate used for the flat world generated for Herobrine's Graveyard is -61 instead of 3. + * This elevation change required graveyard generation as well as Herobrine and player location management to be shifted down to + * accommodate it. This change is only applied to graveyard worlds generated on 1.18 or newer, however, and would cause graveyards + * generated on older versions to not show Herobrine or the player in the right place. To work around this, we use this conditional + * to set a "graveyardYCoord" configuration variable. By default, the value is set for a graveyard generated by 1.18 or newer. This + * conditional will check the position of the graveyard to determine if the value should be set for a pre-1.18 graveyard. */ + if (Bukkit.getServer().getWorld(configdb.HerobrineWorldName).getBlockAt(0, 3, 0).getType() == Material.MYCELIUM) { + configdb.graveyardYCoord = 4; + } } // Spawn Herobrine diff --git a/src/main/java/net/theprogrammersworld/herobrine/listeners/PlayerListener.java b/src/main/java/net/theprogrammersworld/herobrine/listeners/PlayerListener.java index bfa9772..595e21d 100644 --- a/src/main/java/net/theprogrammersworld/herobrine/listeners/PlayerListener.java +++ b/src/main/java/net/theprogrammersworld/herobrine/listeners/PlayerListener.java @@ -302,8 +302,8 @@ public class PlayerListener implements Listener { if (event.getPlayer().getEntityId() != PluginCore.HerobrineEntityID) { if (event.getPlayer().getWorld() == Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName)) { Player player = (Player) event.getPlayer(); - player.teleport(new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49f, 4.f, - 10.69f, -179.85f, 0.44999f)); + player.teleport(new Location(Bukkit.getServer().getWorld(Herobrine.getPluginCore().getConfigDB().HerobrineWorldName), -2.49f, + Herobrine.getPluginCore().getConfigDB().graveyardYCoord, 10.69f, -179.85f, 0.44999f)); } }