From a9620bf1c998e731eb55aba41430579076ec188e Mon Sep 17 00:00:00 2001 From: SeanOMik Date: Tue, 21 Jan 2020 22:32:37 -0600 Subject: [PATCH] Attempt to find a way to spawn the foxes from the saves. Saving the data works great, I just need to find a way to spawn the fox in the world. --- .idea/workspace.xml | 86 ++++----- pom.xml | 2 +- .../tamablefoxes/EntityTamableFox.java | 2 +- .../seanomik/tamablefoxes/TamableFoxes.java | 173 +++++++----------- .../command/CommandSpawnTamableFox.java | 4 +- .../sqlite/SQLiteSetterGetter.java | 66 ++++++- src/main/resources/plugin.yml | 1 + target/classes/plugin.yml | 1 + .../compile/default-compile/inputFiles.lst | 42 ++--- 9 files changed, 181 insertions(+), 196 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 28c1e46..ebd3211 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,30 +2,15 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + - - + - + @@ -163,38 +148,38 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -203,20 +188,13 @@ - + - - - - - - - file://$PROJECT_DIR$/src/main/java/net/seanomik/tamablefoxes/TamableFoxes.java - 440 - - - + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0309366..9ffea7c 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ shade - D:\Code\java\spigotPlugins\TEST_SERVER\plugins\${project.artifactId}-${project.version}.jar + D:\Code\java\spigotPlugins\_TEST_SERVER_\plugins\${project.artifactId}-${project.version}.jar false diff --git a/src/main/java/net/seanomik/tamablefoxes/EntityTamableFox.java b/src/main/java/net/seanomik/tamablefoxes/EntityTamableFox.java index 636c00c..bc3e235 100644 --- a/src/main/java/net/seanomik/tamablefoxes/EntityTamableFox.java +++ b/src/main/java/net/seanomik/tamablefoxes/EntityTamableFox.java @@ -41,7 +41,7 @@ public class EntityTamableFox extends EntityFox { plugin.getFoxUUIDs().put(this.getBukkitEntity().getUniqueId(), null); } - this.setPersistent(); + this.persistent = false; } @Override diff --git a/src/main/java/net/seanomik/tamablefoxes/TamableFoxes.java b/src/main/java/net/seanomik/tamablefoxes/TamableFoxes.java index 669eaaf..eb91508 100644 --- a/src/main/java/net/seanomik/tamablefoxes/TamableFoxes.java +++ b/src/main/java/net/seanomik/tamablefoxes/TamableFoxes.java @@ -9,15 +9,11 @@ import net.minecraft.server.v1_15_R1.*; import net.seanomik.tamablefoxes.sqlite.SQLiteHandler; import net.seanomik.tamablefoxes.sqlite.SQLiteSetterGetter; import net.wesjd.anvilgui.AnvilGUI; -import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.Particle; -import org.bukkit.World; import org.bukkit.*; -import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftFox; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; import org.bukkit.entity.Entity; @@ -27,20 +23,16 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.player.*; import org.bukkit.event.world.ChunkLoadEvent; +import org.bukkit.event.world.ChunkUnloadEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; // @TODO: Add language.yml @@ -48,15 +40,14 @@ import java.util.stream.Collectors; public class TamableFoxes extends JavaPlugin implements Listener { public static final String ITEM_INSPECTOR_LORE = ChatColor.BLUE + "Tamable Fox Inspector"; - public static final String TAG_TAME_FOX = "tameablefox"; + public static final String FOX_REGISTER_NAME = "tameablefox"; private FileManager fileManager = new FileManager(this); private Map foxUUIDs = Maps.newHashMap(); // FoxUUID, OwnerUUID private EntityTypes customType; - private boolean isOnLoad = true; private Map lookupCache = Maps.newHashMap(); - private List spawnedFoxes; + private List spawnedFoxes = new ArrayList<>(); private FileManager.Config config;//, configFoxes; public static SQLiteHandler sqLiteHandler = new SQLiteHandler(); public static SQLiteSetterGetter sqLiteSetterGetter = new SQLiteSetterGetter(); @@ -82,11 +73,11 @@ public class TamableFoxes extends JavaPlugin implements Listener { final Map> types = (Map>) DataConverterRegistry.a() .getSchema(DataFixUtils.makeKey(SharedConstants.getGameVersion().getWorldVersion())) .findChoiceType(DataConverterTypes.ENTITY).types(); - types.put("minecraft:" + TAG_TAME_FOX, types.get("minecraft:fox")); + types.put("minecraft:" + FOX_REGISTER_NAME, types.get("minecraft:fox")); EntityTypes.a a = EntityTypes.a.a((entityTypes, world) -> new EntityTamableFox(this, entityTypes, world), EnumCreatureType.AMBIENT); - customType = IRegistry.a(IRegistry.ENTITY_TYPE, "tameablefox", a.a("tameablefox")); + customType = IRegistry.a(IRegistry.ENTITY_TYPE, FOX_REGISTER_NAME, a.a(FOX_REGISTER_NAME)); this.replaceFoxesOnLoad(); } @@ -97,7 +88,9 @@ public class TamableFoxes extends JavaPlugin implements Listener { for (EntityTamableFox fox : spawnedFoxes) { sqLiteSetterGetter.saveFox(fox); - fox.getBukkitEntity().remove(); + Location loc = new Location(fox.getWorld().getWorld(), fox.locX(), fox.locY(), fox.locZ()); + loc.getChunk().load(); + fox.die(); } getServer().getConsoleSender().sendMessage(getPrefix() + ChatColor.GREEN + "Saved all foxes successfully!"); @@ -106,99 +99,6 @@ public class TamableFoxes extends JavaPlugin implements Listener { } } - private void replaceFoxesOnLoad() { - /*int amountReplaced = 0; - - for (World world : Bukkit.getWorlds()) { - Chunk[] loadedChunks = world.getLoadedChunks(); - for (Chunk chunk : loadedChunks) { - Entity[] entities = chunk.getEntities(); - for (Entity entity : entities) { - if (!(entity instanceof Fox)) - continue; - if (this.isTamableFox(entity)) - continue; - EntityTamableFox tamableFox = (EntityTamableFox) spawnTamableFox(entity.getLocation(), ((CraftFox) entity).getHandle().getFoxType()); - - //final YamlConfiguration configuration = configFoxes.get(); - // get living entity data - if (configuration.isConfigurationSection("Foxes." + entity.getUniqueId())) { - String owner = configuration.getString("Foxes." + entity.getUniqueId() + ".owner"); - - // make new data - if (owner.equals("none")) { - foxUUIDs.replace(tamableFox.getUniqueID(), null); - configuration.set("Foxes." + tamableFox.getUniqueID() + ".owner", "none"); - } else { - foxUUIDs.replace(tamableFox.getUniqueID(), UUID.fromString(owner)); - tamableFox.setTamed(true); - configuration.set("Foxes." + tamableFox.getUniqueID() + ".owner", owner); - } - - // set name - if (configuration.isSet("Foxes." + entity.getUniqueId() + ".name")) { - final String name = configuration.getString("Foxes." + entity.getUniqueId() + ".name"); - configuration.set("Foxes." + tamableFox.getUniqueID() + ".name", name); - tamableFox.setChosenName(name); - } - - // delete old data - configuration.set("Foxes." + entity.getUniqueId(), null); - - tamableFox.setSitting(((EntityFox) ((CraftEntity) entity).getHandle()).isSitting()); - tamableFox.updateFox(); - tamableFox.setAge(((CraftFox) entity).getAge()); - ItemStack entityMouthItem = ((CraftFox) entity).getEquipment().getItemInMainHand(); - entityMouthItem.setAmount(1); - - if (entityMouthItem.getType() != Material.AIR) { - tamableFox.setSlot(EnumItemSlot.MAINHAND, CraftItemStack.asNMSCopy(entityMouthItem)); - } else { - tamableFox.setSlot(EnumItemSlot.MAINHAND, new net.minecraft.server.v1_15_R1.ItemStack(Items.AIR)); - } - - } else { - configuration.set("Foxes." + tamableFox.getUniqueID() + ".owner", "none"); - - tamableFox.setAge(((CraftFox) entity).getAge()); - ItemStack entityMouthItem = ((CraftFox) entity).getEquipment().getItemInMainHand(); - entityMouthItem.setAmount(1); - - if (entityMouthItem.getType() != Material.AIR) { - tamableFox.setSlot(EnumItemSlot.MAINHAND, CraftItemStack.asNMSCopy(entityMouthItem)); - } else { - tamableFox.setSlot(EnumItemSlot.MAINHAND, new net.minecraft.server.v1_15_R1.ItemStack(Items.AIR)); - } - } - - entity.remove(); - ++amountReplaced; - } - } - } - - configFoxes.save();*/ - - spawnedFoxes = sqLiteSetterGetter.spawnFoxes(); - this.isOnLoad = false; - } - - public net.minecraft.server.v1_15_R1.Entity spawnTamableFox(Location location, net.minecraft.server.v1_15_R1.EntityFox.Type type) { - WorldServer world = ((CraftWorld) location.getWorld()).getHandle(); - EntityTamableFox spawnedFox = (EntityTamableFox) customType.b(world, null, null, null, - new BlockPosition(location.getX(), location.getY(), location.getZ()), null, false, false); - - if (!world.addEntity(spawnedFox)) { // Throw a error if the fox failed to spawn - throw new RuntimeException("Failed to spawn fox!"); - } - - spawnedFox.setFoxType(type); - - sqLiteSetterGetter.saveFox((EntityTamableFox) spawnedFox); - - return spawnedFox; - } - private class SaveFoxRunnable extends BukkitRunnable { private final TamableFoxes plugin; @@ -217,6 +117,58 @@ public class TamableFoxes extends JavaPlugin implements Listener { } } + private void replaceFoxesOnLoad() { + //spawnedFoxes = sqLiteSetterGetter.spawnFoxes(); + } + + public net.minecraft.server.v1_15_R1.Entity spawnTamableFox(Location location, net.minecraft.server.v1_15_R1.EntityFox.Type type) { + if (location.getChunk() != null) { + location.getChunk().load(); + } + + WorldServer world = ((CraftWorld) location.getWorld()).getHandle(); + EntityTamableFox spawnedFox = (EntityTamableFox) customType.b(world, null, null, null, + new BlockPosition(location.getX(), location.getY(), location.getZ()), null, false, false); + + if (!world.addEntity(spawnedFox)) { // Show an error if the fox failed to spawn + getServer().getConsoleSender().sendMessage(getPrefix() + ChatColor.RED + "Failed to spawn fox!"); + } + + spawnedFox.setFoxType(type); + + return spawnedFox; + } + + @EventHandler + public void onChunkLoad(ChunkLoadEvent event) { + if (event.isNewChunk()) return; + + // Remove vanilla foxes + for (Entity entity : event.getChunk().getEntities()) { + if (entity instanceof Fox && !this.isTamableFox(entity)) { + entity.remove(); + } + } + + // Spawn saved foxes + List newFoxes = sqLiteSetterGetter.spawnFoxesInChunk(event.getChunk()); + if (newFoxes != null && newFoxes.size() != 0) { + spawnedFoxes.addAll(newFoxes); + } + } + + @EventHandler + public void onChunkUnload(ChunkUnloadEvent event) { + for (Entity entity : event.getChunk().getEntities()) { + if (isTamableFox(entity)) { + EntityTamableFox tamableFox = (EntityTamableFox) ((CraftEntity) entity).getHandle(); + + sqLiteSetterGetter.saveFox(tamableFox); + tamableFox.die(); + } + } + } + @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); @@ -234,8 +186,7 @@ public class TamableFoxes extends JavaPlugin implements Listener { Entity entity = event.getRightClicked(); Player player = event.getPlayer(); - if (event.getHand() != EquipmentSlot.HAND) - return; + if (event.getHand() != EquipmentSlot.HAND) return; final ItemStack playerHand = player.getInventory().getItemInMainHand(); ItemMeta itemMeta = playerHand.getItemMeta(); diff --git a/src/main/java/net/seanomik/tamablefoxes/command/CommandSpawnTamableFox.java b/src/main/java/net/seanomik/tamablefoxes/command/CommandSpawnTamableFox.java index 69271e4..85aa598 100644 --- a/src/main/java/net/seanomik/tamablefoxes/command/CommandSpawnTamableFox.java +++ b/src/main/java/net/seanomik/tamablefoxes/command/CommandSpawnTamableFox.java @@ -42,7 +42,7 @@ public class CommandSpawnTamableFox implements TabExecutor { switch (args[0]) { case "red": try { - EntityTamableFox fox = (EntityTamableFox) plugin.spawnTamableFox(player.getLocation(), EntityFox.Type.RED); + EntityTamableFox fox = (EntityTamableFox) plugin.spawnTamableFox(player.getLocation().add(0, 1, 0), EntityFox.Type.RED); plugin.getSpawnedFoxes().add(fox); plugin.sqLiteSetterGetter.saveFox(fox); @@ -53,7 +53,7 @@ public class CommandSpawnTamableFox implements TabExecutor { break; case "snow": try { - EntityTamableFox spawnedFox = (EntityTamableFox) plugin.spawnTamableFox(player.getLocation(), EntityFox.Type.SNOW); + EntityTamableFox spawnedFox = (EntityTamableFox) plugin.spawnTamableFox(player.getLocation().add(0, 1, 0), EntityFox.Type.SNOW); plugin.getSpawnedFoxes().add(spawnedFox); plugin.sqLiteSetterGetter.saveFox(spawnedFox); diff --git a/src/main/java/net/seanomik/tamablefoxes/sqlite/SQLiteSetterGetter.java b/src/main/java/net/seanomik/tamablefoxes/sqlite/SQLiteSetterGetter.java index d50ba83..ca2650e 100644 --- a/src/main/java/net/seanomik/tamablefoxes/sqlite/SQLiteSetterGetter.java +++ b/src/main/java/net/seanomik/tamablefoxes/sqlite/SQLiteSetterGetter.java @@ -5,10 +5,7 @@ import net.minecraft.server.v1_15_R1.EnumItemSlot; import net.seanomik.tamablefoxes.EntityTamableFox; import net.seanomik.tamablefoxes.TamableFoxes; import org.apache.commons.lang.ObjectUtils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; +import org.bukkit.*; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; import org.bukkit.inventory.ItemStack; @@ -37,7 +34,7 @@ public class SQLiteSetterGetter { "`TYPE` TEXT NOT NULL , " + "`SITTING` INTEGER NOT NULL , " + "`SLEEPING` INTEGER NOT NULL , " + - "`MOUTH_ITEM` TEXT NOT NULL);"; + "`MOUTH_ITEM` TEXT NOT NULL);"; // @TODO: Add a age field try { sqLiteHandler.connect(); @@ -99,7 +96,7 @@ public class SQLiteSetterGetter { } } - public void saveFoxes(List foxes) { // @TODO: Optimize + public void saveFoxes(List foxes) { // @TODO: Optimize? for (EntityTamableFox fox : foxes) { saveFox(fox); } @@ -155,6 +152,63 @@ public class SQLiteSetterGetter { return null; } + public List spawnFoxesInChunk(Chunk chunk) { + plugin = TamableFoxes.getPlugin(TamableFoxes.class); + try { + sqLiteHandler.connect(); + PreparedStatement statement = sqLiteHandler.getConnection().prepareStatement("SELECT * FROM foxes"); + ResultSet results = statement.executeQuery(); + + List foxList = new ArrayList<>(); + while (results.next()) { // Loop through each row + List locationList = Arrays.asList(results.getString("LOCATION").split("\\s*,\\s*")); + Location loc = new Location(Bukkit.getWorld(locationList.get(0)), Double.parseDouble(locationList.get(1)), Double.parseDouble(locationList.get(2)), Double.parseDouble(locationList.get(3))); + + // Checks if the location is in a chunk. + if (chunk.getX() == ((double) loc.getBlockX() / 16 && chunk.getZ() == loc.getBlockZ() / 16) { + plugin.getServer().getConsoleSender().sendMessage("SPAWN IN CHUNK"); + + EntityTamableFox spawnedFox = (EntityTamableFox) plugin.spawnTamableFox(loc, EntityFox.Type.valueOf(results.getString("TYPE"))); + spawnedFox.databaseID = results.getInt("ID"); + spawnedFox.setSlot(EnumItemSlot.MAINHAND, CraftItemStack.asNMSCopy(new ItemStack(Material.valueOf(results.getString("MOUTH_ITEM")), 1))); + + spawnedFox.setSitting(results.getInt("SITTING") == 1); + spawnedFox.setSleeping(results.getInt("SLEEPING") == 1); + + if (!results.getString("OWNER_UUID").equals("none")) { + UUID ownerUUID = UUID.fromString(results.getString("OWNER_UUID")); + + OfflinePlayer owner = plugin.getServer().getOfflinePlayer(ownerUUID); + if (owner.isOnline()) { + spawnedFox.setOwner(((CraftPlayer) owner.getPlayer()).getHandle()); + } + + plugin.getFoxUUIDs().put(spawnedFox.getUniqueID(), ownerUUID); + spawnedFox.setChosenName(results.getString("NAME")); + spawnedFox.setTamed(true); + } + + foxList.add(spawnedFox); + } else { + plugin.getServer().getConsoleSender().sendMessage("ChunkX: " + (chunk.getX()) + ", LocX: " + (loc.getBlockX() / 16) + ", ChunkZ: " + (chunk.getZ()) + ", LocZ: " + (loc.getBlockZ() / 16)); + } + } + + return foxList; + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (sqLiteHandler.getConnection() != null) { + try { + sqLiteHandler.getConnection().close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + return null; + } + public void removeFox(int databaseID) { plugin = TamableFoxes.getPlugin(TamableFoxes.class); try { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 22fdcb4..dfccbf8 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,6 +3,7 @@ version: 1.4.1-SNAPSHOT main: net.seanomik.tamablefoxes.TamableFoxes api-version: 1.15 load: POSTWORLD +#load: STARTUP description: Modified version of TamableFoxes for 1.15.1. commands: diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml index 22fdcb4..dfccbf8 100644 --- a/target/classes/plugin.yml +++ b/target/classes/plugin.yml @@ -3,6 +3,7 @@ version: 1.4.1-SNAPSHOT main: net.seanomik.tamablefoxes.TamableFoxes api-version: 1.15 load: POSTWORLD +#load: STARTUP description: Modified version of TamableFoxes for 1.15.1. commands: diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 1d1e33c..c39e1d8 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,21 +1,21 @@ -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalFloat.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalRandomTargetNonTamed.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\command\CommandSpawnTamableFox.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalOwnerHurtByTarget.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\sqlite\SQLiteHandler.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\EntityTamableFox.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalMeleeAttack.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalHurtByTarget.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalSit.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalOwnerHurtTarget.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalPickBushes.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalBreed.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\io\FileManager.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalBeg.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalLungeUNKNOWN_USE.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\sqlite\SQLiteSetterGetter.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\TamableFoxes.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalLunge.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalRandomStrollLand.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalFollowOwner.java -C:\code\java\TamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalFleeSun.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalRandomStrollLand.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalRandomTargetNonTamed.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalLunge.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\command\CommandSpawnTamableFox.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\TamableFoxes.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalBeg.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalPickBushes.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalBreed.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalMeleeAttack.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\EntityTamableFox.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalFleeSun.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\sqlite\SQLiteHandler.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalLungeUNKNOWN_USE.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalOwnerHurtByTarget.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalOwnerHurtTarget.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalSit.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\sqlite\SQLiteSetterGetter.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalFloat.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\io\FileManager.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalHurtByTarget.java +D:\Code\java\spigotPlugins\myPlugins\GitTamableFoxes\src\main\java\net\seanomik\tamablefoxes\pathfinding\FoxPathfindGoalFollowOwner.java