diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..45a61fa --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +minecart/target/ diff --git a/minecart/pom.xml b/minecart/pom.xml index a5eefc4..8e05a27 100644 --- a/minecart/pom.xml +++ b/minecart/pom.xml @@ -70,7 +70,6 @@ provided - @@ -117,10 +116,6 @@ maven-install-plugin 2.5.2 - - maven-deploy-plugin - 2.8.2 - maven-site-plugin diff --git a/minecart/src/main/java/plugin/minecraft/Main.java b/minecart/src/main/java/plugin/minecraft/Main.java deleted file mode 100644 index 475dc86..0000000 --- a/minecart/src/main/java/plugin/minecraft/Main.java +++ /dev/null @@ -1,25 +0,0 @@ -package plugin.minecraft; - -import org.bukkit.plugin.java.JavaPlugin; - -/** - * Hello world! - * - */ -public class Main extends JavaPlugin { - @Override - public void onEnable() { - getLogger().info("Hello, SpigotMC! sadae"); - - getServer().getPluginManager().registerEvents(new MinecartMove(this), this); - - } - - public void test() { - } - - @Override - public void onDisable() { - getLogger().info("See you again, SpigotMC!"); - } -} diff --git a/minecart/src/main/java/plugin/minecraft/MinecartMove.java b/minecart/src/main/java/plugin/minecraft/MinecartMove.java deleted file mode 100644 index 18a3e86..0000000 --- a/minecart/src/main/java/plugin/minecraft/MinecartMove.java +++ /dev/null @@ -1,92 +0,0 @@ -package plugin.minecraft; - -import org.bukkit.Bukkit; -import org.bukkit.entity.EntityType; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.vehicle.VehicleCreateEvent; -import org.bukkit.event.vehicle.VehicleMoveEvent; -import org.bukkit.event.world.ChunkLoadEvent; -import org.bukkit.plugin.Plugin; -import org.bukkit.util.Vector; - -public class MinecartMove implements Listener { - - private Plugin plugin; - - MinecartMove(Plugin p) { - plugin = p; - } - - @EventHandler - public void onVehicleCreate(VehicleCreateEvent ev) { - ev.getVehicle().setVelocity(new Vector(1.0, 0.0, 0.0)); - - if (ev.getVehicle().getType() == EntityType.MINECART_CHEST) { - Bukkit.getLogger().info(String.format("Minecart %d %s", ev.getVehicle().getChunk().getX(), - ev.getVehicle().getChunk().getX())); - } - } - - @EventHandler - void onVehicleMove(VehicleMoveEvent ev) { - var vehicle = ev.getVehicle(); - if (vehicle.getType() == EntityType.MINECART_CHEST) { - var x = vehicle.getChunk().getX(); - var z = vehicle.getChunk().getZ(); - - var world = vehicle.getWorld(); - - var vel = vehicle.getVelocity(); - - // plugin.getLogger().info(String.format("Current %d %d", x, z)); - - var chunk = vehicle.getChunk(); - if (!chunk.getPluginChunkTickets().contains(plugin)) { - plugin.getLogger().info(String.format("Loading %d %d", x, z)); - chunk.addPluginChunkTicket(plugin); - } - - var last_x = x; - var last_z = z; - var next_x = x; - var next_z = z; - - if (vel.getX() > 0) { - last_x -= 2; - next_x += 1; - } else if (vel.getX() < 0) { - last_x += 2; - next_x -= 1; - } - - if (vel.getZ() > 0) { - last_z -= 2; - next_z += 1; - } else if (vel.getZ() < 0) { - last_z += 2; - next_z -= 1; - } - - if (world.getPluginChunkTickets(next_x, next_z).contains(plugin)) { - plugin.getLogger().info(String.format("Loading %d %d", next_x, next_z)); - world.addPluginChunkTicket(next_x, next_z, plugin); - } - - if (last_x != x || last_z != z) { - if (world.getPluginChunkTickets(last_x, last_z).contains(plugin)) { - plugin.getLogger().info(String.format("Removing Ticket %d %d", last_x, last_z)); - world.removePluginChunkTicket(last_x, last_z, plugin); - - } - } - - } - } - - @EventHandler - public void onChunkLoad(ChunkLoadEvent ev) { - plugin.getLogger().info(String.format("Chunk Loaded %d %d Chunk Count: %d", ev.getChunk().getX(), - ev.getChunk().getZ(), ev.getWorld().getChunkCount())); - } -} diff --git a/minecart/src/main/java/plugin/minecraft/plugin/minecraft/Main.java b/minecart/src/main/java/plugin/minecraft/plugin/minecraft/Main.java new file mode 100644 index 0000000..2694076 --- /dev/null +++ b/minecart/src/main/java/plugin/minecraft/plugin/minecraft/Main.java @@ -0,0 +1,79 @@ +package plugin.minecraft; + + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.Chunk; +import org.bukkit.World; +import org.bukkit.entity.Wolf; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; + +import it.unimi.dsi.fastutil.Pair; + + +/** + * Hello world! + * + */ +public class Main extends JavaPlugin { + + public Map> cardMap = new HashMap<>(); + + @Override + public void onEnable() { + getLogger().info("Hello, SpigotMC! sadae"); + + + //load ChunkMap from File if exist + + if (this.getConfig().isSet("map.to.card")) { + Map loadMap = this.getConfig().getConfigurationSection("map.to.card").getValues(false); + cardMap = LoadChunkMap(loadMap); + } + + getServer().getPluginManager().registerEvents(new MinecartMove(this,this.cardMap), this); + + } + + public void test() { + } + + @Override + public void onDisable() { + getLogger().info("See you again, SpigotMC!"); + + this.getConfig().createSection("map.to.card", SaveChunkMap(cardMap)); + this.saveConfig(); + + } + + + private Map> SaveChunkMap(Map> mp) { + Map> emap = new HashMap<>(); + + for (var iterable_element : mp.entrySet()) { + emap.put(iterable_element.getKey().toString(), iterable_element.getValue()); + } + + return emap; + } + + private Map> LoadChunkMap(Map< String,Object> mp) { + Map> emap = new HashMap<>(); + + for (var iterable_element : mp.entrySet()) { + + String keystring = iterable_element.getKey(); + var wld = new WorldChunk(this, keystring); + + List lInt = (List) iterable_element.getValue(); + emap.put(wld, lInt); + } + + return emap; + } +} diff --git a/minecart/src/main/java/plugin/minecraft/plugin/minecraft/MinecartMove.java b/minecart/src/main/java/plugin/minecraft/plugin/minecraft/MinecartMove.java new file mode 100644 index 0000000..d8096a1 --- /dev/null +++ b/minecart/src/main/java/plugin/minecraft/plugin/minecraft/MinecartMove.java @@ -0,0 +1,170 @@ +package plugin.minecraft; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Minecart; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.vehicle.VehicleCreateEvent; +import org.bukkit.event.vehicle.VehicleDestroyEvent; +import org.bukkit.event.vehicle.VehicleMoveEvent; +import org.bukkit.event.world.ChunkLoadEvent; +import org.bukkit.plugin.Plugin; +import org.bukkit.util.Vector; + +public class MinecartMove implements Listener { + + private Plugin plugin; + private Map> cardMap; + + MinecartMove(Plugin p,Map> m) { + cardMap = m; + plugin = p; + } + + @EventHandler + public void onVehicleCreate(VehicleCreateEvent ev) { + ev.getVehicle().setVelocity(new Vector(1.0, 0.0, 0.0)); + + if (ev.getVehicle().getType() == EntityType.MINECART_CHEST) { + Bukkit.getLogger().info(String.format("Minecart %d %s", ev.getVehicle().getChunk().getX(), + ev.getVehicle().getChunk().getX())); + } + } + + @EventHandler + void onVehicleMove(VehicleMoveEvent ev) { + var vehicle = ev.getVehicle(); + + if (vehicle instanceof Minecart) { + var etId = vehicle.getEntityId(); + var world = vehicle.getWorld(); + var vel = vehicle.getVelocity(); + + var x = vehicle.getChunk().getX(); + var z = vehicle.getChunk().getZ(); + + plugin.getLogger().info(String.format("Minecard %d ist moving at %d %d",etId, x, z)); + + if (vel == new Vector(0,0,0)) { + + DeleteEnitiyFromMapAndEntryIfNullList(etId,world); + + } else { + + //Aktueller Chunk und Zukünftiger Chunk + var chunk = vehicle.getChunk(); + var next_x = x; + var next_z = z; + + if (vel.getX() > 0) { + next_x += 1; + } else if (vel.getX() < 0) { + next_x -= 1; + } + + if (vel.getZ() > 0) { + next_z += 1; + } else if (vel.getZ() < 0) { + next_z -= 1; + } + + setWorldChunk(new WorldChunk(world,chunk,plugin),etId); + + setWorldChunk(new WorldChunk(world,world.getChunkAt(next_x,next_z),plugin),etId); + + } + + } + + } + + @EventHandler + public void onChunkLoad(ChunkLoadEvent ev) { + plugin.getLogger().info(String.format("Chunk Loaded %d %d Chunk Count: %d", ev.getChunk().getX(), + ev.getChunk().getZ(), ev.getWorld().getChunkCount())); + } + + @EventHandler + public void onVehicleRemove(VehicleDestroyEvent ev) { + var vehicle = ev.getVehicle(); + var world = vehicle.getWorld(); + + DeleteEnitiyFromMapAndEntryIfNullList(vehicle.getEntityId(),world); + + } + + private void setWorldChunk(WorldChunk wck,Integer etId) { + + var x = wck.getX(); + var z = wck.getZ(); + + if (!IsWorldChunkInMap(wck)) { //Wenn Chunk noch nicht gesetzt in Map + plugin.getLogger().info(String.format("Loading %d %d", x, z)); + + List newList = new ArrayList(); + newList.add(etId); + cardMap.put(wck, newList); + plugin.getLogger().info(String.format("Add EntityId %d to ChunkMap %d %d",etId, x, z)); + wck.get().addPluginChunkTicket(x, z, plugin); + plugin.getLogger().info(String.format("Add Chunk %d %d to ChunkMap an Ticket", x, z)); + + } else { + //check ob schon EntityId gesetzt + var getsd = cardMap.get(wck); + // Wenn nicht eingetragen in map trage ein und sonst lauf weiter + if(!getsd.contains(etId)) { + getsd.add(etId); + cardMap.put(wck,getsd); + plugin.getLogger().info(String.format("Add EntityId %d to ChunkMap Chunk %d %d",etId, x, z)); + } + + } + + + } + + private boolean IsWorldChunkInMap(WorldChunk ck) { + + for (WorldChunk iterable_element : cardMap.keySet()) { + + if (iterable_element.equals(ck)) { + return true; + } + + } + + return false; + } + + private void DeleteEnitiyFromMapAndEntryIfNullList(Integer etID,World world) { + + var itemiter = cardMap.entrySet().iterator(); + while(itemiter.hasNext()) { + var item = itemiter.next(); + if(item.getValue().contains(etID)) { + var chunk = item.getKey(); + + if(item.getValue().size() > 1) { + var itemList = item.getValue(); + itemList.remove(etID); + item.setValue(itemList); + plugin.getLogger().info(String.format("Minecard %d wurde aus der ChunkMap gelöscht", etID)); + } else { + itemiter.remove(); + world.addPluginChunkTicket(chunk.getX(), chunk.getZ(), plugin); + plugin.getLogger().info(String.format("Chunk %d %d wurde aus der ChunkMap gelöscht", chunk.getX(), chunk.getZ())); + } + + } + + } + + } + +} diff --git a/minecart/src/main/java/plugin/minecraft/plugin/minecraft/WorldChunk.java b/minecart/src/main/java/plugin/minecraft/plugin/minecraft/WorldChunk.java new file mode 100644 index 0000000..0c1ba79 --- /dev/null +++ b/minecart/src/main/java/plugin/minecraft/plugin/minecraft/WorldChunk.java @@ -0,0 +1,47 @@ +package plugin.minecraft; + +import org.bukkit.Chunk; +import org.bukkit.World; +import org.bukkit.plugin.Plugin; + +public class WorldChunk { + + Plugin p; + World world; + Chunk ck; + + public Integer getX() { + return ck.getX(); + } + + public Integer getZ() { + return ck.getZ(); + } + + public World get() { + return world; + } + + WorldChunk(World pworld,Chunk pck,Plugin pp) { + p = pp; + world = pworld; + ck = pck; + + } + + WorldChunk(Plugin pp, String pInput) { + p = pp; + String[] sp = pInput.split(":"); + world = p.getServer().getWorld(sp[0]); + ck = world.getChunkAt(Integer.parseInt(sp[1]), Integer.parseInt(sp[2])); + } + + @Override + public String toString() { + + String st = ""; + st = world.getName() + ":" + ck.getX() + ":" + ck.getZ(); + return st; + } + +}