diff --git a/build.gradle b/build.gradle index e544320..b85a60d 100644 --- a/build.gradle +++ b/build.gradle @@ -26,13 +26,13 @@ buildscript apply plugin: 'net.minecraftforge.gradle.forge' // Gradle project metadata -version = "1.12.2-1.0.5" +version = "1.12.2-1.0.7" group = "com.wimbli.WorldBorder" minecraft { // Forge version - version = "1.12.2-14.23.1.2561" + version = "1.12.2-14.23.1.2555" runDir = "debug" mappings = "snapshot_20171003" diff --git a/src/main/java/com/wimbli/WorldBorder/WBCommand.java b/src/main/java/com/wimbli/WorldBorder/WBCommand.java index aa8f2cf..52c63d7 100644 --- a/src/main/java/com/wimbli/WorldBorder/WBCommand.java +++ b/src/main/java/com/wimbli/WorldBorder/WBCommand.java @@ -15,14 +15,14 @@ import net.minecraft.server.management.UserListOpsEntry; import net.minecraft.util.math.BlockPos; -import javax.annotation.Nonnull; +//import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.*; public class WBCommand implements ICommand { static final String NAME = "wborder"; - static final List ALIASES = Arrays.asList(NAME, "wb", "worldborder"); + static final List ALIASES = Arrays.asList("wb", "worldborder"); // map of all sub-commands with the command name (string) for quick reference public Map subCommands = new LinkedHashMap<>(); @@ -40,11 +40,10 @@ public static void checkRegistrations(MinecraftServer server) List valid = new ArrayList<>( ALIASES.size() ); List conflict = new ArrayList<>( ALIASES.size() ); - Map commands = server.getCommandManager().getCommands(); + Map commands = server.getCommandManager().getCommands(); - for (Object o : ALIASES) + for (String name : ALIASES) { - String name = (String) o; Object value = commands.get(name); if (value == null) @@ -213,7 +212,7 @@ public String getUsage(ICommandSender sender) } @Override - public List getAliases() + public List getAliases() { return ALIASES; } diff --git a/src/main/java/com/wimbli/WorldBorder/forge/Particles.java b/src/main/java/com/wimbli/WorldBorder/forge/Particles.java index 2a3ea02..f3c9f08 100644 --- a/src/main/java/com/wimbli/WorldBorder/forge/Particles.java +++ b/src/main/java/com/wimbli/WorldBorder/forge/Particles.java @@ -1,6 +1,5 @@ package com.wimbli.WorldBorder.forge; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.SoundEvents; import net.minecraft.network.play.server.SPacketParticles; diff --git a/src/main/java/com/wimbli/WorldBorder/task/BorderCheckTask.java b/src/main/java/com/wimbli/WorldBorder/task/BorderCheckTask.java index b668909..e861116 100644 --- a/src/main/java/com/wimbli/WorldBorder/task/BorderCheckTask.java +++ b/src/main/java/com/wimbli/WorldBorder/task/BorderCheckTask.java @@ -4,7 +4,8 @@ import com.wimbli.WorldBorder.Config; import com.wimbli.WorldBorder.WorldBorder; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.common.MinecraftForge; +//import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; @@ -26,9 +27,9 @@ public boolean isRunning() public void setRunning(boolean state) { if (state) - FMLCommonHandler.instance().bus().register(this); + MinecraftForge.EVENT_BUS.register(this); else - FMLCommonHandler.instance().bus().unregister(this); + MinecraftForge.EVENT_BUS.unregister(this); running = state; } diff --git a/src/main/java/com/wimbli/WorldBorder/task/ChunkUtil.java b/src/main/java/com/wimbli/WorldBorder/task/ChunkUtil.java index 5966f7e..e5643d2 100644 --- a/src/main/java/com/wimbli/WorldBorder/task/ChunkUtil.java +++ b/src/main/java/com/wimbli/WorldBorder/task/ChunkUtil.java @@ -1,8 +1,8 @@ package com.wimbli.WorldBorder.task; +import com.wimbli.WorldBorder.forge.Log; + import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.world.World; import net.minecraft.world.WorldServer; public class ChunkUtil { @@ -15,13 +15,12 @@ public static void unloadChunksIfNotNearSpawn(WorldServer world, int par1, int p int var4 = par1 * 16 + 8 - var3.getX(); int var5 = par2 * 16 + 8 - var3.getZ(); short var6 = 128; - if(var4 < -var6 || var4 > var6 || var5 < -var6 || var5 > var6) + if(!(var4 < -var6 || var4 > var6 || var5 < -var6 || var5 > var6)) { - world.getChunkProvider().droppedChunksSet.add(Long.valueOf(ChunkPos.asLong(par1, par2))); + Log.warn("Couldn't unload chunk from location (X: " + par1 + ", Z: " + par2 + ")"); + return; } - } else - { - world.getChunkProvider().droppedChunksSet.add(Long.valueOf(ChunkPos.asLong(par1, par2))); } + world.getChunkProvider().queueUnload(world.getChunkFromChunkCoords(par1, par2)); } } diff --git a/src/main/java/com/wimbli/WorldBorder/task/WorldFillTask.java b/src/main/java/com/wimbli/WorldBorder/task/WorldFillTask.java index 6eb638f..8601ba1 100644 --- a/src/main/java/com/wimbli/WorldBorder/task/WorldFillTask.java +++ b/src/main/java/com/wimbli/WorldBorder/task/WorldFillTask.java @@ -9,7 +9,7 @@ import net.minecraft.world.WorldServer; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.gen.ChunkProviderServer; -import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; @@ -153,7 +153,8 @@ public void start() if (INSTANCE != this) throw new IllegalStateException("Cannot start a stopped task"); - FMLCommonHandler.instance().bus().register(this); + //FMLCommonHandler.instance().bus().register(this); + MinecraftForge.EVENT_BUS.register(this); } /** Starts this task by resuming from prior progress */ @@ -173,7 +174,8 @@ public void stop() if (INSTANCE != this) throw new IllegalStateException("Task has already been stopped"); else - FMLCommonHandler.instance().bus().unregister(this); + MinecraftForge.EVENT_BUS.unregister(this); + // Unload chunks that are still loaded while( !storedChunks.isEmpty() ) @@ -307,9 +309,9 @@ public void onServerTick(TickEvent.ServerTickEvent event) long now = Util.now(); // every 5 seconds or so, give basic progress report to let user know how it's going - if (now > lastReport + 5000) + if (now > lastReport + 5000){ reportProgress(); - + } // if this iteration has been running for 45ms (almost 1 tick) or more, stop to take a breather if (now > loopStartTime + 45) { @@ -334,7 +336,7 @@ public void onServerTick(TickEvent.ServerTickEvent event) } // load the target chunk and generate it if necessary - provider.loadChunk(x, z); + generateChunk(provider, x, z); worldData.chunkExistsNow(x, z); // There need to be enough nearby chunks loaded to make the server populate a chunk with trees, snow, etc. @@ -343,28 +345,39 @@ public void onServerTick(TickEvent.ServerTickEvent event) int popZ = isZLeg ? z : (z + (!isNeg ? -1 : 1)); // RoyCurtis: this originally specified "false" for chunk generation; things // may break now that it is true - provider.loadChunk(popX, popZ); + generateChunk(provider, popX, popZ); // make sure the previous chunk in our spiral is loaded as well (might have already existed and been skipped over) if (!storedChunks.contains(lastChunk) && !originalChunks.contains(lastChunk)) { - provider.loadChunk(lastChunk.x, lastChunk.z); + generateChunk(provider, lastChunk.x, lastChunk.z); storedChunks.add(new CoordXZ(lastChunk.x, lastChunk.z)); } // Store the coordinates of these latest 2 chunks we just loaded, so we can unload them after a bit... storedChunks.add(new CoordXZ(popX, popZ)); storedChunks.add(new CoordXZ(x, z)); + + // force populate if the chunk is still unpopulated + if(provider.getLoadedChunk(x, z) != null && !provider.getLoadedChunk(x, z).isPopulated()) + try{ + provider.chunkGenerator.populate(x, z); + } catch(Exception e) { + Log.error("Error while populating chunk!"); + e.printStackTrace(); + } // If enough stored chunks are buffered in, go ahead and unload the oldest to free up memory - while (storedChunks.size() > 8) + while (storedChunks.size() > 16) { CoordXZ coord = storedChunks.remove(0); if (!originalChunks.contains(coord)) ChunkUtil.unloadChunksIfNotNearSpawn(world, coord.x, coord.z); } - + + DynMapFeatures.renderRegion(world, new CoordXZ(x, z)); + // move on to next chunk if (!moveToNext()) return; @@ -373,6 +386,17 @@ public void onServerTick(TickEvent.ServerTickEvent event) // ready for the next iteration to run readyToGo = true; } + + private static boolean generateChunk(ChunkProviderServer chunkProvider, int x, int z) { + if (chunkProvider.chunkExists(x, z)) { + return false; + } + chunkProvider.saveChunks(true); + chunkProvider.provideChunk(x, z); + chunkProvider.loadChunk(x, z); + + return true; + } // step through chunks in spiral pattern from center; returns false if we're done, otherwise returns true public boolean moveToNext() diff --git a/src/main/java/com/wimbli/WorldBorder/task/WorldTrimTask.java b/src/main/java/com/wimbli/WorldBorder/task/WorldTrimTask.java index 9022b59..1a8103c 100644 --- a/src/main/java/com/wimbli/WorldBorder/task/WorldTrimTask.java +++ b/src/main/java/com/wimbli/WorldBorder/task/WorldTrimTask.java @@ -6,10 +6,8 @@ import com.wimbli.WorldBorder.forge.Worlds; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.ChunkPos; import net.minecraft.world.WorldServer; -import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; @@ -90,7 +88,8 @@ public void start() if (INSTANCE != this) throw new IllegalStateException("Cannot start a stopped task"); - FMLCommonHandler.instance().bus().register(this); + //FMLCommonHandler.instance().bus().register(this); + MinecraftForge.EVENT_BUS.register(this); } /** Stops this task by unregistering the tick handler and removing the instance */ @@ -99,7 +98,7 @@ public void stop() if (INSTANCE != this) throw new IllegalStateException("Task has already been stopped"); else - FMLCommonHandler.instance().bus().unregister(this); + MinecraftForge.EVENT_BUS.unregister(this); regionChunks.clear(); trimChunks.clear(); diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index b988b59..53ea877 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -7,7 +7,7 @@ "mcversion": "${mcversion}", "url": "", "updateUrl": "", - "authorList": ["Brettflan", "RoyCurtis", "abused_master"], + "authorList": ["Brettflan", "RoyCurtis", "abused_master", "LizNet"], "credits": "", "logoFile": "", "screenshots": [],