diff --git a/pom.xml b/pom.xml index 596856b83..b07415ad2 100644 --- a/pom.xml +++ b/pom.xml @@ -6,13 +6,13 @@ net.citizensnpcs citizens - 2.0.8-SNAPSHOT + 2.0.9-SNAPSHOT Citizens UTF-8 - 1.5.2-R0.1-SNAPSHOT - 2.0.8-SNAPSHOT + LATEST + 2.0.9-SNAPSHOT 1.2.19-SNAPSHOT 1.4.12 Unknown @@ -34,7 +34,21 @@ + + + bukkit-plugins + http://repo.bukkit.org/content/groups/public + + + + + org.bukkit + bukkit + ${craftbukkit.version} + jar + provided + org.bukkit craftbukkit @@ -97,7 +111,6 @@ - org.apache.maven.plugins maven-compiler-plugin @@ -112,6 +125,12 @@ org.apache.maven.plugins maven-jar-plugin 2.3.2 + + + net.minecraft.server.* + org.bukkit.craftbukkit.* + + diff --git a/src/main/java/net/citizensnpcs/Citizens.java b/src/main/java/net/citizensnpcs/Citizens.java index c10a1dd6c..797297fba 100644 --- a/src/main/java/net/citizensnpcs/Citizens.java +++ b/src/main/java/net/citizensnpcs/Citizens.java @@ -431,5 +431,5 @@ public class Citizens extends JavaPlugin implements CitizensPlugin { return false; } - private static final String COMPATIBLE_MC_VERSION = "1.5.2"; + private static final String COMPATIBLE_MC_VERSION = "1.6.1"; } diff --git a/src/main/java/net/citizensnpcs/Metrics.java b/src/main/java/net/citizensnpcs/Metrics.java index 2352d1d6d..fb1eafbbb 100644 --- a/src/main/java/net/citizensnpcs/Metrics.java +++ b/src/main/java/net/citizensnpcs/Metrics.java @@ -1,5 +1,5 @@ /* - * Copyright 2011 Tyler Blair. All rights reserved. + * Copyright 2011-2013 Tyler Blair. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: @@ -25,14 +25,14 @@ * authors and contributors and should not be interpreted as representing official policies, * either expressed or implied, of anybody else. */ - package net.citizensnpcs; import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; -import java.io.OutputStreamWriter; +import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.Proxy; import java.net.URL; @@ -45,6 +45,7 @@ import java.util.LinkedHashSet; import java.util.Set; import java.util.UUID; import java.util.logging.Level; +import java.util.zip.GZIPOutputStream; import org.bukkit.Bukkit; import org.bukkit.configuration.InvalidConfigurationException; @@ -53,22 +54,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.scheduler.BukkitTask; -/** - *

- * The metrics class obtains data about a plugin and submits statistics about it - * to the metrics backend. - *

- *

- * Public methods provided by this class: - *

- * - * Graph createGraph(String name);
- * void addCustomData(Metrics.Plotter plotter);
- * void start();
- *
- */ public class Metrics { - /** * The plugin configuration file */ @@ -84,12 +70,6 @@ public class Metrics { */ private final boolean debug; - /** - * The default graph, used for addCustomData when you don't want a specific - * graph - */ - private final Graph defaultGraph = new Graph("Default"); - /** * All of the custom graphs to submit to metrics */ @@ -142,27 +122,15 @@ public class Metrics { debug = configuration.getBoolean("debug", false); } - /** - * Adds a custom data plotter to the default graph - * - * @param plotter - * The plotter to use to plot custom data - */ - public void addCustomData(final Plotter plotter) { - if (plotter == null) { - throw new IllegalArgumentException("Plotter cannot be null"); - } - - // Add the plotter to the graph o/ - defaultGraph.addPlotter(plotter); - - // Ensure the default graph is included in the submitted graphs - graphs.add(defaultGraph); + public void addCustomData(Plotter plotter) { + Graph graph = new Graph(plotter.name); + graph.addPlotter(plotter); + addGraph(graph); } /** - * Add a Graph object to Metrics that represents data for the plugin that - * should be sent to the backend + * Add a Graph object to BukkitMetrics that represents data for the plugin + * that should be sent to the backend * * @param graph * The name of the graph @@ -204,7 +172,7 @@ public class Metrics { * Disables metrics for the server by setting "opt-out" to true in the * config file and canceling the metrics task. * - * @throws IOException + * @throws java.io.IOException */ public void disable() throws IOException { // This has to be synchronized or it can collide with the check in the @@ -229,7 +197,7 @@ public class Metrics { * Enables metrics for the server by setting "opt-out" to false in the * config file and starting the metrics task. * - * @throws IOException + * @throws java.io.IOException */ public void enable() throws IOException { // This has to be synchronized or it can collide with the check in the @@ -326,15 +294,15 @@ public class Metrics { // any code outside of this class / Java // Construct the post data - final StringBuilder data = new StringBuilder(); + StringBuilder json = new StringBuilder(1024); + json.append('{'); // The plugin's description file containg all of the plugin data such as // name, version, author, etc - data.append(encode("guid")).append('=').append(encode(guid)); - encodeDataPair(data, "version", pluginVersion); - encodeDataPair(data, "server", serverVersion); - encodeDataPair(data, "players", Integer.toString(playersOnline)); - encodeDataPair(data, "revision", String.valueOf(REVISION)); + appendJSONPair(json, "guid", guid); + appendJSONPair(json, "plugin_version", pluginVersion); + appendJSONPair(json, "server_version", serverVersion); + appendJSONPair(json, "players_online", Integer.toString(playersOnline)); // New data as of R6 String osname = System.getProperty("os.name"); @@ -348,49 +316,63 @@ public class Metrics { osarch = "x86_64"; } - encodeDataPair(data, "osname", osname); - encodeDataPair(data, "osarch", osarch); - encodeDataPair(data, "osversion", osversion); - encodeDataPair(data, "cores", Integer.toString(coreCount)); - encodeDataPair(data, "online-mode", Boolean.toString(onlineMode)); - encodeDataPair(data, "java_version", java_version); + appendJSONPair(json, "osname", osname); + appendJSONPair(json, "osarch", osarch); + appendJSONPair(json, "osversion", osversion); + appendJSONPair(json, "cores", Integer.toString(coreCount)); + appendJSONPair(json, "auth_mode", onlineMode ? "1" : "0"); + appendJSONPair(json, "java_version", java_version); // If we're pinging, append it if (isPing) { - encodeDataPair(data, "ping", "true"); + appendJSONPair(json, "ping", "1"); } - // Acquire a lock on the graphs, which lets us make the assumption we - // also lock everything - // inside of the graph (e.g plotters) - synchronized (graphs) { - final Iterator iter = graphs.iterator(); + if (graphs.size() > 0) { + synchronized (graphs) { + json.append(','); + json.append('"'); + json.append("graphs"); + json.append('"'); + json.append(':'); + json.append('{'); - while (iter.hasNext()) { - final Graph graph = iter.next(); + boolean firstGraph = true; - for (Plotter plotter : graph.getPlotters()) { - // The key name to send to the metrics server - // The format is C-GRAPHNAME-PLOTTERNAME where separator - - // is defined at the top - // Legacy (R4) submitters use the format Custom%s, or - // CustomPLOTTERNAME - final String key = String.format("C%s%s%s%s", CUSTOM_DATA_SEPARATOR, graph.getName(), - CUSTOM_DATA_SEPARATOR, plotter.getColumnName()); + final Iterator iter = graphs.iterator(); - // The value to send, which for the foreseeable future is - // just the string - // value of plotter.getValue() - final String value = Integer.toString(plotter.getValue()); + while (iter.hasNext()) { + Graph graph = iter.next(); - // Add it to the http post data :) - encodeDataPair(data, key, value); + StringBuilder graphJson = new StringBuilder(); + graphJson.append('{'); + + for (Plotter plotter : graph.getPlotters()) { + appendJSONPair(graphJson, plotter.getColumnName(), Integer.toString(plotter.getValue())); + } + + graphJson.append('}'); + + if (!firstGraph) { + json.append(','); + } + + json.append(escapeJSON(graph.getName())); + json.append(':'); + json.append(graphJson); + + firstGraph = false; } + + json.append('}'); } } + // close json + json.append('}'); + // Create the url - URL url = new URL(BASE_URL + String.format(REPORT_URL, encode(pluginName))); + URL url = new URL(BASE_URL + String.format(REPORT_URL, urlEncode(pluginName))); // Connect to the website URLConnection connection; @@ -403,26 +385,48 @@ public class Metrics { connection = url.openConnection(); } + byte[] uncompressed = json.toString().getBytes(); + byte[] compressed = gzip(json.toString()); + + // Headers + connection.addRequestProperty("User-Agent", "MCStats/" + REVISION); + connection.addRequestProperty("Content-Type", "application/json"); + connection.addRequestProperty("Content-Encoding", "gzip"); + connection.addRequestProperty("Content-Length", Integer.toString(compressed.length)); + connection.addRequestProperty("Accept", "application/json"); + connection.addRequestProperty("Connection", "close"); + connection.setDoOutput(true); + if (debug) { + System.out.println("[Metrics] Prepared request for " + pluginName + " uncompressed=" + uncompressed.length + + " compressed=" + compressed.length); + } + // Write the data - final OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); - writer.write(data.toString()); - writer.flush(); + OutputStream os = connection.getOutputStream(); + os.write(compressed); + os.flush(); // Now read the response final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - final String response = reader.readLine(); + String response = reader.readLine(); // close resources - writer.close(); + os.close(); reader.close(); - if (response == null || response.startsWith("ERR")) { - throw new IOException(response); // Throw the exception + if (response == null || response.startsWith("ERR") || response.startsWith("7")) { + if (response == null) { + response = "null"; + } else if (response.startsWith("7")) { + response = response.substring(response.startsWith("7,") ? 2 : 1); + } + + throw new IOException(response); } else { // Is this the first update this hour? - if (response.contains("OK This is your first update this hour")) { + if (response.equals("1") || response.contains("This is your first update this hour")) { synchronized (graphs) { final Iterator iter = graphs.iterator(); @@ -556,7 +560,7 @@ public class Metrics { /** * Gets an unmodifiable set of the plotter objects in the graph * - * @return an unmodifiable {@link Set} of the plotter objects + * @return an unmodifiable {@link java.util.Set} of the plotter objects */ public Set getPlotters() { return Collections.unmodifiableSet(plotters); @@ -568,8 +572,8 @@ public class Metrics { } /** - * Called when the server owner decides to opt-out of Metrics while the - * server is running. + * Called when the server owner decides to opt-out of BukkitMetrics + * while the server is running. */ protected void onOptOut() { } @@ -583,7 +587,6 @@ public class Metrics { public void removePlotter(final Plotter plotter) { plotters.remove(plotter); } - } /** @@ -654,34 +657,114 @@ public class Metrics { */ public void reset() { } - } /** - * The base url of the metrics domain + * Appends a json encoded key/value pair to the given string builder. + * + * @param json + * @param key + * @param value + * @throws UnsupportedEncodingException */ - private static final String BASE_URL = "http://mcstats.org"; + private static void appendJSONPair(StringBuilder json, String key, String value) + throws UnsupportedEncodingException { + boolean isValueNumeric = false; + + try { + if (value.equals("0") || !value.endsWith("0")) { + Double.parseDouble(value); + isValueNumeric = true; + } + } catch (NumberFormatException e) { + isValueNumeric = false; + } + + if (json.charAt(json.length() - 1) != '{') { + json.append(','); + } + + json.append(escapeJSON(key)); + json.append(':'); + + if (isValueNumeric) { + json.append(value); + } else { + json.append(escapeJSON(value)); + } + } /** - * The separator to use for custom data. This MUST NOT change unless you are - * hosting your own version of metrics and want to change it. + * Escape a string to create a valid JSON string + * + * @param text + * @return */ - private static final String CUSTOM_DATA_SEPARATOR = "~~"; + private static String escapeJSON(String text) { + StringBuilder builder = new StringBuilder(); + + builder.append('"'); + for (int index = 0; index < text.length(); index++) { + char chr = text.charAt(index); + + switch (chr) { + case '"': + case '\\': + builder.append('\\'); + builder.append(chr); + break; + case '\b': + builder.append("\\b"); + break; + case '\t': + builder.append("\\t"); + break; + case '\n': + builder.append("\\n"); + break; + case '\r': + builder.append("\\r"); + break; + default: + if (chr < ' ') { + String t = "000" + Integer.toHexString(chr); + builder.append("\\u" + t.substring(t.length() - 4)); + } else { + builder.append(chr); + } + break; + } + } + builder.append('"'); + + return builder.toString(); + } /** - * Interval of time to ping (in minutes) + * GZip compress a string of bytes + * + * @param input + * @return */ - private static final int PING_INTERVAL = 10; + public static byte[] gzip(String input) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + GZIPOutputStream gzos = null; - /** - * The url used to report a server's status - */ - private static final String REPORT_URL = "/report/%s"; + try { + gzos = new GZIPOutputStream(baos); + gzos.write(input.getBytes("UTF-8")); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (gzos != null) + try { + gzos.close(); + } catch (IOException ignore) { + } + } - /** - * The current revision number - */ - private final static int REVISION = 6; + return baos.toByteArray(); + } /** * Encode text as UTF-8 @@ -690,31 +773,27 @@ public class Metrics { * the text to encode * @return the encoded text, as UTF-8 */ - private static String encode(final String text) throws UnsupportedEncodingException { + private static String urlEncode(final String text) throws UnsupportedEncodingException { return URLEncoder.encode(text, "UTF-8"); } /** - *

- * Encode a key/value data pair to be used in a HTTP post request. This - * INCLUDES a & so the first key/value pair MUST be included manually, e.g: - *

- * - * StringBuffer data = new StringBuffer(); - * data.append(encode("guid")).append('=').append(encode(guid)); - * encodeDataPair(data, "version", description.getVersion()); - * - * - * @param buffer - * the stringbuilder to append the data pair onto - * @param key - * the key value - * @param value - * the value + * The base url of the metrics domain */ - private static void encodeDataPair(final StringBuilder buffer, final String key, final String value) - throws UnsupportedEncodingException { - buffer.append('&').append(encode(key)).append('=').append(encode(value)); - } + private static final String BASE_URL = "http://report.mcstats.org"; + /** + * Interval of time to ping (in minutes) + */ + private static final int PING_INTERVAL = 15; + + /** + * The url used to report a server's status + */ + private static final String REPORT_URL = "/plugin/%s"; + + /** + * The current revision number + */ + private final static int REVISION = 7; } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 4151afe0c..3af941682 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -22,11 +22,11 @@ import net.citizensnpcs.trait.CurrentLocation; import net.citizensnpcs.util.Messages; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityLiving; +import net.minecraft.server.v1_6_R1.EntityLiving; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftLivingEntity; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; diff --git a/src/main/java/net/citizensnpcs/npc/EntityControllers.java b/src/main/java/net/citizensnpcs/npc/EntityControllers.java index bac8077b4..c077e1aa6 100644 --- a/src/main/java/net/citizensnpcs/npc/EntityControllers.java +++ b/src/main/java/net/citizensnpcs/npc/EntityControllers.java @@ -12,6 +12,7 @@ import net.citizensnpcs.npc.entity.EnderDragonController; import net.citizensnpcs.npc.entity.EndermanController; import net.citizensnpcs.npc.entity.GhastController; import net.citizensnpcs.npc.entity.GiantController; +import net.citizensnpcs.npc.entity.HorseController; import net.citizensnpcs.npc.entity.HumanController; import net.citizensnpcs.npc.entity.IronGolemController; import net.citizensnpcs.npc.entity.MagmaCubeController; @@ -38,8 +39,6 @@ import com.google.common.base.Throwables; import com.google.common.collect.Maps; public class EntityControllers { - private static final Map> TYPES = Maps.newEnumMap(EntityType.class); - public static EntityController createForType(EntityType type) { Class controllerClass = TYPES.get(type); if (controllerClass == null) @@ -56,6 +55,8 @@ public class EntityControllers { TYPES.put(type, controller); } + private static final Map> TYPES = Maps.newEnumMap(EntityType.class); + static { TYPES.put(EntityType.BAT, BatController.class); TYPES.put(EntityType.BLAZE, BlazeController.class); @@ -67,6 +68,7 @@ public class EntityControllers { TYPES.put(EntityType.ENDERMAN, EndermanController.class); TYPES.put(EntityType.GHAST, GhastController.class); TYPES.put(EntityType.GIANT, GiantController.class); + TYPES.put(EntityType.HORSE, HorseController.class); TYPES.put(EntityType.IRON_GOLEM, IronGolemController.class); TYPES.put(EntityType.MAGMA_CUBE, MagmaCubeController.class); TYPES.put(EntityType.MUSHROOM_COW, MushroomCowController.class); diff --git a/src/main/java/net/citizensnpcs/npc/MobEntityController.java b/src/main/java/net/citizensnpcs/npc/MobEntityController.java index ab746cc19..08cfded34 100644 --- a/src/main/java/net/citizensnpcs/npc/MobEntityController.java +++ b/src/main/java/net/citizensnpcs/npc/MobEntityController.java @@ -5,12 +5,12 @@ import java.util.Map; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.util.NMS; -import net.minecraft.server.v1_5_R3.EntityLiving; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityLiving; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Location; import org.bukkit.block.BlockFace; -import org.bukkit.craftbukkit.v1_5_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_6_R1.CraftWorld; import org.bukkit.entity.LivingEntity; import com.google.common.collect.Maps; diff --git a/src/main/java/net/citizensnpcs/npc/ai/AStarNavigationStrategy.java b/src/main/java/net/citizensnpcs/npc/ai/AStarNavigationStrategy.java index a8708cc3e..877c4d4bf 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/AStarNavigationStrategy.java +++ b/src/main/java/net/citizensnpcs/npc/ai/AStarNavigationStrategy.java @@ -10,12 +10,9 @@ import net.citizensnpcs.api.astar.pathfinder.VectorGoal; import net.citizensnpcs.api.astar.pathfinder.VectorNode; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.util.NMS; -import net.minecraft.server.v1_5_R3.EntityLiving; +import net.minecraft.server.v1_6_R1.EntityLiving; -import org.bukkit.Effect; import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; import org.bukkit.util.Vector; public class AStarNavigationStrategy extends AbstractPathStrategy { @@ -62,8 +59,6 @@ public class AStarNavigationStrategy extends AbstractPathStrategy { return true; } vector = plan.getCurrentVector(); - World world = npc.getBukkitEntity().getWorld(); - world.playEffect(vector.toLocation(world), Effect.STEP_SOUND, Material.STONE.getId()); } EntityLiving handle = NMS.getHandle(npc.getBukkitEntity()); double dX = vector.getBlockX() - handle.locX; diff --git a/src/main/java/net/citizensnpcs/npc/ai/BlockBreaker.java b/src/main/java/net/citizensnpcs/npc/ai/BlockBreaker.java index b47decec5..42eb7ea81 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/BlockBreaker.java +++ b/src/main/java/net/citizensnpcs/npc/ai/BlockBreaker.java @@ -3,17 +3,17 @@ package net.citizensnpcs.npc.ai; import net.citizensnpcs.api.ai.tree.BehaviorGoalAdapter; import net.citizensnpcs.api.ai.tree.BehaviorStatus; import net.citizensnpcs.util.PlayerAnimation; -import net.minecraft.server.v1_5_R3.Block; -import net.minecraft.server.v1_5_R3.Enchantment; -import net.minecraft.server.v1_5_R3.EnchantmentManager; -import net.minecraft.server.v1_5_R3.EntityLiving; -import net.minecraft.server.v1_5_R3.EntityPlayer; -import net.minecraft.server.v1_5_R3.ItemStack; -import net.minecraft.server.v1_5_R3.Material; -import net.minecraft.server.v1_5_R3.MobEffectList; +import net.minecraft.server.v1_6_R1.Block; +import net.minecraft.server.v1_6_R1.Enchantment; +import net.minecraft.server.v1_6_R1.EnchantmentManager; +import net.minecraft.server.v1_6_R1.EntityLiving; +import net.minecraft.server.v1_6_R1.EntityPlayer; +import net.minecraft.server.v1_6_R1.ItemStack; +import net.minecraft.server.v1_6_R1.Material; +import net.minecraft.server.v1_6_R1.MobEffectList; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftLivingEntity; -import org.bukkit.craftbukkit.v1_5_R3.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_6_R1.inventory.CraftItemStack; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -39,7 +39,7 @@ public class BlockBreaker extends BehaviorGoalAdapter { return Math.pow(entity.locX - x, 2) + Math.pow(entity.locY - y, 2) + Math.pow(entity.locZ - z, 2); } - private net.minecraft.server.v1_5_R3.ItemStack getCurrentItem() { + private net.minecraft.server.v1_6_R1.ItemStack getCurrentItem() { return configuration.item() != null ? CraftItemStack.asNMSCopy(configuration.item()) : entity.getEquipment(0); } diff --git a/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java b/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java index 083bb2dfd..1ffb83cc4 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java +++ b/src/main/java/net/citizensnpcs/npc/ai/CitizensNavigator.java @@ -163,7 +163,7 @@ public class CitizensNavigator implements Navigator, Runnable { } localParams = defaultParams.clone(); PathStrategy newStrategy; - if (Setting.USE_NEW_PATHFINDER.asBoolean()) { + if (Setting.USE_NEW_PATHFINDER.asBoolean() || NMS.isSentient(npc.getBukkitEntity())) { newStrategy = new AStarNavigationStrategy(npc, target, localParams); } else newStrategy = new MCNavigationStrategy(npc, target, localParams); diff --git a/src/main/java/net/citizensnpcs/npc/ai/MCNavigationStrategy.java b/src/main/java/net/citizensnpcs/npc/ai/MCNavigationStrategy.java index 9d9cd699b..e36a287fa 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/MCNavigationStrategy.java +++ b/src/main/java/net/citizensnpcs/npc/ai/MCNavigationStrategy.java @@ -4,11 +4,11 @@ import net.citizensnpcs.api.ai.NavigatorParameters; import net.citizensnpcs.api.ai.TargetType; import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.npc.NPC; -import net.minecraft.server.v1_5_R3.EntityLiving; -import net.minecraft.server.v1_5_R3.Navigation; +import net.minecraft.server.v1_6_R1.EntityInsentient; +import net.minecraft.server.v1_6_R1.Navigation; import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftLivingEntity; public class MCNavigationStrategy extends AbstractPathStrategy { private final Navigation navigation; @@ -19,7 +19,7 @@ public class MCNavigationStrategy extends AbstractPathStrategy { super(TargetType.LOCATION); this.target = dest; this.parameters = params; - EntityLiving handle = ((CraftLivingEntity) npc.getBukkitEntity()).getHandle(); + EntityInsentient handle = (EntityInsentient) ((CraftLivingEntity) npc.getBukkitEntity()).getHandle(); handle.onGround = true; // not sure of a better way around this - if onGround is false, then // navigation won't execute, and calling entity.move doesn't @@ -27,7 +27,7 @@ public class MCNavigationStrategy extends AbstractPathStrategy { navigation = handle.getNavigation(); navigation.a(parameters.avoidWater()); navigation.a(dest.getX(), dest.getY(), dest.getZ(), parameters.speed()); - if (navigation.f()) + if (navigation.g()) setCancelReason(CancelReason.STUCK); } @@ -57,6 +57,6 @@ public class MCNavigationStrategy extends AbstractPathStrategy { return true; navigation.a(parameters.avoidWater()); navigation.a(parameters.speed()); - return navigation.f(); + return navigation.g(); } } diff --git a/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java b/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java index d3cb831ab..4c2b55068 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java +++ b/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java @@ -11,15 +11,16 @@ import net.citizensnpcs.api.ai.event.CancelReason; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.PlayerAnimation; -import net.minecraft.server.v1_5_R3.Entity; -import net.minecraft.server.v1_5_R3.EntityLiving; -import net.minecraft.server.v1_5_R3.EntityPlayer; -import net.minecraft.server.v1_5_R3.Navigation; -import net.minecraft.server.v1_5_R3.PathEntity; +import net.minecraft.server.v1_6_R1.Entity; +import net.minecraft.server.v1_6_R1.EntityInsentient; +import net.minecraft.server.v1_6_R1.EntityLiving; +import net.minecraft.server.v1_6_R1.EntityPlayer; +import net.minecraft.server.v1_6_R1.Navigation; +import net.minecraft.server.v1_6_R1.PathEntity; import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftLivingEntity; import org.bukkit.entity.LivingEntity; public class MCTargetStrategy implements PathStrategy, EntityTarget { @@ -27,18 +28,19 @@ public class MCTargetStrategy implements PathStrategy, EntityTarget { private int attackTicks; private CancelReason cancelReason; private final EntityLiving handle; - private final Navigation navigation; + private final NPC npc; private final NavigatorParameters parameters; + private final TargetNavigator targetNavigator; private final Entity target; - private final NavigationFieldWrapper wrapper; - public MCTargetStrategy(NPC handle, org.bukkit.entity.Entity target, boolean aggro, NavigatorParameters params) { - this.handle = ((CraftLivingEntity) handle.getBukkitEntity()).getHandle(); + public MCTargetStrategy(NPC npc, org.bukkit.entity.Entity target, boolean aggro, NavigatorParameters params) { + this.npc = npc; + this.handle = ((CraftLivingEntity) npc.getBukkitEntity()).getHandle(); this.target = ((CraftEntity) target).getHandle(); - this.navigation = this.handle.getNavigation(); + this.targetNavigator = this.handle instanceof EntityInsentient ? new NavigationFieldWrapper( + ((EntityInsentient) this.handle).getNavigation()) : new AStarTargeter(); this.aggro = aggro; this.parameters = params; - this.wrapper = new NavigationFieldWrapper(this.navigation); } private boolean canAttack() { @@ -87,12 +89,12 @@ public class MCTargetStrategy implements PathStrategy, EntityTarget { } private void setPath() { - navigation.a(wrapper.findPath(handle, target), parameters.speed()); + targetNavigator.setPath(); } @Override public void stop() { - navigation.g(); + targetNavigator.stop(); } @Override @@ -112,7 +114,6 @@ public class MCTargetStrategy implements PathStrategy, EntityTarget { } if (cancelReason != null) return true; - navigation.a(parameters.avoidWater()); setPath(); NMS.look(handle, target); if (aggro && canAttack()) { @@ -133,11 +134,31 @@ public class MCTargetStrategy implements PathStrategy, EntityTarget { return false; } - private class NavigationFieldWrapper { + private class AStarTargeter implements TargetNavigator { + private AStarNavigationStrategy strategy = new AStarNavigationStrategy(npc, target.getBukkitEntity() + .getLocation(TARGET_LOCATION), parameters); + + @Override + public void setPath() { + strategy = new AStarNavigationStrategy(npc, target.getBukkitEntity().getLocation(TARGET_LOCATION), + parameters); + strategy.update(); + cancelReason = strategy.getCancelReason(); + } + + @Override + public void stop() { + strategy.stop(); + } + } + + private class NavigationFieldWrapper implements TargetNavigator { float e; boolean j = true, k, l, m; + private final Navigation navigation; private NavigationFieldWrapper(Navigation navigation) { + this.navigation = navigation; this.k = navigation.c(); this.l = navigation.a(); try { @@ -155,12 +176,28 @@ public class MCTargetStrategy implements PathStrategy, EntityTarget { public PathEntity findPath(Entity from, Entity to) { return handle.world.findPath(from, to, e, j, k, l, m); } + + @Override + public void setPath() { + navigation.a(parameters.avoidWater()); + navigation.a(findPath(handle, target), parameters.speed()); + } + + @Override + public void stop() { + navigation.g(); + } + } + + private static interface TargetNavigator { + void setPath(); + + void stop(); } private static final int ATTACK_DELAY_TICKS = 20; private static final Location HANDLE_LOCATION = new Location(null, 0, 0, 0); private static Field NAV_E, NAV_J, NAV_M; - private static final Location TARGET_LOCATION = new Location(null, 0, 0, 0); static { diff --git a/src/main/java/net/citizensnpcs/npc/entity/BatController.java b/src/main/java/net/citizensnpcs/npc/entity/BatController.java index 05c3c14f0..bac1d831a 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/BatController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/BatController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityBat; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityBat; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftBat; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftBat; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; import org.bukkit.entity.Bat; import org.bukkit.util.Vector; @@ -58,22 +58,22 @@ public class BatController extends MobEntityController { } @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } - - @Override - public void bo() { + public void be() { if (npc == null) - super.bo(); + super.be(); else { NMS.updateAI(this); npc.update(); } } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ + @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/BlazeController.java b/src/main/java/net/citizensnpcs/npc/entity/BlazeController.java index f9477b447..80647fde2 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/BlazeController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/BlazeController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityBlaze; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityBlaze; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftBlaze; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftBlaze; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; import org.bukkit.entity.Blaze; import org.bukkit.util.Vector; @@ -56,23 +56,23 @@ public class BlazeController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bq() { + public void bh() { if (npc != null) { NMS.updateAI(this); npc.update(); } else { - super.bq(); + super.bh(); } } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CaveSpiderController.java b/src/main/java/net/citizensnpcs/npc/entity/CaveSpiderController.java index 87b95c5f6..2f75b7729 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CaveSpiderController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CaveSpiderController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityCaveSpider; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityCaveSpider; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftCaveSpider; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftCaveSpider; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; import org.bukkit.entity.CaveSpider; import org.bukkit.util.Vector; @@ -58,21 +58,21 @@ public class CaveSpiderController extends MobEntityController { } @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } - - @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ + @Override - public void bq() { + public void bh() { if (npc == null) - super.bq(); + super.bh(); else { NMS.updateAI(this); npc.update(); @@ -80,7 +80,7 @@ public class CaveSpiderController extends MobEntityController { } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/ChickenController.java b/src/main/java/net/citizensnpcs/npc/entity/ChickenController.java index c72cd118b..a94bdf7a4 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/ChickenController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/ChickenController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityChicken; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityChicken; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftChicken; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftChicken; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; import org.bukkit.entity.Chicken; import org.bukkit.util.Vector; @@ -53,24 +53,23 @@ public class ChickenController extends MobEntityController { this.npc = (CitizensNPC) npc; if (npc != null) { NMS.clearGoals(goalSelector, targetSelector); - } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CowController.java b/src/main/java/net/citizensnpcs/npc/entity/CowController.java index 8a3cb2123..fbfc5a6bd 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CowController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CowController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityCow; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityCow; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftCow; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftCow; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; import org.bukkit.entity.Cow; import org.bukkit.util.Vector; @@ -57,20 +57,21 @@ public class CowController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + } + */ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CreeperController.java b/src/main/java/net/citizensnpcs/npc/entity/CreeperController.java index 4f810ed23..dcb1d5df7 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CreeperController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CreeperController.java @@ -7,14 +7,14 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityCreeper; -import net.minecraft.server.v1_5_R3.EntityLightning; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityCreeper; +import net.minecraft.server.v1_6_R1.EntityLightning; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftCreeper; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftCreeper; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; import org.bukkit.entity.Creeper; import org.bukkit.util.Vector; @@ -64,20 +64,20 @@ public class CreeperController extends MobEntityController { super.a(entitylightning); } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/EnderDragonController.java b/src/main/java/net/citizensnpcs/npc/entity/EnderDragonController.java index 147d2314f..59f7e9f40 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/EnderDragonController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/EnderDragonController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityEnderDragon; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityEnderDragon; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEnderDragon; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEnderDragon; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; import org.bukkit.entity.EnderDragon; import org.bukkit.util.Vector; @@ -56,15 +56,16 @@ public class EnderDragonController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bq() { - if (npc == null) - super.bq(); + public void bh() { + if (npc == null) { + super.bh(); + } } @Override @@ -83,7 +84,7 @@ public class EnderDragonController extends MobEntityController { } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/EndermanController.java b/src/main/java/net/citizensnpcs/npc/entity/EndermanController.java index 71d5b2daf..a9b3c078d 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/EndermanController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/EndermanController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityEnderman; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityEnderman; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEnderman; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEnderman; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; import org.bukkit.entity.Enderman; import org.bukkit.util.Vector; @@ -56,22 +56,22 @@ public class EndermanController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void bq() { + public void bh() { if (npc == null) - super.bq(); + super.bh(); else { NMS.updateAI(this); npc.update(); @@ -89,7 +89,7 @@ public class EndermanController extends MobEntityController { } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java b/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java index cc4464b52..0c6cb4242 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java @@ -13,29 +13,36 @@ import net.citizensnpcs.npc.network.EmptyNetworkManager; import net.citizensnpcs.npc.network.EmptySocket; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.Connection; -import net.minecraft.server.v1_5_R3.EntityPlayer; -import net.minecraft.server.v1_5_R3.EnumGamemode; -import net.minecraft.server.v1_5_R3.MathHelper; -import net.minecraft.server.v1_5_R3.MinecraftServer; -import net.minecraft.server.v1_5_R3.Navigation; -import net.minecraft.server.v1_5_R3.NetworkManager; -import net.minecraft.server.v1_5_R3.Packet; -import net.minecraft.server.v1_5_R3.Packet35EntityHeadRotation; -import net.minecraft.server.v1_5_R3.Packet5EntityEquipment; -import net.minecraft.server.v1_5_R3.PlayerInteractManager; -import net.minecraft.server.v1_5_R3.World; +import net.citizensnpcs.util.nms.PlayerControllerJump; +import net.citizensnpcs.util.nms.PlayerControllerLook; +import net.citizensnpcs.util.nms.PlayerControllerMove; +import net.minecraft.server.v1_6_R1.Connection; +import net.minecraft.server.v1_6_R1.Entity; +import net.minecraft.server.v1_6_R1.EntityPlayer; +import net.minecraft.server.v1_6_R1.EnumGamemode; +import net.minecraft.server.v1_6_R1.MathHelper; +import net.minecraft.server.v1_6_R1.MinecraftServer; +import net.minecraft.server.v1_6_R1.NetworkManager; +import net.minecraft.server.v1_6_R1.Packet; +import net.minecraft.server.v1_6_R1.Packet35EntityHeadRotation; +import net.minecraft.server.v1_6_R1.Packet5EntityEquipment; +import net.minecraft.server.v1_6_R1.PlayerInteractManager; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer; import org.bukkit.metadata.MetadataValue; import org.bukkit.plugin.Plugin; import org.bukkit.util.Vector; public class EntityHumanNPC extends EntityPlayer implements NPCHolder { + private PlayerControllerJump controllerJump; + private PlayerControllerLook controllerLook; + private PlayerControllerMove controllerMove; private boolean gravity = true; + private int jumpTicks = 0; private final CitizensNPC npc; private final Location packetLocationCache = new Location(null, 0, 0, 0); private int packetUpdateCount; @@ -50,13 +57,13 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { initialise(minecraftServer); } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); @@ -93,6 +100,10 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { return super.getBukkitEntity(); } + public PlayerControllerJump getControllerJump() { + return controllerJump; + } + @Override public NPC getNPC() { return npc; @@ -102,19 +113,18 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { Socket socket = new EmptySocket(); NetworkManager conn = null; try { - conn = new EmptyNetworkManager(server.getLogger(), socket, "npc mgr", new Connection() { + conn = new EmptyNetworkManager(minecraftServer.getLogger(), socket, "npc mgr", new Connection() { @Override public boolean a() { return false; } - }, server.F().getPrivate()); + }, minecraftServer.H().getPrivate()); playerConnection = new EmptyNetHandler(minecraftServer, conn, this); conn.a(playerConnection); } catch (IOException e) { // swallow } - getNavigation().e(true); Y = 1F; // stepHeight - must not stay as the default 0 (breaks steps). // Check the EntityPlayer constructor for the new name. @@ -123,6 +133,13 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { } catch (IOException ex) { // swallow } + controllerJump = new PlayerControllerJump(this); + controllerLook = new PlayerControllerLook(this); + controllerMove = new PlayerControllerMove(this); + } + + public boolean isNavigating() { + return npc.getNavigator().isNavigating(); } @Override @@ -139,16 +156,15 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { // (onGround is normally updated by the client) } if (!npc.data().get("removefromplayerlist", true)) { - g(); + h(); } if (Math.abs(motX) < EPSILON && Math.abs(motY) < EPSILON && Math.abs(motZ) < EPSILON) motX = motY = motZ = 0; - NMS.updateSenses(this); if (navigating) { - Navigation navigation = getNavigation(); - if (!navigation.f()) - navigation.e(); + // Navigation navigation = getNavigation(); + // if (!navigation.g()) + // navigation.e(); moveOnCurrentHeading(); } else if (motX != 0 || motZ != 0 || motY != 0) { e(0, 0); // is this necessary? it does controllable but sometimes @@ -163,29 +179,44 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { private void moveOnCurrentHeading() { NMS.updateAI(this); // taken from EntityLiving update method - if (bG) { + if (bd) { /* boolean inLiquid = G() || I(); if (inLiquid) { motY += 0.04; } else //(handled elsewhere)*/ - if (onGround && bX == 0) { - bl(); - bX = 10; + if (onGround && jumpTicks == 0) { + ba(); + jumpTicks = 10; } } else - bX = 0; + jumpTicks = 0; - bD *= 0.98F; - bE *= 0.98F; - bF *= 0.9F; + be *= 0.98F; + bf *= 0.98F; + bg *= 0.9F; - float prev = aO; - aO *= bE(); - e(bD, bE); // movement method - aO = prev; + e(be, bf); // movement method NMS.setHeadYaw(this, yaw); } + public void setMoveDestination(double x, double y, double z, float speed) { + controllerMove.a(x, y, z, speed); + } + + public void setShouldJump() { + controllerJump.a(); + } + + public void setTargetLook(Entity target, float yawOffset, float renderOffset) { + controllerLook.a(target, yawOffset, renderOffset); + } + + public void updateAI() { + controllerMove.c(); + controllerLook.a(); + controllerJump.b(); + } + private void updatePackets(boolean navigating) { if (++packetUpdateCount >= 30) { Location current = getBukkitEntity().getLocation(packetLocationCache); @@ -203,16 +234,18 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { } public static class PlayerNPC extends CraftPlayer implements NPCHolder { + private final CraftServer cserver; private final CitizensNPC npc; private PlayerNPC(EntityHumanNPC entity) { super((CraftServer) Bukkit.getServer(), entity); this.npc = entity.npc; + this.cserver = (CraftServer) Bukkit.getServer(); } @Override public List getMetadata(String metadataKey) { - return server.getEntityMetadata().getMetadata(this, metadataKey); + return cserver.getEntityMetadata().getMetadata(this, metadataKey); } @Override @@ -222,12 +255,12 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { @Override public boolean hasMetadata(String metadataKey) { - return server.getEntityMetadata().hasMetadata(this, metadataKey); + return cserver.getEntityMetadata().hasMetadata(this, metadataKey); } @Override public void removeMetadata(String metadataKey, Plugin owningPlugin) { - server.getEntityMetadata().removeMetadata(this, metadataKey, owningPlugin); + cserver.getEntityMetadata().removeMetadata(this, metadataKey, owningPlugin); } public void setGravityEnabled(boolean enabled) { @@ -236,11 +269,10 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder { @Override public void setMetadata(String metadataKey, MetadataValue newMetadataValue) { - server.getEntityMetadata().setMetadata(this, metadataKey, newMetadataValue); + cserver.getEntityMetadata().setMetadata(this, metadataKey, newMetadataValue); } } private static final float EPSILON = 0.005F; - private static final Location LOADED_LOCATION = new Location(null, 0, 0, 0); } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/npc/entity/GhastController.java b/src/main/java/net/citizensnpcs/npc/entity/GhastController.java index 2d7aa9f4f..896daa7e4 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/GhastController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/GhastController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityGhast; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityGhast; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftGhast; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftGhast; import org.bukkit.entity.Ghast; import org.bukkit.util.Vector; @@ -42,21 +42,21 @@ public class GhastController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bq() { + public void bh() { if (npc != null) { npc.update(); } else - super.bq(); + super.bh(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/GiantController.java b/src/main/java/net/citizensnpcs/npc/entity/GiantController.java index c994d5d97..4c62dd37f 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/GiantController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/GiantController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityGiantZombie; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityGiantZombie; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftGiant; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftGiant; import org.bukkit.entity.Giant; import org.bukkit.util.Vector; @@ -42,15 +42,15 @@ public class GiantController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bq() { + public void bh() { if (npc == null) { - super.bq(); + super.bh(); } else { NMS.updateAI(this); npc.update(); @@ -58,7 +58,7 @@ public class GiantController extends MobEntityController { } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); @@ -114,4 +114,5 @@ public class GiantController extends MobEntityController { return npc; } } + } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/npc/entity/HorseController.java b/src/main/java/net/citizensnpcs/npc/entity/HorseController.java new file mode 100644 index 000000000..e4519319f --- /dev/null +++ b/src/main/java/net/citizensnpcs/npc/entity/HorseController.java @@ -0,0 +1,115 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.api.event.NPCPushEvent; +import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.MobEntityController; +import net.citizensnpcs.npc.ai.NPCHolder; +import net.citizensnpcs.util.NMS; +import net.citizensnpcs.util.Util; +import net.minecraft.server.v1_6_R1.EntityHorse; +import net.minecraft.server.v1_6_R1.World; + +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftHorse; +import org.bukkit.entity.Horse; +import org.bukkit.util.Vector; + +public class HorseController extends MobEntityController { + public HorseController() { + super(EntityHorseNPC.class); + } + + @Override + public Horse getBukkitEntity() { + return (Horse) super.getBukkitEntity(); + } + + public static class EntityHorseNPC extends EntityHorse implements NPCHolder { + private final CitizensNPC npc; + + public EntityHorseNPC(World world) { + this(world, null); + } + + public EntityHorseNPC(World world, NPC npc) { + super(world); + this.npc = (CitizensNPC) npc; + if (npc != null) { + NMS.clearGoals(goalSelector, targetSelector); + } + } + + /*@Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ + + @Override + public void c() { + if (npc == null) { + super.c(); + } else + npc.update(); + } + + @Override + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { + // this method is called by both the entities involved - cancelling + // it will not stop the NPC from moving. + super.collide(entity); + if (npc != null) + Util.callCollisionEvent(npc, entity.getBukkitEntity()); + } + + @Override + public void g(double x, double y, double z) { + if (npc == null) { + super.g(x, y, z); + return; + } + if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) { + if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true)) + super.g(x, y, z); + return; + } + Vector vector = new Vector(x, y, z); + NPCPushEvent event = Util.callPushEvent(npc, vector); + if (!event.isCancelled()) { + vector = event.getCollisionVector(); + super.g(vector.getX(), vector.getY(), vector.getZ()); + } + // when another entity collides, this method is called to push the + // NPC so we prevent it from doing anything if the event is + // cancelled. + } + + @Override + public CraftEntity getBukkitEntity() { + if (bukkitEntity == null && npc != null) + bukkitEntity = new HorseNPC(this); + return super.getBukkitEntity(); + } + + @Override + public NPC getNPC() { + return npc; + } + } + + public static class HorseNPC extends CraftHorse implements NPCHolder { + private final CitizensNPC npc; + + public HorseNPC(EntityHorseNPC entity) { + super((CraftServer) Bukkit.getServer(), entity); + this.npc = entity.npc; + } + + @Override + public NPC getNPC() { + return npc; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/npc/entity/HumanController.java b/src/main/java/net/citizensnpcs/npc/entity/HumanController.java index 086701826..8fb69b0b5 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/HumanController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/HumanController.java @@ -6,12 +6,12 @@ import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.util.Colorizer; import net.citizensnpcs.npc.AbstractEntityController; import net.citizensnpcs.util.NMS; -import net.minecraft.server.v1_5_R3.PlayerInteractManager; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.PlayerInteractManager; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_5_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_6_R1.CraftWorld; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; diff --git a/src/main/java/net/citizensnpcs/npc/entity/IronGolemController.java b/src/main/java/net/citizensnpcs/npc/entity/IronGolemController.java index 0ff2464ec..81bb49441 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/IronGolemController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/IronGolemController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityIronGolem; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityIronGolem; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftIronGolem; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftIronGolem; import org.bukkit.entity.IronGolem; import org.bukkit.util.Vector; @@ -42,20 +42,20 @@ public class IronGolemController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/MagmaCubeController.java b/src/main/java/net/citizensnpcs/npc/entity/MagmaCubeController.java index 236415ea1..c831aa8bd 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/MagmaCubeController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/MagmaCubeController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityMagmaCube; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityMagmaCube; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftMagmaCube; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftMagmaCube; import org.bukkit.entity.MagmaCube; import org.bukkit.util.Vector; @@ -43,22 +43,22 @@ public class MagmaCubeController extends MobEntityController { } } - @Override + /*@Override public float bE() { return NMS.modifiedSpeed(super.bE(), npc); - } + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void bq() { + public void bh() { if (npc == null) - super.bq(); + super.bh(); else { NMS.updateAI(this); npc.update(); @@ -66,7 +66,7 @@ public class MagmaCubeController extends MobEntityController { } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/MushroomCowController.java b/src/main/java/net/citizensnpcs/npc/entity/MushroomCowController.java index 74bfc9a8c..c98ea543e 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/MushroomCowController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/MushroomCowController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityMushroomCow; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityMushroomCow; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftMushroomCow; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftMushroomCow; import org.bukkit.entity.MushroomCow; import org.bukkit.util.Vector; @@ -43,20 +43,20 @@ public class MushroomCowController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/OcelotController.java b/src/main/java/net/citizensnpcs/npc/entity/OcelotController.java index fe2a4ce4b..b33dc817a 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/OcelotController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/OcelotController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityOcelot; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityOcelot; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftOcelot; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftOcelot; import org.bukkit.entity.Ocelot; import org.bukkit.util.Vector; @@ -43,20 +43,20 @@ public class OcelotController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/PigController.java b/src/main/java/net/citizensnpcs/npc/entity/PigController.java index 14113a346..1d04f233c 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/PigController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/PigController.java @@ -7,14 +7,14 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityLightning; -import net.minecraft.server.v1_5_R3.EntityPig; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityLightning; +import net.minecraft.server.v1_6_R1.EntityPig; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPig; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPig; import org.bukkit.entity.Pig; import org.bukkit.util.Vector; @@ -49,20 +49,21 @@ public class PigController extends MobEntityController { super.a(entitylightning); } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + } + */ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/PigZombieController.java b/src/main/java/net/citizensnpcs/npc/entity/PigZombieController.java index 11ec46998..218f05087 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/PigZombieController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/PigZombieController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityPigZombie; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityPigZombie; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPigZombie; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPigZombie; import org.bukkit.entity.PigZombie; import org.bukkit.util.Vector; @@ -43,22 +43,22 @@ public class PigZombieController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void bq() { + public void bh() { if (npc == null) { - super.bq(); + super.bh(); } else { NMS.updateAI(this); npc.update(); @@ -66,7 +66,7 @@ public class PigZombieController extends MobEntityController { } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/SheepController.java b/src/main/java/net/citizensnpcs/npc/entity/SheepController.java index 4cfb9f076..6649e8345 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SheepController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/SheepController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntitySheep; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntitySheep; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftSheep; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftSheep; import org.bukkit.entity.Sheep; import org.bukkit.util.Vector; @@ -43,20 +43,20 @@ public class SheepController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/SilverfishController.java b/src/main/java/net/citizensnpcs/npc/entity/SilverfishController.java index b0f371f7a..83f9502c3 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SilverfishController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/SilverfishController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntitySilverfish; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntitySilverfish; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftSilverfish; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftSilverfish; import org.bukkit.entity.Silverfish; import org.bukkit.util.Vector; @@ -43,22 +43,22 @@ public class SilverfishController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void bq() { + public void bh() { if (npc == null) { - super.bq(); + super.bh(); } else { NMS.updateAI(this); npc.update(); @@ -66,7 +66,7 @@ public class SilverfishController extends MobEntityController { } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/SkeletonController.java b/src/main/java/net/citizensnpcs/npc/entity/SkeletonController.java index b4ab52c67..d0bf50862 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SkeletonController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/SkeletonController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntitySkeleton; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntitySkeleton; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftSkeleton; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftSkeleton; import org.bukkit.entity.Skeleton; import org.bukkit.util.Vector; @@ -42,20 +42,20 @@ public class SkeletonController extends MobEntityController { } } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + } + */ @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } - - @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/SlimeController.java b/src/main/java/net/citizensnpcs/npc/entity/SlimeController.java index bef76317b..d6806c30f 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SlimeController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/SlimeController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntitySlime; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntitySlime; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftSlime; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftSlime; import org.bukkit.entity.Slime; import org.bukkit.util.Vector; @@ -44,22 +44,22 @@ public class SlimeController extends MobEntityController { } } - @Override + /*@Override public float bE() { return NMS.modifiedSpeed(super.bE(), npc); - } + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void bq() { + public void bh() { if (npc == null) { - super.bq(); + super.bh(); } else { npc.update(); NMS.updateAI(this); @@ -67,7 +67,7 @@ public class SlimeController extends MobEntityController { } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/SnowmanController.java b/src/main/java/net/citizensnpcs/npc/entity/SnowmanController.java index 4edd2a551..08539b8bd 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SnowmanController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/SnowmanController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntitySnowman; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntitySnowman; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftSnowman; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftSnowman; import org.bukkit.entity.Snowman; import org.bukkit.util.Vector; @@ -42,20 +42,20 @@ public class SnowmanController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/SpiderController.java b/src/main/java/net/citizensnpcs/npc/entity/SpiderController.java index 52749e361..45c118624 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SpiderController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/SpiderController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntitySpider; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntitySpider; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftSpider; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftSpider; import org.bukkit.entity.Spider; import org.bukkit.util.Vector; @@ -42,22 +42,22 @@ public class SpiderController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void bq() { + public void bh() { if (npc == null) - super.bq(); + super.bh(); else { NMS.updateAI(this); npc.update(); @@ -65,7 +65,7 @@ public class SpiderController extends MobEntityController { } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/SquidController.java b/src/main/java/net/citizensnpcs/npc/entity/SquidController.java index 60131f7b1..358567192 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/SquidController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/SquidController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntitySquid; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntitySquid; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftSquid; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftSquid; import org.bukkit.entity.Squid; import org.bukkit.util.Vector; @@ -42,21 +42,21 @@ public class SquidController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bq() { + public void bh() { if (npc != null) { npc.update(); } else - super.bq(); + super.bh(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/VillagerController.java b/src/main/java/net/citizensnpcs/npc/entity/VillagerController.java index 67245e84a..137107bf6 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/VillagerController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/VillagerController.java @@ -7,14 +7,14 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityHuman; -import net.minecraft.server.v1_5_R3.EntityVillager; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityHuman; +import net.minecraft.server.v1_6_R1.EntityVillager; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftVillager; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftVillager; import org.bukkit.entity.Villager; import org.bukkit.util.Vector; @@ -45,25 +45,25 @@ public class VillagerController extends MobEntityController { } @Override - public boolean a_(EntityHuman entityhuman) { - return npc == null || !blockTrades ? super.a_(entityhuman) : false; // block - // trades + public boolean a(EntityHuman entityhuman) { + return npc == null || !blockTrades ? super.a(entityhuman) : false; // block + // trades } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/WitchController.java b/src/main/java/net/citizensnpcs/npc/entity/WitchController.java index 11e597f89..4694e5843 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/WitchController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/WitchController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityWitch; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityWitch; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftWitch; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftWitch; import org.bukkit.entity.Witch; import org.bukkit.util.Vector; @@ -43,19 +43,19 @@ public class WitchController extends MobEntityController { } @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } - - @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ + @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/WitherController.java b/src/main/java/net/citizensnpcs/npc/entity/WitherController.java index 69a9dfdae..d422c2526 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/WitherController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/WitherController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityWither; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityWither; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftWither; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftWither; import org.bukkit.entity.Wither; import org.bukkit.util.Vector; @@ -42,14 +42,14 @@ public class WitherController extends MobEntityController { } } - @Override + /*@Override public float bE() { return NMS.modifiedSpeed(super.bE(), npc); - } + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @@ -61,7 +61,7 @@ public class WitherController extends MobEntityController { } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/WolfController.java b/src/main/java/net/citizensnpcs/npc/entity/WolfController.java index 3ac477978..7f2c18f47 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/WolfController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/WolfController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityWolf; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityWolf; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftWolf; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftWolf; import org.bukkit.entity.Wolf; import org.bukkit.util.Vector; @@ -42,20 +42,20 @@ public class WolfController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/ZombieController.java b/src/main/java/net/citizensnpcs/npc/entity/ZombieController.java index 587b26655..540795c21 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/ZombieController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/ZombieController.java @@ -7,13 +7,13 @@ import net.citizensnpcs.npc.MobEntityController; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityZombie; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.EntityZombie; +import net.minecraft.server.v1_6_R1.World; import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftZombie; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftZombie; import org.bukkit.entity.Zombie; import org.bukkit.util.Vector; @@ -42,20 +42,20 @@ public class ZombieController extends MobEntityController { } } - @Override - public float bE() { - return NMS.modifiedSpeed(super.bE(), npc); - } + /* @Override + public float bE() { + return NMS.modifiedSpeed(super.bE(), npc); + }*/ @Override - public void bo() { - super.bo(); + public void be() { + super.be(); if (npc != null) npc.update(); } @Override - public void collide(net.minecraft.server.v1_5_R3.Entity entity) { + public void collide(net.minecraft.server.v1_6_R1.Entity entity) { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); diff --git a/src/main/java/net/citizensnpcs/npc/network/EmptyNetHandler.java b/src/main/java/net/citizensnpcs/npc/network/EmptyNetHandler.java index 981f82c55..77a2675f3 100644 --- a/src/main/java/net/citizensnpcs/npc/network/EmptyNetHandler.java +++ b/src/main/java/net/citizensnpcs/npc/network/EmptyNetHandler.java @@ -1,21 +1,21 @@ package net.citizensnpcs.npc.network; -import net.minecraft.server.v1_5_R3.EntityPlayer; -import net.minecraft.server.v1_5_R3.MinecraftServer; -import net.minecraft.server.v1_5_R3.NetworkManager; -import net.minecraft.server.v1_5_R3.Packet; -import net.minecraft.server.v1_5_R3.Packet102WindowClick; -import net.minecraft.server.v1_5_R3.Packet106Transaction; -import net.minecraft.server.v1_5_R3.Packet10Flying; -import net.minecraft.server.v1_5_R3.Packet130UpdateSign; -import net.minecraft.server.v1_5_R3.Packet14BlockDig; -import net.minecraft.server.v1_5_R3.Packet15Place; -import net.minecraft.server.v1_5_R3.Packet16BlockItemSwitch; -import net.minecraft.server.v1_5_R3.Packet255KickDisconnect; -import net.minecraft.server.v1_5_R3.Packet28EntityVelocity; -import net.minecraft.server.v1_5_R3.Packet3Chat; -import net.minecraft.server.v1_5_R3.Packet51MapChunk; -import net.minecraft.server.v1_5_R3.PlayerConnection; +import net.minecraft.server.v1_6_R1.EntityPlayer; +import net.minecraft.server.v1_6_R1.MinecraftServer; +import net.minecraft.server.v1_6_R1.NetworkManager; +import net.minecraft.server.v1_6_R1.Packet; +import net.minecraft.server.v1_6_R1.Packet102WindowClick; +import net.minecraft.server.v1_6_R1.Packet106Transaction; +import net.minecraft.server.v1_6_R1.Packet10Flying; +import net.minecraft.server.v1_6_R1.Packet130UpdateSign; +import net.minecraft.server.v1_6_R1.Packet14BlockDig; +import net.minecraft.server.v1_6_R1.Packet15Place; +import net.minecraft.server.v1_6_R1.Packet16BlockItemSwitch; +import net.minecraft.server.v1_6_R1.Packet255KickDisconnect; +import net.minecraft.server.v1_6_R1.Packet28EntityVelocity; +import net.minecraft.server.v1_6_R1.Packet3Chat; +import net.minecraft.server.v1_6_R1.Packet51MapChunk; +import net.minecraft.server.v1_6_R1.PlayerConnection; public class EmptyNetHandler extends PlayerConnection { public EmptyNetHandler(MinecraftServer minecraftServer, NetworkManager networkManager, EntityPlayer entityPlayer) { diff --git a/src/main/java/net/citizensnpcs/npc/network/EmptyNetworkManager.java b/src/main/java/net/citizensnpcs/npc/network/EmptyNetworkManager.java index f98fcf514..7d4ecbfdb 100644 --- a/src/main/java/net/citizensnpcs/npc/network/EmptyNetworkManager.java +++ b/src/main/java/net/citizensnpcs/npc/network/EmptyNetworkManager.java @@ -5,10 +5,10 @@ import java.net.Socket; import java.security.PrivateKey; import net.citizensnpcs.util.NMS; -import net.minecraft.server.v1_5_R3.Connection; -import net.minecraft.server.v1_5_R3.IConsoleLogManager; -import net.minecraft.server.v1_5_R3.NetworkManager; -import net.minecraft.server.v1_5_R3.Packet; +import net.minecraft.server.v1_6_R1.Connection; +import net.minecraft.server.v1_6_R1.IConsoleLogManager; +import net.minecraft.server.v1_6_R1.NetworkManager; +import net.minecraft.server.v1_6_R1.Packet; public class EmptyNetworkManager extends NetworkManager { public EmptyNetworkManager(IConsoleLogManager logManager, Socket socket, String string, Connection conn, diff --git a/src/main/java/net/citizensnpcs/trait/Controllable.java b/src/main/java/net/citizensnpcs/trait/Controllable.java index e61ac6ec5..08f95708c 100644 --- a/src/main/java/net/citizensnpcs/trait/Controllable.java +++ b/src/main/java/net/citizensnpcs/trait/Controllable.java @@ -14,12 +14,12 @@ import net.citizensnpcs.api.trait.trait.Owner; import net.citizensnpcs.api.util.DataKey; import net.citizensnpcs.util.NMS; import net.citizensnpcs.util.Util; -import net.minecraft.server.v1_5_R3.EntityEnderDragon; -import net.minecraft.server.v1_5_R3.EntityLiving; -import net.minecraft.server.v1_5_R3.EntityPlayer; +import net.minecraft.server.v1_6_R1.EntityEnderDragon; +import net.minecraft.server.v1_6_R1.EntityLiving; +import net.minecraft.server.v1_6_R1.EntityPlayer; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftLivingEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -226,6 +226,8 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab } public class GroundController implements MovementController { + private double speed = 0.07D; + private void jump() { boolean allowed = getHandle().onGround; if (!allowed) @@ -253,9 +255,36 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab boolean onGround = handle.onGround; float speedMod = npc.getNavigator().getDefaultParameters() .modifiedSpeed((onGround ? GROUND_SPEED : AIR_SPEED)); + + updateSpeed(handle, speedMod); + setMountedYaw(handle); + } + + private void updateSpeed(EntityLiving handle, float speedMod) { + double oldSpeed = Math.sqrt(handle.motX * handle.motX + handle.motZ * handle.motZ); + double horizontal = ((EntityLiving) handle.passenger).bf; + if (horizontal > 0.0D) { + double dXcos = -Math.sin(handle.passenger.yaw * Math.PI / 180.0F); + double dXsin = Math.cos(handle.passenger.yaw * Math.PI / 180.0F); + handle.motX += dXcos * this.speed * 0.05; + handle.motZ += dXsin * this.speed * 0.05; + } handle.motX += handle.passenger.motX * speedMod; handle.motZ += handle.passenger.motZ * speedMod; - setMountedYaw(handle); + + double newSpeed = Math.sqrt(handle.motX * handle.motX + handle.motZ * handle.motZ); + if (newSpeed > 0.35D) { + double movementFactor = 0.35D / newSpeed; + handle.motX *= movementFactor; + handle.motZ *= movementFactor; + newSpeed = 0.35D; + } + + if (newSpeed > oldSpeed && this.speed < 0.35D) { + this.speed = Math.min(0.35D, (this.speed + ((0.35D - this.speed) / 35.0D))); + } else { + this.speed = Math.max(0.07D, (this.speed - ((this.speed - 0.07D) / 35.0D))); + } } private static final float AIR_SPEED = 1.5F; diff --git a/src/main/java/net/citizensnpcs/trait/waypoint/EntityEnderCrystalMarker.java b/src/main/java/net/citizensnpcs/trait/waypoint/EntityEnderCrystalMarker.java index 57968f407..991346931 100644 --- a/src/main/java/net/citizensnpcs/trait/waypoint/EntityEnderCrystalMarker.java +++ b/src/main/java/net/citizensnpcs/trait/waypoint/EntityEnderCrystalMarker.java @@ -1,8 +1,8 @@ package net.citizensnpcs.trait.waypoint; -import net.minecraft.server.v1_5_R3.DamageSource; -import net.minecraft.server.v1_5_R3.EntityEnderCrystal; -import net.minecraft.server.v1_5_R3.World; +import net.minecraft.server.v1_6_R1.DamageSource; +import net.minecraft.server.v1_6_R1.EntityEnderCrystal; +import net.minecraft.server.v1_6_R1.World; public class EntityEnderCrystalMarker extends EntityEnderCrystal { public EntityEnderCrystalMarker(World world) { @@ -10,16 +10,16 @@ public class EntityEnderCrystalMarker extends EntityEnderCrystal { } @Override - public boolean damageEntity(DamageSource damagesource, int i) { + public boolean damageEntity(DamageSource damagesource, float i) { return false; } - @Override - public void l_() { - } - @Override public boolean K() { return false; } + + @Override + public void l_() { + } } diff --git a/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java b/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java index 3398700a8..9ca76ac10 100644 --- a/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java +++ b/src/main/java/net/citizensnpcs/trait/waypoint/LinearWaypointProvider.java @@ -382,8 +382,9 @@ public class LinearWaypointProvider implements WaypointProvider { public void onProviderChanged() { itr = waypoints.iterator(); - if (currentDestination != null) + if (currentDestination != null) { selector.finish(); + } } @Override @@ -394,13 +395,15 @@ public class LinearWaypointProvider implements WaypointProvider { @Override public void run(GoalSelector selector) { - if (!getNavigator().isNavigating()) + if (!getNavigator().isNavigating()) { selector.finish(); + } } public void setPaused(boolean pause) { - if (pause && currentDestination != null) + if (pause && currentDestination != null) { selector.finish(); + } paused = pause; } @@ -417,7 +420,9 @@ public class LinearWaypointProvider implements WaypointProvider { this.selector = selector; Waypoint next = itr.next(); Location npcLoc = npc.getBukkitEntity().getLocation(cachedLocation); - if (npcLoc.getWorld() != next.getLocation().getWorld() || npcLoc.distanceSquared(next.getLocation()) < 3) { + if (npcLoc.getWorld() != next.getLocation().getWorld() + || npcLoc.distanceSquared(next.getLocation()) < npc.getNavigator().getLocalParameters() + .distanceMargin()) { return false; } currentDestination = next; diff --git a/src/main/java/net/citizensnpcs/util/ByIdArray.java b/src/main/java/net/citizensnpcs/util/ByIdArray.java index 515561466..bf8d03cdb 100644 --- a/src/main/java/net/citizensnpcs/util/ByIdArray.java +++ b/src/main/java/net/citizensnpcs/util/ByIdArray.java @@ -134,9 +134,9 @@ public class ByIdArray implements Iterable { private int idx; { if (size > 0) { - if (highest == Integer.MIN_VALUE || elementData[highest] == null) + if (highest == Integer.MIN_VALUE || highest >= elementData.length || elementData[highest] == null) recalcHighest(); - if (lowest == Integer.MAX_VALUE || elementData[lowest] == null) + if (lowest >= elementData.length || elementData[lowest] == null) recalcLowest(); idx = lowest - 1; } diff --git a/src/main/java/net/citizensnpcs/util/NMS.java b/src/main/java/net/citizensnpcs/util/NMS.java index 14f4371b8..c61516465 100644 --- a/src/main/java/net/citizensnpcs/util/NMS.java +++ b/src/main/java/net/citizensnpcs/util/NMS.java @@ -11,31 +11,33 @@ import java.util.WeakHashMap; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.util.Messaging; -import net.minecraft.server.v1_5_R3.ControllerJump; -import net.minecraft.server.v1_5_R3.DamageSource; -import net.minecraft.server.v1_5_R3.EnchantmentManager; -import net.minecraft.server.v1_5_R3.Entity; -import net.minecraft.server.v1_5_R3.EntityHuman; -import net.minecraft.server.v1_5_R3.EntityLiving; -import net.minecraft.server.v1_5_R3.EntityMonster; -import net.minecraft.server.v1_5_R3.EntityPlayer; -import net.minecraft.server.v1_5_R3.EntityTypes; -import net.minecraft.server.v1_5_R3.MathHelper; -import net.minecraft.server.v1_5_R3.MobEffectList; -import net.minecraft.server.v1_5_R3.Navigation; -import net.minecraft.server.v1_5_R3.NetworkManager; -import net.minecraft.server.v1_5_R3.Packet; -import net.minecraft.server.v1_5_R3.PathfinderGoalSelector; -import net.minecraft.server.v1_5_R3.World; +import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.minecraft.server.v1_6_R1.ControllerJump; +import net.minecraft.server.v1_6_R1.DamageSource; +import net.minecraft.server.v1_6_R1.EnchantmentManager; +import net.minecraft.server.v1_6_R1.Entity; +import net.minecraft.server.v1_6_R1.EntityHuman; +import net.minecraft.server.v1_6_R1.EntityInsentient; +import net.minecraft.server.v1_6_R1.EntityLiving; +import net.minecraft.server.v1_6_R1.EntityPlayer; +import net.minecraft.server.v1_6_R1.EntityTypes; +import net.minecraft.server.v1_6_R1.GenericAttributes; +import net.minecraft.server.v1_6_R1.MathHelper; +import net.minecraft.server.v1_6_R1.MobEffectList; +import net.minecraft.server.v1_6_R1.Navigation; +import net.minecraft.server.v1_6_R1.NetworkManager; +import net.minecraft.server.v1_6_R1.Packet; +import net.minecraft.server.v1_6_R1.PathfinderGoalSelector; +import net.minecraft.server.v1_6_R1.World; import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_5_R3.CraftServer; -import org.bukkit.craftbukkit.v1_5_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftLivingEntity; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_6_R1.CraftServer; +import org.bukkit.craftbukkit.v1_6_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -49,20 +51,6 @@ public class NMS { // util class } - private static final float DEFAULT_SPEED = 0.4F; - private static Map, Integer> ENTITY_CLASS_TO_INT; - private static final Map, Constructor> ENTITY_CONSTRUCTOR_CACHE = new WeakHashMap, Constructor>(); - private static Map> ENTITY_INT_TO_CLASS; - private static Field GOAL_FIELD; - private static Field LAND_SPEED_MODIFIER_FIELD; - private static final Map MOVEMENT_SPEEDS = Maps.newEnumMap(EntityType.class); - private static Field NAVIGATION_WORLD_FIELD; - private static final Location packetCacheLocation = new Location(null, 0, 0, 0); - private static Field PATHFINDING_RANGE; - private static final Random RANDOM = Util.getFastRandom(); - private static Field SPEED_FIELD; - private static Field THREAD_STOPPER; - public static void addOrRemoveFromPlayerList(LivingEntity bukkitEntity, boolean remove) { if (bukkitEntity == null) return; @@ -77,7 +65,7 @@ public class NMS { } public static void attack(EntityLiving handle, Entity target) { - int damage = handle instanceof EntityMonster ? ((EntityMonster) handle).c(target) : 2; + float damage = (float) handle.a(GenericAttributes.e).e(); if (handle.hasEffect(MobEffectList.INCREASE_DAMAGE)) { damage += 3 << handle.getEffect(MobEffectList.INCREASE_DAMAGE).getAmplifier(); @@ -179,12 +167,20 @@ public class NMS { return mcEntity.G() || mcEntity.I(); } + public static boolean isSentient(LivingEntity entity) { + return !(((CraftLivingEntity) entity).getHandle() instanceof EntityInsentient); + } + public static void loadPlugins() { ((CraftServer) Bukkit.getServer()).enablePlugins(PluginLoadOrder.POSTWORLD); } public static void look(EntityLiving handle, Entity target) { - handle.getControllerLook().a(target, 10.0F, handle.bs()); + if (handle instanceof EntityInsentient) { + ((EntityInsentient) handle).getControllerLook().a(target, 10.0F, ((EntityInsentient) handle).bl()); + } else if (handle instanceof EntityHumanNPC) { + ((EntityHumanNPC) handle).setTargetLook(target, 10F, 40); + } } public static void look(LivingEntity bukkitEntity, float yaw, float pitch) { @@ -237,7 +233,7 @@ public class NMS { if (ply == null || world != ply.getWorld()) { continue; } - if (location.distanceSquared(ply.getLocation(packetCacheLocation)) > radius) { + if (location.distanceSquared(ply.getLocation(PACKET_CACHE_LOCATION)) > radius) { continue; } for (Packet packet : packets) { @@ -262,7 +258,12 @@ public class NMS { } public static void setDestination(LivingEntity bukkitEntity, double x, double y, double z, float speed) { - ((CraftLivingEntity) bukkitEntity).getHandle().getControllerMove().a(x, y, z, speed); + EntityLiving handle = ((CraftLivingEntity) bukkitEntity).getHandle(); + if (handle instanceof EntityInsentient) { + ((EntityInsentient) handle).getControllerMove().a(x, y, z, speed); + } else if (handle instanceof EntityHumanNPC) { + ((EntityHumanNPC) handle).setMoveDestination(x, y, z, speed); + } } public static void setHeadYaw(EntityLiving handle, float yaw) { @@ -273,10 +274,10 @@ public class NMS { while (yaw >= 180.0F) { yaw -= 360.0F; } - handle.aA = yaw; + handle.aP = yaw; if (!(handle instanceof EntityHuman)) - handle.ay = yaw; - handle.aB = yaw; + handle.aN = yaw; + handle.aQ = yaw; } public static void setLandSpeedModifier(EntityLiving handle, float speed) { @@ -290,8 +291,13 @@ public class NMS { } public static void setShouldJump(LivingEntity entity) { - ControllerJump controller = getHandle(entity).getControllerJump(); - controller.a(); + EntityLiving handle = getHandle(entity); + if (handle instanceof EntityInsentient) { + ControllerJump controller = ((EntityInsentient) handle).getControllerJump(); + controller.a(); + } else if (handle instanceof EntityHumanNPC) { + ((EntityHumanNPC) handle).setShouldJump(); + } } public static org.bukkit.entity.Entity spawnCustomEntity(org.bukkit.World world, Location at, @@ -332,17 +338,25 @@ public class NMS { } public static void updateAI(EntityLiving entity) { - updateSenses(entity); - entity.getNavigation().e(); - entity.getControllerMove().c(); - entity.getControllerLook().a(); - entity.getControllerJump().b(); + if (entity instanceof EntityInsentient) { + EntityInsentient handle = (EntityInsentient) entity; + handle.getEntitySenses().a(); + handle.getNavigation().e(); + handle.getControllerMove().c(); + handle.getControllerLook().a(); + handle.getControllerJump().b(); + } else if (entity instanceof EntityHumanNPC) { + ((EntityHumanNPC) entity).updateAI(); + } } public static void updateNavigationWorld(LivingEntity entity, org.bukkit.World world) { if (NAVIGATION_WORLD_FIELD == null) return; - EntityLiving handle = ((CraftLivingEntity) entity).getHandle(); + EntityLiving en = ((CraftLivingEntity) entity).getHandle(); + if (!(en instanceof EntityInsentient)) + return; + EntityInsentient handle = (EntityInsentient) en; World worldHandle = ((CraftWorld) world).getHandle(); try { NAVIGATION_WORLD_FIELD.set(handle.getNavigation(), worldHandle); @@ -352,9 +366,13 @@ public class NMS { } public static void updatePathfindingRange(NPC npc, float pathfindingRange) { - if (PATHFINDING_RANGE == null) + if (PATHFINDING_RANGE == null || !npc.isSpawned()) return; - Navigation navigation = ((CraftLivingEntity) npc.getBukkitEntity()).getHandle().getNavigation(); + EntityLiving en = ((CraftLivingEntity) npc.getBukkitEntity()).getHandle(); + if (!(en instanceof EntityInsentient)) + return; + EntityInsentient handle = (EntityInsentient) en; + Navigation navigation = handle.getNavigation(); try { PATHFINDING_RANGE.set(navigation, pathfindingRange); } catch (Exception e) { @@ -362,31 +380,43 @@ public class NMS { } } - public static void updateSenses(EntityLiving entity) { - entity.getEntitySenses().a(); - } + private static final float DEFAULT_SPEED = 1F; + private static Map, Integer> ENTITY_CLASS_TO_INT; + private static final Map, Constructor> ENTITY_CONSTRUCTOR_CACHE = new WeakHashMap, Constructor>(); + private static Map> ENTITY_INT_TO_CLASS; + private static Field GOAL_FIELD; + private static Field LAND_SPEED_MODIFIER_FIELD; + private static final Map MOVEMENT_SPEEDS = Maps.newEnumMap(EntityType.class); + private static Field NAVIGATION_WORLD_FIELD; + private static final Location PACKET_CACHE_LOCATION = new Location(null, 0, 0, 0); + private static Field PATHFINDING_RANGE; + private static final Random RANDOM = Util.getFastRandom(); + private static Field SPEED_FIELD; + + private static Field THREAD_STOPPER; static { + // TODO: speed fields are all wrong - need to use attributes + // true field above false and three synchronised lists THREAD_STOPPER = getField(NetworkManager.class, "n"); // constants taken from source code - MOVEMENT_SPEEDS.put(EntityType.CHICKEN, 0.25F); - MOVEMENT_SPEEDS.put(EntityType.COW, 0.2F); - MOVEMENT_SPEEDS.put(EntityType.CREEPER, 0.3F); - MOVEMENT_SPEEDS.put(EntityType.IRON_GOLEM, 0.15F); - MOVEMENT_SPEEDS.put(EntityType.MUSHROOM_COW, 0.2F); - MOVEMENT_SPEEDS.put(EntityType.OCELOT, 0.23F); - MOVEMENT_SPEEDS.put(EntityType.SHEEP, 0.25F); - MOVEMENT_SPEEDS.put(EntityType.SNOWMAN, 0.25F); - MOVEMENT_SPEEDS.put(EntityType.PIG, 0.27F); + MOVEMENT_SPEEDS.put(EntityType.CHICKEN, 1F); + MOVEMENT_SPEEDS.put(EntityType.COW, 1F); + MOVEMENT_SPEEDS.put(EntityType.CREEPER, 1F); + MOVEMENT_SPEEDS.put(EntityType.IRON_GOLEM, 1F); + MOVEMENT_SPEEDS.put(EntityType.MUSHROOM_COW, 1F); + MOVEMENT_SPEEDS.put(EntityType.OCELOT, 1F); + MOVEMENT_SPEEDS.put(EntityType.SHEEP, 1F); + MOVEMENT_SPEEDS.put(EntityType.SNOWMAN, 1F); + MOVEMENT_SPEEDS.put(EntityType.PIG, 1F); MOVEMENT_SPEEDS.put(EntityType.PLAYER, 1F); - MOVEMENT_SPEEDS.put(EntityType.VILLAGER, 0.3F); - - LAND_SPEED_MODIFIER_FIELD = getField(EntityLiving.class, "bQ"); + MOVEMENT_SPEEDS.put(EntityType.VILLAGER, 1F); + LAND_SPEED_MODIFIER_FIELD = getField(EntityLiving.class, "bs"); SPEED_FIELD = getField(EntityLiving.class, "bI"); NAVIGATION_WORLD_FIELD = getField(Navigation.class, "b"); - PATHFINDING_RANGE = getField(Navigation.class, "e"); + PATHFINDING_RANGE = getField(Navigation.class, "d"); GOAL_FIELD = getField(PathfinderGoalSelector.class, "a"); try { diff --git a/src/main/java/net/citizensnpcs/util/PlayerAnimation.java b/src/main/java/net/citizensnpcs/util/PlayerAnimation.java index e216d50c5..07d4ef97e 100644 --- a/src/main/java/net/citizensnpcs/util/PlayerAnimation.java +++ b/src/main/java/net/citizensnpcs/util/PlayerAnimation.java @@ -2,13 +2,13 @@ package net.citizensnpcs.util; import java.util.Arrays; -import net.minecraft.server.v1_5_R3.EntityPlayer; -import net.minecraft.server.v1_5_R3.Packet; -import net.minecraft.server.v1_5_R3.Packet17EntityLocationAction; -import net.minecraft.server.v1_5_R3.Packet18ArmAnimation; -import net.minecraft.server.v1_5_R3.Packet40EntityMetadata; +import net.minecraft.server.v1_6_R1.EntityPlayer; +import net.minecraft.server.v1_6_R1.Packet; +import net.minecraft.server.v1_6_R1.Packet17EntityLocationAction; +import net.minecraft.server.v1_6_R1.Packet18ArmAnimation; +import net.minecraft.server.v1_6_R1.Packet40EntityMetadata; -import org.bukkit.craftbukkit.v1_5_R3.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer; import org.bukkit.entity.Player; public enum PlayerAnimation { diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerControllerJump.java b/src/main/java/net/citizensnpcs/util/nms/PlayerControllerJump.java new file mode 100644 index 000000000..7b11dcbb4 --- /dev/null +++ b/src/main/java/net/citizensnpcs/util/nms/PlayerControllerJump.java @@ -0,0 +1,21 @@ +package net.citizensnpcs.util.nms; + +import net.citizensnpcs.npc.entity.EntityHumanNPC; + +public class PlayerControllerJump { + private final EntityHumanNPC a; + private boolean b; + + public PlayerControllerJump(EntityHumanNPC entityinsentient) { + this.a = entityinsentient; + } + + public void a() { + this.b = true; + } + + public void b() { + this.a.f(this.b); + this.b = false; + } +} diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerControllerLook.java b/src/main/java/net/citizensnpcs/util/nms/PlayerControllerLook.java new file mode 100644 index 000000000..c9f004061 --- /dev/null +++ b/src/main/java/net/citizensnpcs/util/nms/PlayerControllerLook.java @@ -0,0 +1,87 @@ +package net.citizensnpcs.util.nms; + +import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.minecraft.server.v1_6_R1.Entity; +import net.minecraft.server.v1_6_R1.EntityLiving; +import net.minecraft.server.v1_6_R1.MathHelper; + +public class PlayerControllerLook { + private final EntityHumanNPC a; + private float b; + private float c; + private boolean d; + private double e; + private double f; + private double g; + + public PlayerControllerLook(EntityHumanNPC entityinsentient) { + this.a = entityinsentient; + } + + public void a() { + this.a.pitch = 0.0F; + if (this.d) { + this.d = false; + double d0 = this.e - this.a.locX; + double d1 = this.f - (this.a.locY + this.a.getHeadHeight()); + double d2 = this.g - this.a.locZ; + double d3 = Math.sqrt(d0 * d0 + d2 * d2); + float f = (float) (Math.atan2(d2, d0) * 180.0D / 3.1415927410125732D) - 90.0F; + float f1 = (float) (-(Math.atan2(d1, d3) * 180.0D / 3.1415927410125732D)); + + this.a.pitch = this.a(this.a.pitch, f1, this.c); + this.a.aP = this.a(this.a.aP, f, this.b); + } else { + this.a.aP = this.a(this.a.aP, this.a.aN, 10.0F); + } + + float f2 = MathHelper.g(this.a.aP - this.a.aN); + + if (!this.a.isNavigating()) { + if (f2 < -75.0F) { + this.a.aP = this.a.aN - 75.0F; + } + + if (f2 > 75.0F) { + this.a.aP = this.a.aN + 75.0F; + } + } + } + + public void a(double d0, double d1, double d2, float f, float f1) { + this.e = d0; + this.f = d1; + this.g = d2; + this.b = f; + this.c = f1; + this.d = true; + } + + public void a(Entity entity, float f, float f1) { + this.e = entity.locX; + if (entity instanceof EntityLiving) { + this.f = entity.locY + entity.getHeadHeight(); + } else { + this.f = (entity.boundingBox.b + entity.boundingBox.e) / 2.0D; + } + + this.g = entity.locZ; + this.b = f; + this.c = f1; + this.d = true; + } + + private float a(float f, float f1, float f2) { + float f3 = MathHelper.g(f1 - f); + + if (f3 > f2) { + f3 = f2; + } + + if (f3 < -f2) { + f3 = -f2; + } + + return f + f3; + } +} diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerControllerMove.java b/src/main/java/net/citizensnpcs/util/nms/PlayerControllerMove.java new file mode 100644 index 000000000..14dfb2e89 --- /dev/null +++ b/src/main/java/net/citizensnpcs/util/nms/PlayerControllerMove.java @@ -0,0 +1,77 @@ +package net.citizensnpcs.util.nms; + +import net.citizensnpcs.npc.entity.EntityHumanNPC; +import net.citizensnpcs.util.NMS; +import net.minecraft.server.v1_6_R1.GenericAttributes; +import net.minecraft.server.v1_6_R1.MathHelper; + +public class PlayerControllerMove { + private final EntityHumanNPC a; + private double b; + private double c; + private double d; + private double e; + private boolean f; + + public PlayerControllerMove(EntityHumanNPC entityinsentient) { + this.a = entityinsentient; + this.b = entityinsentient.locX; + this.c = entityinsentient.locY; + this.d = entityinsentient.locZ; + } + + public boolean a() { + return this.f; + } + + public void a(double d0, double d1, double d2, double d3) { + this.b = d0; + this.c = d1; + this.d = d2; + this.e = d3; + this.f = true; + } + + private float a(float f, float f1, float f2) { + float f3 = MathHelper.g(f1 - f); + + if (f3 > f2) { + f3 = f2; + } + + if (f3 < -f2) { + f3 = -f2; + } + + return f + f3; + } + + public double b() { + return this.e; + } + + public void c() { + this.a.bf = 0F; + if (this.f) { + this.f = false; + int i = MathHelper.floor(this.a.boundingBox.b + 0.5D); + double d0 = this.b - this.a.locX; + double d1 = this.d - this.a.locZ; + double d2 = this.c - i; + double d3 = d0 * d0 + d2 * d2 + d1 * d1; + + if (d3 >= 2.500000277905201E-7D) { + float f = (float) (Math.atan2(d1, d0) * 180.0D / 3.1415927410125732D) - 90.0F; + + this.a.yaw = this.a(this.a.yaw, f, 30.0F); + NMS.setHeadYaw(a, this.a.yaw); + float movement = (float) (this.e * this.a.a(GenericAttributes.d).e()) * 10; + this.a.i(movement); + this.a.bf = movement; + if (d2 > 0.0D && d0 * d0 + d1 * d1 < 1.0D) { + this.a.getControllerJump().a(); + } + } + } + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/v1_6_R1/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/v1_6_R1/entity/CraftEntity.java new file mode 100644 index 000000000..92c5715b0 --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/v1_6_R1/entity/CraftEntity.java @@ -0,0 +1,9 @@ +package org.bukkit.craftbukkit.v1_6_R1.entity; + +import org.bukkit.entity.Entity; + +public abstract class CraftEntity implements Entity { + public net.minecraft.server.v1_6_R1.Entity getHandle() { + return null; + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/v1_6_R1/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/v1_6_R1/entity/CraftLivingEntity.java new file mode 100644 index 000000000..c771b5051 --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/v1_6_R1/entity/CraftLivingEntity.java @@ -0,0 +1,497 @@ +package org.bukkit.craftbukkit.v1_6_R1.entity; + +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.UUID; + +import net.minecraft.server.v1_6_R1.EntityLiving; + +import org.bukkit.EntityEffect; +import org.bukkit.Location; +import org.bukkit.Server; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Egg; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.Snowball; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; +import org.bukkit.inventory.EntityEquipment; +import org.bukkit.metadata.MetadataValue; +import org.bukkit.plugin.Plugin; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.NumberConversions; +import org.bukkit.util.Vector; + +public class CraftLivingEntity extends CraftEntity implements LivingEntity { + @Deprecated + public void _INVALID_damage(int amount) { + damage(amount); + } + + @Deprecated + public void _INVALID_damage(int amount, Entity source) { + damage(amount, source); + } + + @Deprecated + public int _INVALID_getHealth() { + return NumberConversions.ceil(getHealth()); + } + + @Deprecated + public int _INVALID_getLastDamage() { + return NumberConversions.ceil(getLastDamage()); + } + + @Deprecated + public int _INVALID_getMaxHealth() { + return NumberConversions.ceil(getMaxHealth()); + } + + @Deprecated + public void _INVALID_setHealth(int health) { + setHealth(health); + } + + @Deprecated + public void _INVALID_setLastDamage(int damage) { + setLastDamage(damage); + } + + @Deprecated + public void _INVALID_setMaxHealth(int health) { + setMaxHealth(health); + } + + + public boolean addPotionEffect(PotionEffect effect) { + return false; + } + + + public boolean addPotionEffect(PotionEffect effect, boolean force) { + return false; + } + + + public boolean addPotionEffects(Collection effects) { + return false; + } + + + public void damage(double amount) { + } + + + public void damage(double amount, Entity source) { + } + + + @Deprecated + public void damage(int arg0) { + } + + + @Deprecated + public void damage(int arg0, Entity arg1) { + } + + + public boolean eject() { + return false; + } + + + public Collection getActivePotionEffects() { + return null; + } + + + public boolean getCanPickupItems() { + return false; + } + + + public String getCustomName() { + return null; + } + + + public int getEntityId() { + return 0; + } + + + public EntityEquipment getEquipment() { + return null; + } + + + public double getEyeHeight() { + return 0; + } + + + public double getEyeHeight(boolean ignoreSneaking) { + return 0; + } + + + public Location getEyeLocation() { + return null; + } + + + public float getFallDistance() { + return 0; + } + + + public int getFireTicks() { + return 0; + } + + + public EntityLiving getHandle() { + return null; + } + + + public double getHealth() { + return 0; + } + + + public Player getKiller() { + return null; + } + + + public double getLastDamage() { + return 0; + } + + + public EntityDamageEvent getLastDamageCause() { + return null; + } + + + public List getLastTwoTargetBlocks(HashSet transparent, int maxDistance) { + return null; + } + + + public List getLineOfSight(HashSet transparent, int maxDistance) { + return null; + } + + + public Location getLocation() { + return null; + } + + + public Location getLocation(Location loc) { + return null; + } + + + public int getMaxFireTicks() { + return 0; + } + + + public double getMaxHealth() { + return 0; + } + + + public int getMaximumAir() { + return 0; + } + + + public int getMaximumNoDamageTicks() { + return 0; + } + + + public List getMetadata(String metadataKey) { + return null; + } + + + public List getNearbyEntities(double x, double y, double z) { + return null; + } + + + public int getNoDamageTicks() { + return 0; + } + + + public Entity getPassenger() { + return null; + } + + + public int getRemainingAir() { + return 0; + } + + + public boolean getRemoveWhenFarAway() { + return false; + } + + + public Server getServer() { + return null; + } + + + public Block getTargetBlock(HashSet transparent, int maxDistance) { + return null; + } + + + public int getTicksLived() { + return 0; + } + + + public EntityType getType() { + return null; + } + + + public UUID getUniqueId() { + return null; + } + + + public Entity getVehicle() { + return null; + } + + + public Vector getVelocity() { + return null; + } + + + public World getWorld() { + return null; + } + + + public boolean hasLineOfSight(Entity other) { + return false; + } + + + public boolean hasMetadata(String metadataKey) { + return false; + } + + + public boolean hasPotionEffect(PotionEffectType type) { + return false; + } + + + public boolean isCustomNameVisible() { + return false; + } + + + public boolean isDead() { + return false; + } + + + public boolean isEmpty() { + return false; + } + + + public boolean isInsideVehicle() { + return false; + } + + + public boolean isOnGround() { + return false; + } + + + public boolean isValid() { + return false; + } + + + public T launchProjectile(Class projectile) { + return null; + } + + + public boolean leaveVehicle() { + return false; + } + + + public void playEffect(EntityEffect type) { + } + + + public void remove() { + } + + + public void removeMetadata(String metadataKey, Plugin owningPlugin) { + } + + + public void removePotionEffect(PotionEffectType type) { + } + + + public void resetMaxHealth() { + } + + + public void setCanPickupItems(boolean pickup) { + } + + + public void setCustomName(String name) { + } + + + public void setCustomNameVisible(boolean flag) { + } + + + public void setFallDistance(float distance) { + } + + + public void setFireTicks(int ticks) { + } + + + public void setHealth(double health) { + } + + + @Deprecated + public void setHealth(int arg0) { + } + + + public void setLastDamage(double damage) { + } + + + @Deprecated + public void setLastDamage(int arg0) { + } + + + public void setLastDamageCause(EntityDamageEvent event) { + } + + + public void setMaxHealth(double health) { + } + + + @Deprecated + public void setMaxHealth(int arg0) { + } + + + public void setMaximumAir(int ticks) { + } + + + public void setMaximumNoDamageTicks(int ticks) { + } + + + public void setMetadata(String metadataKey, MetadataValue newMetadataValue) { + } + + + public void setNoDamageTicks(int ticks) { + } + + + public boolean setPassenger(Entity passenger) { + return false; + } + + + public void setRemainingAir(int ticks) { + } + + + public void setRemoveWhenFarAway(boolean remove) { + } + + + public void setTicksLived(int value) { + } + + + public void setVelocity(Vector velocity) { + } + + + @Deprecated + public Arrow shootArrow() { + return null; + } + + + public boolean teleport(Entity destination) { + return false; + } + + + public boolean teleport(Entity destination, TeleportCause cause) { + return false; + } + + + public boolean teleport(Location location) { + return false; + } + + + public boolean teleport(Location location, TeleportCause cause) { + return false; + } + + + @Deprecated + public Egg throwEgg() { + return null; + } + + + @Deprecated + public Snowball throwSnowball() { + return null; + } +} diff --git a/src/main/resources/maps.yml b/src/main/resources/maps.yml new file mode 100644 index 000000000..b5324b0ab --- /dev/null +++ b/src/main/resources/maps.yml @@ -0,0 +1,15 @@ +members: + "org/bukkit/entity/Damageable _INVALID_damage (I)V": damage + "org/bukkit/entity/Damageable _INVALID_damage (ILorg/bukkit/entity/Entity;)V": damage + "org/bukkit/entity/Damageable _INVALID_getHealth ()I": getHealth + "org/bukkit/entity/Damageable _INVALID_setHealth (I)V": setHealth + "org/bukkit/entity/Damageable _INVALID_getMaxHealth ()I": getMaxHealth + "org/bukkit/entity/Damageable _INVALID_setMaxHealth (I)V": setMaxHealth + "org/bukkit/entity/LivingEntity _INVALID_getLastDamage ()I": getLastDamage + "org/bukkit/entity/LivingEntity _INVALID_setLastDamage (I)V": setLastDamage + "org/bukkit/event/entity/EntityDamageEvent _INVALID_getDamage ()I": getDamage + "org/bukkit/event/entity/EntityDamageEvent _INVALID_setDamage (I)V": setDamage + "org/bukkit/event/vehicle/VehicleDamageEvent _INVALID_getDamage ()I": getDamage + "org/bukkit/event/vehicle/VehicleDamageEvent _INVALID_setDamage (I)V": setDamage + "org/bukkit/event/entity/EntityRegainHealthEvent _INVALID_getAmount ()I": getAmount + "org/bukkit/event/entity/EntityRegainHealthEvent _INVALID_setAmount (I)V": setAmount \ No newline at end of file