diff --git a/.classpath b/.classpath
index 5dff9eb..a780b9b 100644
--- a/.classpath
+++ b/.classpath
@@ -11,6 +11,6 @@
-
+
diff --git a/.gitignore b/.gitignore
index fdee606..a790f88 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
/bin/
-/libs/craftbukkit-1.9.2.jar
\ No newline at end of file
+/libs/craftbukkit-1.9.4.jar
\ No newline at end of file
diff --git a/src/net/theprogrammersworld/herobrine/AI/AICore.java b/src/net/theprogrammersworld/herobrine/AI/AICore.java
index 5525249..2297a44 100644
--- a/src/net/theprogrammersworld/herobrine/AI/AICore.java
+++ b/src/net/theprogrammersworld/herobrine/AI/AICore.java
@@ -4,9 +4,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
-import net.minecraft.server.v1_9_R1.EntityPlayer;
-import net.minecraft.server.v1_9_R1.PacketPlayOutPlayerInfo;
-import net.minecraft.server.v1_9_R1.PacketPlayOutPlayerInfo.EnumPlayerInfoAction;
+import net.minecraft.server.v1_9_R2.EntityPlayer;
+import net.minecraft.server.v1_9_R2.PacketPlayOutPlayerInfo;
+import net.minecraft.server.v1_9_R2.PacketPlayOutPlayerInfo.EnumPlayerInfoAction;
import net.theprogrammersworld.herobrine.Herobrine;
import net.theprogrammersworld.herobrine.Util;
import net.theprogrammersworld.herobrine.AI.cores.Attack;
@@ -33,7 +33,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
-import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
+import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
diff --git a/src/net/theprogrammersworld/herobrine/ConfigDB.java b/src/net/theprogrammersworld/herobrine/ConfigDB.java
index f0e0eff..66f4b5b 100644
--- a/src/net/theprogrammersworld/herobrine/ConfigDB.java
+++ b/src/net/theprogrammersworld/herobrine/ConfigDB.java
@@ -89,9 +89,10 @@ public class ConfigDB
public boolean UseSound = true;
public boolean ShowInTabList = false;
public boolean CheckForUpdates = true;
+
public static String pluginVersionNumber = Bukkit.getServer().getPluginManager().getPlugin("Herobrine").
getDescription().getVersion();
-
+ public boolean newVersionFound = false;
private boolean isStartupDone = false;
public ConfigDB(Logger l)
diff --git a/src/net/theprogrammersworld/herobrine/Herobrine.java b/src/net/theprogrammersworld/herobrine/Herobrine.java
index b7a610f..a9d5e21 100644
--- a/src/net/theprogrammersworld/herobrine/Herobrine.java
+++ b/src/net/theprogrammersworld/herobrine/Herobrine.java
@@ -1,9 +1,6 @@
package net.theprogrammersworld.herobrine;
-import java.io.BufferedReader;
import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
@@ -29,9 +26,10 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.WorldCreator;
import org.bukkit.WorldType;
-import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.plugin.java.JavaPlugin;
@@ -60,7 +58,6 @@ public class Herobrine extends JavaPlugin implements Listener {
public Location hbSpawnData = null;
public boolean removeHBNextTick = false;
- public String pluginVersionCount = "14";
@Override
public void onEnable() {
@@ -78,27 +75,17 @@ public class Herobrine extends JavaPlugin implements Listener {
getServer().getPluginManager().registerEvents(new InventoryListener(), this);
getServer().getPluginManager().registerEvents(new PlayerListener(), this);
getServer().getPluginManager().registerEvents(new WorldListener(), this);
+ getServer().getPluginManager().registerEvents(this, this);
initHerobrine();
// Start the telemetry collection.
new Thread(new Telemetry()).start();
- // If the user has update checking turned on, check if the server is running the latest version
- // of the plugin and display a message in the server console if it is not.
+ // If the user has update checking turned on, start the thread responsible for performing
+ // the check.
if(configdb.CheckForUpdates)
{
- ConsoleCommandSender console = Bukkit.getServer().getConsoleSender();
- try {
- URL versionCheckURL = new URL("https://www.theprogrammersworld.net/Herobrine/latestVersion.html");
- BufferedReader remoteNumberReader = new BufferedReader(new InputStreamReader(versionCheckURL.openStream()));
- String remoteVersionNumber = remoteNumberReader.readLine();
- if(!remoteVersionNumber.equals(pluginVersionCount))
- console.sendMessage(ChatColor.RED + "A new version of Herobrine is available.\nTo get it, " +
- "go to www.theprogrammersworld.net/Herobrine and click \"Download\".");
- } catch (Exception e) {
- console.sendMessage(ChatColor.RED + "Herobrine was unable to connect to the internet to check\n" +
- "for a new version.");
- }
+ new Thread(new UpdateScanner()).start();
}
}
@@ -283,5 +270,17 @@ public class Herobrine extends JavaPlugin implements Listener {
}
}
}
+
+ @EventHandler
+ public void onPlayerJoin(PlayerJoinEvent event) {
+ // When a player joins the server, check if they are an OP. If they are,
+ // and a newer version of Herobrine is available, display a message to
+ // them stating so.
+ Player joinedPlayer = event.getPlayer();
+ if(configdb.newVersionFound && joinedPlayer.isOp()) {
+ joinedPlayer.sendMessage(ChatColor.RED + "A new version of Herobrine is available. To " +
+ "get it, go to www.theprogrammersworld.net/Herobrine and click \"Download\".");
+ }
+ }
}
\ No newline at end of file
diff --git a/src/net/theprogrammersworld/herobrine/UpdateScanner.java b/src/net/theprogrammersworld/herobrine/UpdateScanner.java
new file mode 100644
index 0000000..2bcf57a
--- /dev/null
+++ b/src/net/theprogrammersworld/herobrine/UpdateScanner.java
@@ -0,0 +1,53 @@
+package net.theprogrammersworld.herobrine;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URL;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.ConsoleCommandSender;
+
+public class UpdateScanner implements Runnable {
+
+ @Override
+ public void run() {
+ // Check for a newer version of the plugin, and put the thread to sleep for 24 hours
+ // before the check is performed again. If a newer version is found, begin reporting
+ // the discovery of a newer version once every hour.
+ final String pluginVersionCount = "15";
+ ConsoleCommandSender console = Bukkit.getServer().getConsoleSender();
+
+ while(!Herobrine.getPluginCore().getConfigDB().newVersionFound) {
+ // Check for updates once every 24 hours.
+ try {
+ URL versionCheckURL = new URL("https://www.theprogrammersworld.net/Herobrine/latestVersion.html");
+ BufferedReader remoteNumberReader = new BufferedReader(new InputStreamReader(versionCheckURL.openStream()));
+ String remoteVersionNumber = remoteNumberReader.readLine();
+ if(!remoteVersionNumber.equals(pluginVersionCount)) {
+ // A newer version was found. Change the value of "newVersionFound", and break
+ // from this loop in to a loop that will display a "new version" report in the
+ // console once every hour.
+ Herobrine.getPluginCore().getConfigDB().newVersionFound = true;
+ break;
+ }
+ } catch (Exception e) {
+ console.sendMessage(ChatColor.RED + "Herobrine was unable to connect to the internet to check\n" +
+ "for a new version.");
+ }
+ try {
+ Thread.sleep(86400000);
+ } catch (InterruptedException e) {}
+ }
+
+ while(true) {
+ // Display a "new version" message in the console once every hour.
+ console.sendMessage(ChatColor.RED + "A new version of Herobrine is available.\nTo get it, " +
+ "go to www.theprogrammersworld.net/Herobrine and click \"Download\".");
+ try {
+ Thread.sleep(3600000);
+ } catch (InterruptedException e) {}
+ }
+ }
+
+}
diff --git a/src/net/theprogrammersworld/herobrine/commands/CmdExecutor.java b/src/net/theprogrammersworld/herobrine/commands/CmdExecutor.java
index 2ff2fa2..aab7087 100644
--- a/src/net/theprogrammersworld/herobrine/commands/CmdExecutor.java
+++ b/src/net/theprogrammersworld/herobrine/commands/CmdExecutor.java
@@ -966,7 +966,7 @@ public class CmdExecutor implements CommandExecutor {
double x = Herobrine.herobrineNPC.getNMSEntity().locX;
double y = Herobrine.herobrineNPC.getNMSEntity().locY;
double z = Herobrine.herobrineNPC.getNMSEntity().locZ;
- net.minecraft.server.v1_9_R1.World world = Herobrine.herobrineNPC.getNMSEntity().getWorld();
+ net.minecraft.server.v1_9_R2.World world = Herobrine.herobrineNPC.getNMSEntity().getWorld();
sender.sendMessage(red + "Herobrine's location world: " + world + " x: " + x + " y: " + y +
" z: " + z);
diff --git a/src/net/theprogrammersworld/herobrine/nms/NPC/NPCCore.java b/src/net/theprogrammersworld/herobrine/nms/NPC/NPCCore.java
index 9967465..bb4b53d 100644
--- a/src/net/theprogrammersworld/herobrine/nms/NPC/NPCCore.java
+++ b/src/net/theprogrammersworld/herobrine/nms/NPC/NPCCore.java
@@ -5,8 +5,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
-import net.minecraft.server.v1_9_R1.Entity;
-import net.minecraft.server.v1_9_R1.PlayerInteractManager;
+import net.minecraft.server.v1_9_R2.Entity;
+import net.minecraft.server.v1_9_R2.PlayerInteractManager;
import net.theprogrammersworld.herobrine.Herobrine;
import net.theprogrammersworld.herobrine.nms.NPC.entity.HumanEntity;
import net.theprogrammersworld.herobrine.nms.NPC.entity.HumanNPC;
diff --git a/src/net/theprogrammersworld/herobrine/nms/NPC/entity/HumanEntity.java b/src/net/theprogrammersworld/herobrine/nms/NPC/entity/HumanEntity.java
index 2c1f54c..335cddf 100644
--- a/src/net/theprogrammersworld/herobrine/nms/NPC/entity/HumanEntity.java
+++ b/src/net/theprogrammersworld/herobrine/nms/NPC/entity/HumanEntity.java
@@ -1,10 +1,10 @@
package net.theprogrammersworld.herobrine.nms.NPC.entity;
-import net.minecraft.server.v1_9_R1.Entity;
-import net.minecraft.server.v1_9_R1.EntityHuman;
-import net.minecraft.server.v1_9_R1.EntityPlayer;
-import net.minecraft.server.v1_9_R1.WorldSettings.EnumGamemode;
-import net.minecraft.server.v1_9_R1.PlayerInteractManager;
+import net.minecraft.server.v1_9_R2.Entity;
+import net.minecraft.server.v1_9_R2.EntityHuman;
+import net.minecraft.server.v1_9_R2.EntityPlayer;
+import net.minecraft.server.v1_9_R2.WorldSettings.EnumGamemode;
+import net.minecraft.server.v1_9_R2.PlayerInteractManager;
import net.theprogrammersworld.herobrine.nms.NPC.NPCCore;
import net.theprogrammersworld.herobrine.nms.NPC.network.NetworkHandler;
import net.theprogrammersworld.herobrine.nms.NPC.utils.NMSWorldAccess;
@@ -12,8 +12,8 @@ import net.theprogrammersworld.herobrine.nms.NPC.utils.NMSWorldAccess;
import com.mojang.authlib.GameProfile;
import org.bukkit.Bukkit;
-import org.bukkit.craftbukkit.v1_9_R1.CraftServer;
-import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
+import org.bukkit.craftbukkit.v1_9_R2.CraftServer;
+import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
public class HumanEntity extends EntityPlayer {
diff --git a/src/net/theprogrammersworld/herobrine/nms/NPC/entity/HumanNPC.java b/src/net/theprogrammersworld/herobrine/nms/NPC/entity/HumanNPC.java
index 3a86d4a..0143a73 100644
--- a/src/net/theprogrammersworld/herobrine/nms/NPC/entity/HumanNPC.java
+++ b/src/net/theprogrammersworld/herobrine/nms/NPC/entity/HumanNPC.java
@@ -1,8 +1,8 @@
package net.theprogrammersworld.herobrine.nms.NPC.entity;
-import net.minecraft.server.v1_9_R1.EntityPlayer;
-import net.minecraft.server.v1_9_R1.PacketPlayInArmAnimation;
-import net.minecraft.server.v1_9_R1.WorldServer;
+import net.minecraft.server.v1_9_R2.EntityPlayer;
+import net.minecraft.server.v1_9_R2.PacketPlayInArmAnimation;
+import net.minecraft.server.v1_9_R2.WorldServer;
import net.theprogrammersworld.herobrine.Herobrine;
import org.bukkit.Location;
@@ -94,8 +94,8 @@ public class HumanNPC {
if (newYaw > 0.0D || newYaw < 180.0D){
((EntityPlayer) getNMSEntity()).yaw = (float) (newYaw - 90.0);
((EntityPlayer) getNMSEntity()).pitch = (float) newPitch;
- ((EntityPlayer) getNMSEntity()).aK = (float) (newYaw - 90.0);
- ((EntityPlayer) getNMSEntity()).aI = (float) (newYaw - 90.0);
+ ((EntityPlayer) getNMSEntity()).aL = (float) (newYaw - 90.0);
+ ((EntityPlayer) getNMSEntity()).aJ = (float) (newYaw - 90.0);
}
}
diff --git a/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkCore.java b/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkCore.java
index 1afb54f..fea3acb 100644
--- a/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkCore.java
+++ b/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkCore.java
@@ -1,7 +1,7 @@
package net.theprogrammersworld.herobrine.nms.NPC.network;
-import net.minecraft.server.v1_9_R1.EnumProtocolDirection;
-import net.minecraft.server.v1_9_R1.NetworkManager;
+import net.minecraft.server.v1_9_R2.EnumProtocolDirection;
+import net.minecraft.server.v1_9_R2.NetworkManager;
public class NetworkCore extends NetworkManager {
diff --git a/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkHandler.java b/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkHandler.java
index 6db252a..640f88a 100644
--- a/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkHandler.java
+++ b/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkHandler.java
@@ -1,8 +1,8 @@
package net.theprogrammersworld.herobrine.nms.NPC.network;
-import net.minecraft.server.v1_9_R1.EntityPlayer;
-import net.minecraft.server.v1_9_R1.Packet;
-import net.minecraft.server.v1_9_R1.PlayerConnection;
+import net.minecraft.server.v1_9_R2.EntityPlayer;
+import net.minecraft.server.v1_9_R2.Packet;
+import net.minecraft.server.v1_9_R2.PlayerConnection;
import net.theprogrammersworld.herobrine.nms.NPC.NPCCore;
public class NetworkHandler extends PlayerConnection {
diff --git a/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkUtils.java b/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkUtils.java
index 67b4761..c9d87a6 100644
--- a/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkUtils.java
+++ b/src/net/theprogrammersworld/herobrine/nms/NPC/network/NetworkUtils.java
@@ -1,11 +1,11 @@
package net.theprogrammersworld.herobrine.nms.NPC.network;
-import net.minecraft.server.v1_9_R1.Packet;
+import net.minecraft.server.v1_9_R2.Packet;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
-import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
+import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
diff --git a/src/net/theprogrammersworld/herobrine/nms/NPC/utils/NMSServerAccess.java b/src/net/theprogrammersworld/herobrine/nms/NPC/utils/NMSServerAccess.java
index e888887..fab14dc 100644
--- a/src/net/theprogrammersworld/herobrine/nms/NPC/utils/NMSServerAccess.java
+++ b/src/net/theprogrammersworld/herobrine/nms/NPC/utils/NMSServerAccess.java
@@ -3,12 +3,12 @@ package net.theprogrammersworld.herobrine.nms.NPC.utils;
import java.util.List;
import java.util.logging.Logger;
-import net.minecraft.server.v1_9_R1.MinecraftServer;
-import net.minecraft.server.v1_9_R1.WorldServer;
+import net.minecraft.server.v1_9_R2.MinecraftServer;
+import net.minecraft.server.v1_9_R2.WorldServer;
import org.bukkit.Bukkit;
import org.bukkit.Server;
-import org.bukkit.craftbukkit.v1_9_R1.CraftServer;
+import org.bukkit.craftbukkit.v1_9_R2.CraftServer;
public class NMSServerAccess {
diff --git a/src/net/theprogrammersworld/herobrine/nms/NPC/utils/NMSWorldAccess.java b/src/net/theprogrammersworld/herobrine/nms/NPC/utils/NMSWorldAccess.java
index bd705db..3458e4f 100644
--- a/src/net/theprogrammersworld/herobrine/nms/NPC/utils/NMSWorldAccess.java
+++ b/src/net/theprogrammersworld/herobrine/nms/NPC/utils/NMSWorldAccess.java
@@ -3,11 +3,11 @@ package net.theprogrammersworld.herobrine.nms.NPC.utils;
import java.util.logging.Level;
import java.util.logging.Logger;
-import net.minecraft.server.v1_9_R1.PlayerChunkMap;
-import net.minecraft.server.v1_9_R1.WorldServer;
+import net.minecraft.server.v1_9_R2.PlayerChunkMap;
+import net.minecraft.server.v1_9_R2.WorldServer;
import org.bukkit.World;
-import org.bukkit.craftbukkit.v1_9_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_9_R2.CraftWorld;
public class NMSWorldAccess {
diff --git a/src/net/theprogrammersworld/herobrine/nms/entity/CustomSkeleton.java b/src/net/theprogrammersworld/herobrine/nms/entity/CustomSkeleton.java
index f12f799..235d0ce 100644
--- a/src/net/theprogrammersworld/herobrine/nms/entity/CustomSkeleton.java
+++ b/src/net/theprogrammersworld/herobrine/nms/entity/CustomSkeleton.java
@@ -2,9 +2,9 @@ package net.theprogrammersworld.herobrine.nms.entity;
import java.util.Random;
-import net.minecraft.server.v1_9_R1.EntitySkeleton;
-import net.minecraft.server.v1_9_R1.GenericAttributes;
-import net.minecraft.server.v1_9_R1.World;
+import net.minecraft.server.v1_9_R2.EntitySkeleton;
+import net.minecraft.server.v1_9_R2.GenericAttributes;
+import net.minecraft.server.v1_9_R2.World;
import net.theprogrammersworld.herobrine.Herobrine;
import net.theprogrammersworld.herobrine.misc.ItemName;
diff --git a/src/net/theprogrammersworld/herobrine/nms/entity/CustomZombie.java b/src/net/theprogrammersworld/herobrine/nms/entity/CustomZombie.java
index 14fbd0e..53e67eb 100644
--- a/src/net/theprogrammersworld/herobrine/nms/entity/CustomZombie.java
+++ b/src/net/theprogrammersworld/herobrine/nms/entity/CustomZombie.java
@@ -2,9 +2,9 @@ package net.theprogrammersworld.herobrine.nms.entity;
import java.util.Random;
-import net.minecraft.server.v1_9_R1.EntityZombie;
-import net.minecraft.server.v1_9_R1.GenericAttributes;
-import net.minecraft.server.v1_9_R1.World;
+import net.minecraft.server.v1_9_R2.EntityZombie;
+import net.minecraft.server.v1_9_R2.GenericAttributes;
+import net.minecraft.server.v1_9_R2.World;
import net.theprogrammersworld.herobrine.Herobrine;
import org.bukkit.Location;
diff --git a/src/net/theprogrammersworld/herobrine/nms/entity/EntityInjector.java b/src/net/theprogrammersworld/herobrine/nms/entity/EntityInjector.java
index 971c9c3..7a495b0 100644
--- a/src/net/theprogrammersworld/herobrine/nms/entity/EntityInjector.java
+++ b/src/net/theprogrammersworld/herobrine/nms/entity/EntityInjector.java
@@ -4,7 +4,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;
-import net.minecraft.server.v1_9_R1.EntityTypes;
+import net.minecraft.server.v1_9_R2.EntityTypes;
import net.theprogrammersworld.herobrine.Herobrine;
public class EntityInjector {
diff --git a/src/net/theprogrammersworld/herobrine/nms/entity/EntityManager.java b/src/net/theprogrammersworld/herobrine/nms/entity/EntityManager.java
index af631af..e492398 100644
--- a/src/net/theprogrammersworld/herobrine/nms/entity/EntityManager.java
+++ b/src/net/theprogrammersworld/herobrine/nms/entity/EntityManager.java
@@ -3,10 +3,10 @@ package net.theprogrammersworld.herobrine.nms.entity;
import java.util.HashMap;
import java.util.Map;
-import net.minecraft.server.v1_9_R1.World;
+import net.minecraft.server.v1_9_R2.World;
import org.bukkit.Location;
-import org.bukkit.craftbukkit.v1_9_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_9_R2.CraftWorld;
public class EntityManager {
diff --git a/src/plugin.yml b/src/plugin.yml
index d3930f4..92abb3e 100644
--- a/src/plugin.yml
+++ b/src/plugin.yml
@@ -1,6 +1,7 @@
name: Herobrine
main: net.theprogrammersworld.herobrine.Herobrine
-version: 1.3.1
+version: 1.4.0
+website: https://www.theprogrammersworld.net
commands:
herobrine:
description: Main command.