From 2dc6a0e0c58192926592c76b794b6f5aadc8d70f Mon Sep 17 00:00:00 2001
From: Leopold von Grabe <-->
Date: Thu, 24 Mar 2022 00:19:58 +0100
Subject: [PATCH] pl
---
.gitignore | 1 +
minecart/pom.xml | 5 -
.../src/main/java/plugin/minecraft/Main.java | 25 ---
.../java/plugin/minecraft/MinecartMove.java | 92 ----------
.../minecraft/plugin/minecraft/Main.java | 79 ++++++++
.../plugin/minecraft/MinecartMove.java | 170 ++++++++++++++++++
.../plugin/minecraft/WorldChunk.java | 47 +++++
7 files changed, 297 insertions(+), 122 deletions(-)
create mode 100644 .gitignore
delete mode 100644 minecart/src/main/java/plugin/minecraft/Main.java
delete mode 100644 minecart/src/main/java/plugin/minecraft/MinecartMove.java
create mode 100644 minecart/src/main/java/plugin/minecraft/plugin/minecraft/Main.java
create mode 100644 minecart/src/main/java/plugin/minecraft/plugin/minecraft/MinecartMove.java
create mode 100644 minecart/src/main/java/plugin/minecraft/plugin/minecraft/WorldChunk.java
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;
+ }
+
+}