Skip to content

Instantly share code, notes, and snippets.

@narrowtux
Created October 22, 2011 13:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save narrowtux/1305979 to your computer and use it in GitHub Desktop.
Save narrowtux/1305979 to your computer and use it in GitHub Desktop.
Preload chunks
package com.narrowtux.longjourney;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.event.vehicle.VehicleListener;
import org.bukkit.event.vehicle.VehicleMoveEvent;
import org.bukkit.util.Vector;
public class LJVehicleListener extends VehicleListener {
@Override
public void onVehicleMove(VehicleMoveEvent event) {
Location to = event.getTo();
Chunk c = to.getBlock().getChunk();
int x = c.getX();
int z = c.getZ();
LongJourney.instance.touch(c);
Vector dir = event.getVehicle().getVelocity();
dir = dir.normalize();
x += Math.round(dir.getX());
z += Math.round(dir.getZ());
LongJourney.instance.touch(to.getWorld().getChunkAt(x, z));
for(int i = -3; i<=3; i++) {
for(int j = -3; j<=3; j++) {
c.getWorld().loadChunk(c.getX() + i, c.getZ() + j);
}
}
}
}
package com.narrowtux.longjourney;
import org.bukkit.event.world.ChunkLoadEvent;
import org.bukkit.event.world.ChunkUnloadEvent;
import org.bukkit.event.world.WorldListener;
public class LJWorldListener extends WorldListener {
public static final int KEEP_TIME = 1 * 60 * 1000;
@Override
public void onChunkUnload(ChunkUnloadEvent event) {
if(LongJourney.instance.isTouched(event.getChunk())) {
event.setCancelled(true);
} else {
LongJourney.instance.lastTouched.remove(event.getChunk());
}
}
}
package com.narrowtux.longjourney;
import java.util.HashMap;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Event.Priority;
import org.bukkit.event.Event.Type;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
public class LongJourney extends JavaPlugin {
public static LongJourney instance;
public HashMap<Integer, Long> lastTouched = new HashMap<Integer, Long>();
private LJVehicleListener vehicleListener = new LJVehicleListener();
private LJWorldListener worldListener = new LJWorldListener();
@Override
public void onDisable() {
}
@Override
public void onEnable() {
instance = this;
PluginManager pm = Bukkit.getPluginManager();
pm.registerEvent(Type.VEHICLE_MOVE, vehicleListener, Priority.Normal, instance);
pm.registerEvent(Type.CHUNK_UNLOAD, worldListener, Priority.Highest, instance);
}
public void touch(Chunk c) {
lastTouched.put(getHash(c), System.currentTimeMillis());
}
public boolean isTouched(Chunk c) {
Long time = lastTouched.get(getHash(c));
if(time != null)
{
return System.currentTimeMillis() - LJWorldListener.KEEP_TIME < time;
}
return false;
}
private Integer getHash(Chunk c) {
return 1001 * c.getX() + c.getZ();
}
@Override
public boolean onCommand(CommandSender sender, Command command,
String label, String[] args) {
if(command.getName().equals("loadchunk")) {
int x = Integer.valueOf(args[0]);
int z = Integer.valueOf(args[1]);
if(sender instanceof Player) {
((Player)sender).getWorld().loadChunk(x, z);
}
}
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment