diff --git a/src/main/java/me/shansen/EggCatcher/EggCatcher.java b/src/main/java/me/shansen/EggCatcher/EggCatcher.java
index 2917853..280611c 100644
--- a/src/main/java/me/shansen/EggCatcher/EggCatcher.java
+++ b/src/main/java/me/shansen/EggCatcher/EggCatcher.java
@@ -1,104 +1,119 @@
-/*
-EggCatcher
-Copyright (C) 2012, 2013 me@shansen.me
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
- */
-
package me.shansen.EggCatcher;
-import me.shansen.EggCatcher.listeners.EggCatcherEntityListener;
-import me.shansen.EggCatcher.listeners.EggCatcherPlayerListener;
-import net.milkbowl.vault.economy.Economy;
-import org.bukkit.entity.Egg;
-import org.bukkit.plugin.PluginManager;
-import org.bukkit.plugin.RegisteredServiceProvider;
-import org.bukkit.plugin.java.JavaPlugin;
-import org.mcstats.Metrics;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.logging.Logger;
-public class EggCatcher extends JavaPlugin {
+import me.shansen.EggCatcher.listeners.EggCatcherEntityListener;
+import me.shansen.EggCatcher.listeners.EggCatcherPlayerListener;
+import me.shansen.EggCatcher.mcstats.Metrics;
+import net.milkbowl.vault.economy.Economy;
+
+import org.bukkit.entity.Egg;
+import org.bukkit.event.Listener;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.PluginManager;
+import org.bukkit.plugin.RegisteredServiceProvider;
+import org.bukkit.plugin.java.JavaPlugin;
+
+public class EggCatcher
+extends JavaPlugin {
public static List eggs = new ArrayList();
- public static Economy economy = null;
+//GTN removed public static Economy economy = null;
+//GTN added
+ public final Logger logger;
+ public boolean econSupport;
+ public static Economy economy;
public void onDisable() {
}
public void onEnable() {
+//GTN removed RegisteredServiceProvider economyProvider;
this.CheckConfigurationFile();
-
PluginManager pm = this.getServer().getPluginManager();
-
- final EggCatcherPlayerListener playerListener = new EggCatcherPlayerListener();
- final EggCatcherEntityListener entityListener = new EggCatcherEntityListener(this);
-
- pm.registerEvents(playerListener, this);
- pm.registerEvents(entityListener, this);
-
- if (getServer().getPluginManager().getPlugin("Vault") != null) {
- RegisteredServiceProvider economyProvider = getServer().getServicesManager().getRegistration
- (Economy.class);
- if (economyProvider != null) {
- economy = economyProvider.getProvider();
- }
+ EggCatcherPlayerListener playerListener = new EggCatcherPlayerListener();
+ EggCatcherEntityListener entityListener = new EggCatcherEntityListener(this);
+ pm.registerEvents((Listener)playerListener, (Plugin)this);
+ pm.registerEvents((Listener)entityListener, (Plugin)this);
+//GTN removed if (this.getServer().getPluginManager().getPlugin("Vault") != null && (economyProvider = this.getServer().getServicesManager().getRegistration((Class)Economy.class)) != null) {
+//GTN removed economy = (Economy)economyProvider.getProvider();
+//GTN removed }
+//GTN added
+ if (!this.setupEconomy()) {
+ this.logger.warning(String.format("[%s] Vault not found! Economy support disabled!", this.getDescription().getName()));
+ this.econSupport = false;
}
+ else {
+ this.logger.info(String.format("[%s] Vault found! Economy support enabled!", this.getDescription().getName()));
+ }
+//GTN end of addition
try {
- Metrics metrics = new Metrics(this);
+ Metrics metrics = new Metrics((Plugin)this);
metrics.start();
- } catch (IOException e) {
+ }
+ catch (IOException metrics) {
+ // empty catch block
}
}
public void CheckConfigurationFile() {
double configVersion = this.getConfig().getDouble("ConfigVersion", 0.0);
- if (configVersion == 2.6) {
+ if (configVersion == 2.7) {
+ this.saveConfig();
+ } else if (configVersion == 2.6) {
+ this.getConfig().set("CatchChance.IronGolem", (Object)100.0);
+ this.getConfig().set("VaultCost.IronGolem", (Object)100.0);
+ this.getConfig().set("ItemCost.Amount.IronGolem", (Object)5);
+ this.getConfig().set("HealthPercentage.IronGolem", (Object)100.0);
+ this.getConfig().set("ConfigVersion", (Object)2.7);
this.saveConfig();
} else if (configVersion == 2.5) {
- this.getConfig().set("CatchChance.PolarBear", 100.0);
- this.getConfig().set("VaultCost.PolarBear", 0);
- this.getConfig().set("ItemCost.Amount.PolarBear", 0);
- this.getConfig().set("HealthPercentage.PolarBear", 100.0);
- this.getConfig().set("ConfigVersion", 2.6);
+ this.getConfig().set("CatchChance.PolarBear", (Object)100.0);
+ this.getConfig().set("VaultCost.PolarBear", (Object)0);
+ this.getConfig().set("ItemCost.Amount.PolarBear", (Object)0);
+ this.getConfig().set("HealthPercentage.PolarBear", (Object)100.0);
+ this.getConfig().set("ConfigVersion", (Object)2.6);
this.saveConfig();
} else if (configVersion == 2.2) {
- this.getConfig().set("DeleteVillagerInventoryOnCatch", false);
-
- this.getConfig().set("ConfigVersion", 2.5);
+ this.getConfig().set("DeleteVillagerInventoryOnCatch", (Object)false);
+ this.getConfig().set("ConfigVersion", (Object)2.5);
this.saveConfig();
} else if (configVersion == 2.0) {
- this.getConfig().set("CatchChance.Endermite", 100.0);
- this.getConfig().set("VaultCost.Endermite", 0);
- this.getConfig().set("ItemCost.Amount.Endermite", 0);
- this.getConfig().set("HealthPercentage.Endermite", 100.0);
-
- this.getConfig().set("CatchChance.Guardian", 100.0);
- this.getConfig().set("VaultCost.Guardian", 0);
- this.getConfig().set("ItemCost.Amount.Guardian", 0);
- this.getConfig().set("HealthPercentage.Guardian", 100.0);
-
- this.getConfig().set("CatchChance.Rabbit", 100.0);
- this.getConfig().set("VaultCost.Rabbit", 0);
- this.getConfig().set("ItemCost.Amount.Rabbit", 0);
- this.getConfig().set("HealthPercentage.Rabbit", 100.0);
-
- this.getConfig().set("ConfigVersion", 2.2);
+ this.getConfig().set("CatchChance.Endermite", (Object)100.0);
+ this.getConfig().set("VaultCost.Endermite", (Object)0);
+ this.getConfig().set("ItemCost.Amount.Endermite", (Object)0);
+ this.getConfig().set("HealthPercentage.Endermite", (Object)100.0);
+ this.getConfig().set("CatchChance.Guardian", (Object)100.0);
+ this.getConfig().set("VaultCost.Guardian", (Object)0);
+ this.getConfig().set("ItemCost.Amount.Guardian", (Object)0);
+ this.getConfig().set("HealthPercentage.Guardian", (Object)100.0);
+ this.getConfig().set("CatchChance.Rabbit", (Object)100.0);
+ this.getConfig().set("VaultCost.Rabbit", (Object)0);
+ this.getConfig().set("ItemCost.Amount.Rabbit", (Object)0);
+ this.getConfig().set("HealthPercentage.Rabbit", (Object)100.0);
+ this.getConfig().set("ConfigVersion", (Object)2.2);
this.saveConfig();
} else {
this.saveResource("config.yml", true);
this.reloadConfig();
}
}
+
+//GTN added
+ private boolean setupEconomy() {
+ final RegisteredServiceProvider economyProvider = getServer().getServicesManager().getRegistration(Economy.class);
+ if (economyProvider != null) {
+ EggCatcher.economy = (Economy)economyProvider.getProvider();
+ }
+ return EggCatcher.economy != null;
+ }
+//GTN added
+ public EggCatcher() {
+ this.logger = Logger.getLogger("Minecraft");
+ this.econSupport = true;
+ }
+
}
+
diff --git a/src/main/java/me/shansen/EggCatcher/EggType.java b/src/main/java/me/shansen/EggCatcher/EggType.java
index 0c79af7..9bde7a7 100644
--- a/src/main/java/me/shansen/EggCatcher/EggType.java
+++ b/src/main/java/me/shansen/EggCatcher/EggType.java
@@ -1,21 +1,3 @@
-/*
-EggCatcher
-Copyright (C) 2012, 2013 me@shansen.me
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
package me.shansen.EggCatcher;
import org.bukkit.entity.Entity;
@@ -49,15 +31,14 @@ public enum EggType {
ENDERMITE(EntityType.ENDERMITE, 67, "Endermite"),
GUARDIAN(EntityType.GUARDIAN, 68, "Guardian"),
RABBIT(EntityType.RABBIT, 101, "Rabbit"),
- POLAR_BEAR(EntityType.POLAR_BEAR, 102, "PolarBear");
-
-
-
+ POLAR_BEAR(EntityType.POLAR_BEAR, 102, "PolarBear"),
+ IRON_GOLEM(EntityType.IRON_GOLEM, 99, "IronGolem");
+
private final EntityType entityType;
private final Integer creatureId;
private final String friendlyName;
- EggType(EntityType entityType, Integer creatureId, String friendlyName) {
+ private EggType(EntityType entityType, Integer creatureId, String friendlyName) {
this.entityType = entityType;
this.creatureId = creatureId;
this.friendlyName = friendlyName;
@@ -77,11 +58,10 @@ public enum EggType {
public static EggType getEggType(Entity entity) {
for (EggType eggType : EggType.values()) {
- if (!eggType.getCreatureType().getEntityClass().isInstance(entity)) {
- continue;
- }
+ if (!eggType.getCreatureType().getEntityClass().isInstance((Object)entity)) continue;
return eggType;
}
return null;
}
}
+
diff --git a/src/main/java/me/shansen/EggCatcher/events/EggCaptureEvent.java b/src/main/java/me/shansen/EggCatcher/events/EggCaptureEvent.java
index f38462e..deae084 100644
--- a/src/main/java/me/shansen/EggCatcher/events/EggCaptureEvent.java
+++ b/src/main/java/me/shansen/EggCatcher/events/EggCaptureEvent.java
@@ -1,21 +1,3 @@
-/*
-EggCatcher
-Copyright (C) 2012, 2013 me@shansen.me, andre@norcode.com
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
package me.shansen.EggCatcher.events;
import org.bukkit.entity.Egg;
@@ -24,8 +6,9 @@ import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.EntityEvent;
-public class EggCaptureEvent extends EntityEvent implements Cancellable {
-
+public class EggCaptureEvent
+extends EntityEvent
+implements Cancellable {
private static final HandlerList handlers = new HandlerList();
boolean cancelled = false;
Egg egg;
@@ -55,3 +38,4 @@ public class EggCaptureEvent extends EntityEvent implements Cancellable {
return handlers;
}
}
+
diff --git a/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherEntityListener.java b/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherEntityListener.java
index 5154b7f..3b2befa 100644
--- a/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherEntityListener.java
+++ b/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherEntityListener.java
@@ -1,32 +1,24 @@
-/*
-EggCatcher
-Copyright (C) 2012, 2013 me@shansen.me
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
package me.shansen.EggCatcher.listeners;
import me.shansen.EggCatcher.EggCatcher;
import me.shansen.EggCatcher.EggType;
import me.shansen.EggCatcher.events.EggCaptureEvent;
-
import me.shansen.nbt.NbtReflection;
+
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.entity.*;
+import org.bukkit.entity.Ageable;
+import org.bukkit.entity.Egg;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Horse;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.entity.Pig;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Sheep;
+import org.bukkit.entity.Tameable;
+import org.bukkit.entity.Villager;
+import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
@@ -37,8 +29,8 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
-public class EggCatcherEntityListener implements Listener {
-
+public class EggCatcherEntityListener
+implements Listener {
private final boolean usePermissions;
private final boolean useCatchChance;
private final boolean useHealthPercentage;
@@ -85,220 +77,227 @@ public class EggCatcherEntityListener implements Listener {
this.deleteVillagerInventoryOnCatch = this.config.getBoolean("DeleteVillagerInventoryOnCatch", false);
}
- @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
+ /*
+ * Enabled aggressive block sorting
+ * Lifted jumps to return sites
+ */
+ @EventHandler(ignoreCancelled=true, priority=EventPriority.MONITOR)
public void onEntityHitByEgg(EntityDamageEvent event) {
+ //GTN added Booleans
+ Boolean playerHasFunds = false;
+ Boolean playerHasItems = false;
EntityDamageByEntityEvent damageEvent = null;
Egg egg = null;
EggType eggType = null;
double vaultCost = 0.0;
Entity entity = event.getEntity();
-
if (!(event instanceof EntityDamageByEntityEvent)) {
return;
}
-
- damageEvent = (EntityDamageByEntityEvent) event;
-
+ damageEvent = (EntityDamageByEntityEvent)event;
if (!(damageEvent.getDamager() instanceof Egg)) {
return;
}
-
- egg = (Egg) damageEvent.getDamager();
+ egg = (Egg)damageEvent.getDamager();
eggType = EggType.getEggType(entity);
-
if (eggType == null) {
return;
}
-
if (!this.spawnChickenOnFail) {
EggCatcher.eggs.add(egg);
}
-
- if (this.preventCatchingBabyAnimals) {
- if (entity instanceof Ageable) {
- if (!((Ageable) entity).isAdult()) {
- return;
- }
- }
+ if (this.preventCatchingBabyAnimals && entity instanceof Ageable && !((Ageable)entity).isAdult()) {
+ return;
}
-
- if (this.preventCatchingTamedAnimals) {
- if (entity instanceof Tameable) {
- if (((Tameable) entity).isTamed()) {
- return;
- }
- }
+ if (this.preventCatchingTamedAnimals && entity instanceof Tameable && ((Tameable)entity).isTamed()) {
+ return;
}
-
- if (this.preventCatchingShearedSheeps) {
- if (entity instanceof Sheep) {
- if (((Sheep) entity).isSheared()) {
- return;
- }
- }
+ if (this.preventCatchingShearedSheeps && entity instanceof Sheep && ((Sheep)entity).isSheared()) {
+ return;
}
-
-
EggCaptureEvent eggCaptureEvent = new EggCaptureEvent(entity, egg);
- this.plugin.getServer().getPluginManager().callEvent(eggCaptureEvent);
+ this.plugin.getServer().getPluginManager().callEvent((Event)eggCaptureEvent);
if (eggCaptureEvent.isCancelled()) {
return;
}
-
if (egg.getShooter() instanceof Player) {
- Player player = (Player) egg.getShooter();
-
- if (this.usePermissions) {
- if (!player.hasPermission("eggcatcher.catch." + eggType.getFriendlyName().toLowerCase())) {
- player.sendMessage(config.getString("Messages.PermissionFail"));
- if (!this.looseEggOnFail) {
- player.getInventory().addItem(new ItemStack(Material.EGG, 1));
- EggCatcher.eggs.add(egg);
- }
- return;
- }
+ double currentHealth;
+ double healthPercentage;
+ Player player = (Player)egg.getShooter();
+ if (this.usePermissions && !player.hasPermission("eggcatcher.catch." + eggType.getFriendlyName().toLowerCase())) {
+ player.sendMessage(this.config.getString("Messages.PermissionFail"));
+ if (this.looseEggOnFail) return;
+ player.getInventory().addItem(new ItemStack[]{new ItemStack(Material.EGG, 1)});
+ EggCatcher.eggs.add(egg);
+ return;
}
-
- if (this.useHealthPercentage) {
- double healthPercentage = config.getDouble("HealthPercentage." + eggType.getFriendlyName());
- double currentHealth = ((LivingEntity) entity).getHealth() * 100.0 / ((LivingEntity) entity)
- .getMaxHealth();
- if (healthPercentage < currentHealth) {
- if (this.healthPercentageFailMessage.length() > 0) {
- player.sendMessage(String.format(this.healthPercentageFailMessage, healthPercentage));
- }
- if (!this.looseEggOnFail) {
- player.getInventory().addItem(new ItemStack(Material.EGG, 1));
- EggCatcher.eggs.add(egg);
- }
- return;
+ if (this.useHealthPercentage && (healthPercentage = this.config.getDouble("HealthPercentage." + eggType.getFriendlyName())) < (currentHealth = ((LivingEntity)entity).getHealth() * 100.0 / ((LivingEntity)entity).getMaxHealth())) {
+ if (this.healthPercentageFailMessage.length() > 0) {
+ player.sendMessage(String.format(this.healthPercentageFailMessage, healthPercentage));
}
+ if (this.looseEggOnFail) return;
+ player.getInventory().addItem(new ItemStack[]{new ItemStack(Material.EGG, 1)});
+ EggCatcher.eggs.add(egg);
+ return;
}
-
if (this.useCatchChance) {
- double catchChance = config.getDouble("CatchChance." + eggType.getFriendlyName());
- if (Math.random() * 100 <= catchChance) {
+ double catchChance = this.config.getDouble("CatchChance." + eggType.getFriendlyName());
+ if (Math.random() * 100.0 <= catchChance) {
if (this.catchChanceSuccessMessage.length() > 0) {
- player.sendMessage(catchChanceSuccessMessage);
+ player.sendMessage(this.catchChanceSuccessMessage);
}
} else {
if (this.catchChanceFailMessage.length() > 0) {
player.sendMessage(this.catchChanceFailMessage);
}
- if (!this.looseEggOnFail) {
- player.getInventory().addItem(new ItemStack(Material.EGG, 1));
- EggCatcher.eggs.add(egg);
- }
+ if (this.looseEggOnFail) return;
+ player.getInventory().addItem(new ItemStack[]{new ItemStack(Material.EGG, 1)});
+ EggCatcher.eggs.add(egg);
return;
}
}
+ boolean freeCatch = player.hasPermission("eggcatcher.free");
+//GTN The structure of the plugin makes it so that
+//GTN The catch cost for Vault and Item are seperate
+//GTN so the charge must be either/or NOT both!
+
+//GTN Let me restructure this as a solution!
+//GTN so we have 'useVaultCost', 'useItemCost', 'freeCatch'
+//GTN proposed structure
+//GTN Use a Boolean of playerHasFunds
+//GTN Use a Boolean of playerHasItems
+//GTN process as normal but delay the PAYMENT
+//GTN Use three PAYMENT methods of 'VaultOnly' or 'ItemOnly' or 'Both'
+//GTN *** check if playerHasFunds
+ if (this.useVaultCost && !freeCatch) {
+ //GTN testing player.sendMessage(String.format("You have %s", EggCatcher.economy.format(EggCatcher.economy.getBalance(player))));//.getBalance(player.getName()))));
+ vaultCost = this.config.getDouble("VaultCost." + eggType.getFriendlyName());
+ //GTN was if (!EggCatcher.economy.has(player.getName(), vaultCost)) {
+ //GTN replaced with
+ if (EggCatcher.economy.getBalance(player) < vaultCost) {
+ player.sendMessage(String.format(this.config.getString("Messages.VaultFail"), vaultCost));
+ if (this.looseEggOnFail) return;
+ player.getInventory().addItem(new ItemStack[]{new ItemStack(Material.EGG, 1)});
+ EggCatcher.eggs.add(egg);
+ return;
+ }
+//GTN Move this to take payment
+ playerHasFunds = true;
+ //GTN was EggCatcher.economy.withdrawPlayer(player.getName(), vaultCost);
+ //GTN replaced with
+ //EggCatcher.economy.withdrawPlayer(player, vaultCost);
+ //if (!this.vaultTargetBankAccount.isEmpty()) {
+ // EggCatcher.economy.bankDeposit(this.vaultTargetBankAccount, vaultCost);
+ //}
+ //player.sendMessage(String.format(this.config.getString("Messages.VaultSuccess"), vaultCost));
+ }
+//GTN *** check if playerHasItems as MATERIAL
+ if (this.useItemCost && !freeCatch) {
+ //GTN Replaced static value of 'Gold_Ingot' (266) with configured ItemId.MATERIAL
+ //GTN was int itemId = this.config.getInt("ItemCost.ItemId", 266);
+ //GTN replaced with
+
+ String itemId = this.config.getString("ItemCost.ItemId");
+ int itemData = this.config.getInt("ItemCost.ItemData", 0);
+ int itemAmount = this.config.getInt("ItemCost.Amount." + eggType.getFriendlyName(), 0);
+
+ //GTN was ItemStack itemStack = new ItemStack(itemId, itemAmount, (short)itemData);
+ //GTN replaced with
+ ItemStack itemStack = new ItemStack(Material.getMaterial(itemId), itemAmount, (short)itemData);
+//GTN the problem is that Vault has already taken money but what happens if there are not enough items?
+ if (!player.getInventory().containsAtLeast(itemStack, itemStack.getAmount())) {
+ player.sendMessage(String.format(this.config.getString("Messages.ItemCostFail"), String.valueOf(itemAmount)));
+ if (this.looseEggOnFail) return;
+ player.getInventory().addItem(new ItemStack[]{new ItemStack(Material.EGG, 1)});
+ EggCatcher.eggs.add(egg);
+ return;
+ }
+//GTN Move this to take payment
+ playerHasItems = true;
+ //player.sendMessage(String.format(this.config.getString("Messages.ItemCostSuccess"), String.valueOf(itemAmount)));
+ //player.getInventory().removeItem(new ItemStack[]{itemStack});
+ }
+//GTN **** TAKE PAYMENT HERE
+ if (!freeCatch) {
+ //vaultCost only
+ if (this.useVaultCost && playerHasFunds && !this.useItemCost) {
+ EggCatcher.economy.withdrawPlayer(player, vaultCost);
+ if (!this.vaultTargetBankAccount.isEmpty()) {
+ EggCatcher.economy.bankDeposit(this.vaultTargetBankAccount, vaultCost);
+ }
+ player.sendMessage(String.format(this.config.getString("Messages.VaultSuccess"), vaultCost));
+ }
+ //itemCost only
+ if (this.useItemCost && playerHasItems && !this.useVaultCost) {
+ String itemId = this.config.getString("ItemCost.ItemId");
+ int itemData = this.config.getInt("ItemCost.ItemData", 0);
+ int itemAmount = this.config.getInt("ItemCost.Amount." + eggType.getFriendlyName(), 0);
+ ItemStack itemStack = new ItemStack(Material.getMaterial(itemId), itemAmount, (short)itemData);
+ player.sendMessage(String.format(this.config.getString("Messages.ItemCostSuccess"), String.valueOf(itemAmount)));
+ player.getInventory().removeItem(new ItemStack[]{itemStack});
+ }
+ //Both vaultCost and itemCost
+ if (this.useVaultCost && playerHasFunds && this.useItemCost && playerHasItems) {
+ EggCatcher.economy.withdrawPlayer(player, vaultCost);
+ if (!this.vaultTargetBankAccount.isEmpty()) {
+ EggCatcher.economy.bankDeposit(this.vaultTargetBankAccount, vaultCost);
+ }
+ player.sendMessage(String.format(this.config.getString("Messages.VaultSuccess"), vaultCost));
+ String itemId = this.config.getString("ItemCost.ItemId");
+ int itemData = this.config.getInt("ItemCost.ItemData", 0);
+ int itemAmount = this.config.getInt("ItemCost.Amount." + eggType.getFriendlyName(), 0);
+ ItemStack itemStack = new ItemStack(Material.getMaterial(itemId), itemAmount, (short)itemData);
+ player.sendMessage(String.format(this.config.getString("Messages.ItemCostSuccess"), String.valueOf(itemAmount)));
+ player.getInventory().removeItem(new ItemStack[]{itemStack});
+ }
+ }
- boolean freeCatch = player.hasPermission("eggcatcher.free");
-
- if (this.useVaultCost && !freeCatch) {
- vaultCost = config.getDouble("VaultCost." + eggType.getFriendlyName());
- if (!EggCatcher.economy.has(player.getName(), vaultCost)) {
- player.sendMessage(String.format(config.getString("Messages.VaultFail"), vaultCost));
- if (!this.looseEggOnFail) {
- player.getInventory().addItem(new ItemStack(Material.EGG, 1));
- EggCatcher.eggs.add(egg);
- }
- return;
- } else {
- EggCatcher.economy.withdrawPlayer(player.getName(), vaultCost);
-
- if (!this.vaultTargetBankAccount.isEmpty()) {
- EggCatcher.economy.bankDeposit(this.vaultTargetBankAccount, vaultCost);
- }
-
- player.sendMessage(String.format(config.getString("Messages.VaultSuccess"), vaultCost));
- }
- }
-
- if (this.useItemCost && !freeCatch) {
- int itemId = config.getInt("ItemCost.ItemId", 266);
- int itemData = config.getInt("ItemCost.ItemData", 0);
- int itemAmount = config.getInt("ItemCost.Amount." + eggType.getFriendlyName(), 0);
- @SuppressWarnings("deprecation")
- ItemStack itemStack = new ItemStack(itemId, itemAmount, (short) itemData);
- if (player.getInventory().containsAtLeast(itemStack, itemStack.getAmount())) {
- player.sendMessage(String.format(config.getString("Messages.ItemCostSuccess"),
- String.valueOf(itemAmount)));
- player.getInventory().removeItem(itemStack);
- } else {
- player.sendMessage(String.format(config.getString("Messages.ItemCostFail"),
- String.valueOf(itemAmount)));
- if (!this.looseEggOnFail) {
- player.getInventory().addItem(new ItemStack(Material.EGG, 1));
- EggCatcher.eggs.add(egg);
- }
- return;
- }
- }
+//GTN *** END OF TAKE PAYMENT
} else {
- // Dispenser
if (!this.nonPlayerCatching) {
return;
}
if (this.useCatchChance) {
- double catchChance = config.getDouble("CatchChance." + eggType.getFriendlyName());
- if (Math.random() * 100 > catchChance) {
+ double catchChance = this.config.getDouble("CatchChance." + eggType.getFriendlyName());
+ if (Math.random() * 100.0 > catchChance) {
return;
}
}
}
-
entity.remove();
if (this.explosionEffect) {
- entity.getWorld().createExplosion(entity.getLocation(), 0);
+ entity.getWorld().createExplosion(entity.getLocation(), 0.0f);
}
if (this.smokeEffect) {
entity.getWorld().playEffect(entity.getLocation(), Effect.SMOKE, 0);
}
-
ItemStack eggStack = new ItemStack(Material.MONSTER_EGG, 1, eggType.getCreatureId());
-
+ //GTN was eggStack = NbtReflection.setNewEntityTag(eggStack, entity.getType().name());
+ //GTN replaced with
eggStack = NbtReflection.setNewEntityTag(eggStack, entity.getType().getName());
-
- String customName = ((LivingEntity) entity).getCustomName();
-
+ String customName = ((LivingEntity)entity).getCustomName();
if (customName != null) {
- // Entity had custom name
ItemMeta meta = eggStack.getItemMeta();
meta.setDisplayName(customName);
eggStack.setItemMeta(meta);
}
-
- if(entity instanceof Pig) {
- if(((Pig)entity).hasSaddle()) {
- entity.getWorld().dropItem(entity.getLocation(), new ItemStack(Material.SADDLE, 1));
+ if (entity instanceof Pig && ((Pig)entity).hasSaddle()) {
+ entity.getWorld().dropItem(entity.getLocation(), new ItemStack(Material.SADDLE, 1));
+ }
+ if (entity instanceof Horse && ((Horse)entity).isCarryingChest()) {
+ entity.getWorld().dropItemNaturally(entity.getLocation(), new ItemStack(Material.CHEST));
+ }
+ if (entity instanceof Villager && !this.deleteVillagerInventoryOnCatch || !(entity instanceof Villager) && entity instanceof InventoryHolder) {
+ ItemStack[] items;
+ for (ItemStack itemStack : items = ((InventoryHolder)entity).getInventory().getContents()) {
+ if (itemStack == null) continue;
+ entity.getWorld().dropItemNaturally(entity.getLocation(), itemStack);
}
}
-
- if(entity instanceof Horse) {
- if(((Horse) entity).isCarryingChest()){
- entity.getWorld().dropItemNaturally(entity.getLocation(), new ItemStack(Material.CHEST));
- }
- }
-
- if((entity instanceof Villager && !this.deleteVillagerInventoryOnCatch) ||
- (!(entity instanceof Villager) && entity instanceof InventoryHolder)) {
-
- ItemStack[] items = ((InventoryHolder) entity).getInventory().getContents();
-
- for(ItemStack itemStack : items) {
- if(itemStack!=null){
- entity.getWorld().dropItemNaturally(entity.getLocation(), itemStack);
- }
- }
- }
-
entity.getWorld().dropItem(entity.getLocation(), eggStack);
-
- if (!this.spawnChickenOnSuccess) {
- if (!EggCatcher.eggs.contains(egg)) {
- EggCatcher.eggs.add(egg);
- }
- }
+ if (this.spawnChickenOnSuccess) return;
+ if (EggCatcher.eggs.contains((Object)egg)) return;
+ EggCatcher.eggs.add(egg);
}
}
+
diff --git a/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherPlayerListener.java b/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherPlayerListener.java
index b6b8349..e38ff3e 100644
--- a/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherPlayerListener.java
+++ b/src/main/java/me/shansen/EggCatcher/listeners/EggCatcherPlayerListener.java
@@ -1,34 +1,56 @@
-/*
-EggCatcher
-Copyright (C) 2012, 2013 me@shansen.me
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
package me.shansen.EggCatcher.listeners;
import me.shansen.EggCatcher.EggCatcher;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
+import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerEggThrowEvent;
+import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.inventory.ItemStack;
-public class EggCatcherPlayerListener implements Listener {
+public class EggCatcherPlayerListener
+implements Listener {
@EventHandler
public void onPlayerEggThrow(PlayerEggThrowEvent event) {
- if (EggCatcher.eggs.contains(event.getEgg())) {
+ if (EggCatcher.eggs.contains((Object)event.getEgg())) {
event.setHatching(false);
- EggCatcher.eggs.remove(event.getEgg());
+ EggCatcher.eggs.remove((Object)event.getEgg());
}
}
+
+ //GTN SpawnMobFromEgg Event
+ @EventHandler
+ public void spawnMobFromEgg(PlayerInteractEvent event) {
+ if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
+ Player player = event.getPlayer();
+ if (player.getInventory().getItemInMainHand().getType() == Material.MONSTER_EGG) {
+ ItemStack spawnEggItem = player.getInventory().getItemInMainHand();
+//GTN remove unneeded Entity entity = null;
+ EntityType spawnEggEntity = EggNBT.getSpawnEggEntityType(spawnEggItem);
+//GTN debug player.sendMessage("EggType EntityType - " + EggNBT.getSpawnEggEntityType(eggItem));
+//GTN rewrite if (spawnEggEntity.toString() == "IRON_GOLEM") {
+ if (!(spawnEggEntity == null)) {
+//GTN rewrite Location loc = ((PlayerInteractEvent)event).getClickedBlock().getRelative(((PlayerInteractEvent)event).getBlockFace()).getLocation();
+ Location loc = event.getClickedBlock().getRelative(event.getBlockFace()).getLocation();
+//GTN remove unneeded entity = player.getWorld().spawnEntity(loc, EntityType.IRON_GOLEM);
+//GTN rewrite player.getWorld().spawnEntity(loc, EntityType.IRON_GOLEM);
+ player.getWorld().spawnEntity(loc, spawnEggEntity);
+ event.setCancelled(true);
+ int spawnEggAmount = spawnEggItem.getAmount();
+ if (spawnEggAmount == 1) {
+ player.getInventory().setItemInMainHand(null);
+ } else if (spawnEggAmount > 1) {
+ spawnEggItem.setAmount(spawnEggAmount - 1);
+ player.getInventory().setItemInMainHand(spawnEggItem);
+ }
+ }
+ }
+ }
+ }
+
}
+
diff --git a/src/main/java/me/shansen/EggCatcher/listeners/EggNBT.java b/src/main/java/me/shansen/EggCatcher/listeners/EggNBT.java
new file mode 100644
index 0000000..ec4ab37
--- /dev/null
+++ b/src/main/java/me/shansen/EggCatcher/listeners/EggNBT.java
@@ -0,0 +1,60 @@
+package me.shansen.EggCatcher.listeners;
+
+import me.shansen.EggCatcher.EggType;
+import net.minecraft.server.v1_10_R1.NBTBase;
+import net.minecraft.server.v1_10_R1.NBTTagCompound;
+
+import org.bukkit.Material;
+import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack;
+import org.bukkit.entity.EntityType;
+import org.bukkit.inventory.ItemStack;
+
+/**
+ * @author Phillip from Mobcatcher
+ *
+ */
+public class EggNBT {
+ public static EntityType getSpawnEggEntityType(ItemStack item) {
+ net.minecraft.server.v1_10_R1.ItemStack stack = CraftItemStack.asNMSCopy((ItemStack)item);
+ NBTTagCompound tag = stack.getTag().getCompound("EntityTag");
+ String entityString = tag.getString("id");
+ char[] chars = entityString.toCharArray();
+ int i = 0;
+ while (i <= chars.length - 1) {
+ if (Character.isUpperCase(chars[i]) && i != 0) {
+ entityString = new StringBuilder(entityString).insert(i, "_").toString();
+ break;
+ }
+ ++i;
+ }
+ entityString = entityString.toUpperCase();
+ if (entityString.equalsIgnoreCase("OZELOT")) {
+ entityString = "OCELOT";
+ } else if (entityString.equalsIgnoreCase("LAVA_SLIME")) {
+ entityString = "MAGMA_CUBE";
+ } else if (entityString.equalsIgnoreCase("ENTITY_HORSE")) {
+ entityString = "HORSE";
+ } else if (entityString.equalsIgnoreCase("VILLAGER_GOLEM")) {
+ entityString = "IRON_GOLEM";
+ }
+ EntityType type = EntityType.valueOf((String)entityString);
+ return type;
+ }
+
+ public static ItemStack setSpawnEggEntityType(ItemStack item, EggType eggMob) {
+ ItemStack newItem = new ItemStack(Material.MONSTER_EGG, 1);
+ net.minecraft.server.v1_10_R1.ItemStack stack = CraftItemStack.asNMSCopy((ItemStack)newItem);
+ NBTTagCompound tagCompound = stack.getTag();
+ if (tagCompound == null) {
+ tagCompound = new NBTTagCompound();
+ }
+ NBTTagCompound id = new NBTTagCompound();
+ id.setString("id", eggMob.getCreatureType().getName());
+ tagCompound.set("EntityTag", (NBTBase)id);
+ stack.setTag(tagCompound);
+ ItemStack bukkitStack = CraftItemStack.asBukkitCopy((net.minecraft.server.v1_10_R1.ItemStack)stack);
+ bukkitStack.setDurability(item.getDurability());
+ return bukkitStack;
+ }
+}
+
diff --git a/src/main/java/me/shansen/EggCatcher/mcstats/Metrics.java b/src/main/java/me/shansen/EggCatcher/mcstats/Metrics.java
new file mode 100644
index 0000000..a6be6d3
--- /dev/null
+++ b/src/main/java/me/shansen/EggCatcher/mcstats/Metrics.java
@@ -0,0 +1,507 @@
+/*
+ * Decompiled with CFR 0_115.
+ *
+ * Could not load the following classes:
+ * org.bukkit.Bukkit
+ * org.bukkit.Server
+ * org.bukkit.configuration.InvalidConfigurationException
+ * org.bukkit.configuration.file.YamlConfiguration
+ * org.bukkit.configuration.file.YamlConfigurationOptions
+ * org.bukkit.entity.Player
+ * org.bukkit.plugin.Plugin
+ * org.bukkit.plugin.PluginDescriptionFile
+ * org.bukkit.scheduler.BukkitScheduler
+ * org.bukkit.scheduler.BukkitTask
+ */
+package me.shansen.EggCatcher.mcstats;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.io.Reader;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Method;
+import java.net.Proxy;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+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.Server;
+import org.bukkit.configuration.InvalidConfigurationException;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.configuration.file.YamlConfigurationOptions;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.PluginDescriptionFile;
+import org.bukkit.scheduler.BukkitScheduler;
+import org.bukkit.scheduler.BukkitTask;
+
+public class Metrics {
+ private static final int REVISION = 7;
+ private static final String BASE_URL = "http://report.mcstats.org";
+ private static final String REPORT_URL = "/plugin/%s";
+ private static final int PING_INTERVAL = 15;
+ private final Plugin plugin;
+ private final Set graphs = Collections.synchronizedSet(new HashSet());
+ private final YamlConfiguration configuration;
+ private final File configurationFile;
+ private final String guid;
+ private final boolean debug;
+ private final Object optOutLock = new Object();
+ private volatile BukkitTask task = null;
+
+ public Metrics(Plugin plugin) throws IOException {
+ if (plugin == null) {
+ throw new IllegalArgumentException("Plugin cannot be null");
+ }
+ this.plugin = plugin;
+ this.configurationFile = this.getConfigFile();
+ this.configuration = YamlConfiguration.loadConfiguration((File)this.configurationFile);
+ this.configuration.addDefault("opt-out", (Object)false);
+ this.configuration.addDefault("guid", (Object)UUID.randomUUID().toString());
+ this.configuration.addDefault("debug", (Object)false);
+ if (this.configuration.get("guid", (Object)null) == null) {
+ this.configuration.options().header("http://mcstats.org").copyDefaults(true);
+ this.configuration.save(this.configurationFile);
+ }
+ this.guid = this.configuration.getString("guid");
+ this.debug = this.configuration.getBoolean("debug", false);
+ }
+
+ public Graph createGraph(String name) {
+ if (name == null) {
+ throw new IllegalArgumentException("Graph name cannot be null");
+ }
+ Graph graph = new Graph(name);
+ this.graphs.add(graph);
+ return graph;
+ }
+
+ public void addGraph(Graph graph) {
+ if (graph == null) {
+ throw new IllegalArgumentException("Graph cannot be null");
+ }
+ this.graphs.add(graph);
+ }
+
+ /*
+ * WARNING - Removed try catching itself - possible behaviour change.
+ */
+ public boolean start() {
+ Object object = this.optOutLock;
+ synchronized (object) {
+ if (this.isOptOut()) {
+ return false;
+ }
+ if (this.task != null) {
+ return true;
+ }
+ this.task = this.plugin.getServer().getScheduler().runTaskTimerAsynchronously(this.plugin, new Runnable(){
+ private boolean firstPost;
+
+ /*
+ * WARNING - Removed try catching itself - possible behaviour change.
+ */
+ public void run() {
+ block7 : {
+ try {
+ Object object = Metrics.this.optOutLock;
+ synchronized (object) {
+ if (Metrics.this.isOptOut() && Metrics.this.task != null) {
+ Metrics.this.task.cancel();
+ Metrics.this.task = null;
+ for (Graph graph : Metrics.this.graphs) {
+ graph.onOptOut();
+ }
+ }
+ }
+ Metrics.this.postPlugin(!this.firstPost);
+ this.firstPost = false;
+ }
+ catch (IOException e) {
+ if (!Metrics.this.debug) break block7;
+ Bukkit.getLogger().log(Level.INFO, "[Metrics] " + e.getMessage());
+ }
+ }
+ }
+ }, 0, 18000);
+ return true;
+ }
+ }
+
+ /*
+ * WARNING - Removed try catching itself - possible behaviour change.
+ */
+ public boolean isOptOut() {
+ Object object = this.optOutLock;
+ synchronized (object) {
+ try {
+ this.configuration.load(this.getConfigFile());
+ }
+ catch (IOException ex) {
+ if (this.debug) {
+ Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage());
+ }
+ return true;
+ }
+ catch (InvalidConfigurationException ex) {
+ if (this.debug) {
+ Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage());
+ }
+ return true;
+ }
+ return this.configuration.getBoolean("opt-out", false);
+ }
+ }
+
+ /*
+ * WARNING - Removed try catching itself - possible behaviour change.
+ */
+ public void enable() throws IOException {
+ Object object = this.optOutLock;
+ synchronized (object) {
+ if (this.isOptOut()) {
+ this.configuration.set("opt-out", (Object)false);
+ this.configuration.save(this.configurationFile);
+ }
+ if (this.task == null) {
+ this.start();
+ }
+ }
+ }
+
+ /*
+ * WARNING - Removed try catching itself - possible behaviour change.
+ */
+ public void disable() throws IOException {
+ Object object = this.optOutLock;
+ synchronized (object) {
+ if (!this.isOptOut()) {
+ this.configuration.set("opt-out", (Object)true);
+ this.configuration.save(this.configurationFile);
+ }
+ if (this.task != null) {
+ this.task.cancel();
+ this.task = null;
+ }
+ }
+ }
+
+ public File getConfigFile() {
+ File pluginsFolder = this.plugin.getDataFolder().getParentFile();
+ return new File(new File(pluginsFolder, "PluginMetrics"), "config.yml");
+ }
+
+ private int getOnlinePlayers() {
+ try {
+ Method onlinePlayerMethod = Server.class.getMethod("getOnlinePlayers", new Class[0]);
+ if (onlinePlayerMethod.getReturnType().equals(Collection.class)) {
+ return ((Collection)onlinePlayerMethod.invoke((Object)Bukkit.getServer(), new Object[0])).size();
+ }
+ return ((Player[])onlinePlayerMethod.invoke((Object)Bukkit.getServer(), new Object[0])).length;
+ }
+ catch (Exception ex) {
+ if (this.debug) {
+ Bukkit.getLogger().log(Level.INFO, "[Metrics] " + ex.getMessage());
+ }
+ return 0;
+ }
+ }
+
+ /*
+ * WARNING - Removed try catching itself - possible behaviour change.
+ */
+ private void postPlugin(boolean isPing) throws IOException {
+ PluginDescriptionFile description = this.plugin.getDescription();
+ String pluginName = description.getName();
+ boolean onlineMode = Bukkit.getServer().getOnlineMode();
+ String pluginVersion = description.getVersion();
+ String serverVersion = Bukkit.getVersion();
+ int playersOnline = this.getOnlinePlayers();
+ StringBuilder json = new StringBuilder(1024);
+ json.append('{');
+ Metrics.appendJSONPair(json, "guid", this.guid);
+ Metrics.appendJSONPair(json, "plugin_version", pluginVersion);
+ Metrics.appendJSONPair(json, "server_version", serverVersion);
+ Metrics.appendJSONPair(json, "players_online", Integer.toString(playersOnline));
+ String osname = System.getProperty("os.name");
+ String osarch = System.getProperty("os.arch");
+ String osversion = System.getProperty("os.version");
+ String java_version = System.getProperty("java.version");
+ int coreCount = Runtime.getRuntime().availableProcessors();
+ if (osarch.equals("amd64")) {
+ osarch = "x86_64";
+ }
+ Metrics.appendJSONPair(json, "osname", osname);
+ Metrics.appendJSONPair(json, "osarch", osarch);
+ Metrics.appendJSONPair(json, "osversion", osversion);
+ Metrics.appendJSONPair(json, "cores", Integer.toString(coreCount));
+ Metrics.appendJSONPair(json, "auth_mode", onlineMode ? "1" : "0");
+ Metrics.appendJSONPair(json, "java_version", java_version);
+ if (isPing) {
+ Metrics.appendJSONPair(json, "ping", "1");
+ }
+ if (this.graphs.size() > 0) {
+ Set set = this.graphs;
+ synchronized (set) {
+ json.append(',');
+ json.append('\"');
+ json.append("graphs");
+ json.append('\"');
+ json.append(':');
+ json.append('{');
+ boolean firstGraph = true;
+ for (Graph graph : this.graphs) {
+ StringBuilder graphJson = new StringBuilder();
+ graphJson.append('{');
+ for (Plotter plotter : graph.getPlotters()) {
+ Metrics.appendJSONPair(graphJson, plotter.getColumnName(), Integer.toString(plotter.getValue()));
+ }
+ graphJson.append('}');
+ if (!firstGraph) {
+ json.append(',');
+ }
+ json.append(Metrics.escapeJSON(graph.getName()));
+ json.append(':');
+ json.append(graphJson);
+ firstGraph = false;
+ }
+ json.append('}');
+ }
+ }
+ json.append('}');
+ URL url = new URL("http://report.mcstats.org" + String.format("/plugin/%s", Metrics.urlEncode(pluginName)));
+ URLConnection connection = this.isMineshafterPresent() ? url.openConnection(Proxy.NO_PROXY) : url.openConnection();
+ byte[] uncompressed = json.toString().getBytes();
+ byte[] compressed = Metrics.gzip(json.toString());
+ connection.addRequestProperty("User-Agent", "MCStats/7");
+ 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 (this.debug) {
+ System.out.println("[Metrics] Prepared request for " + pluginName + " uncompressed=" + uncompressed.length + " compressed=" + compressed.length);
+ }
+ OutputStream os = connection.getOutputStream();
+ os.write(compressed);
+ os.flush();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+ String response = reader.readLine();
+ os.close();
+ reader.close();
+ 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);
+ }
+ if (response.equals("1") || response.contains("This is your first update this hour")) {
+ Set set = this.graphs;
+ synchronized (set) {
+ for (Graph graph : this.graphs) {
+ for (Plotter plotter : graph.getPlotters()) {
+ plotter.reset();
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ * WARNING - Removed try catching itself - possible behaviour change.
+ */
+ public static byte[] gzip(String input) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ GZIPOutputStream gzos = null;
+ 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 e) {}
+ }
+ }
+ return baos.toByteArray();
+ }
+
+ private boolean isMineshafterPresent() {
+ try {
+ Class.forName("mineshafter.MineServer");
+ return true;
+ }
+ catch (Exception e) {
+ return false;
+ }
+ }
+
+ 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(Metrics.escapeJSON(key));
+ json.append(':');
+ if (isValueNumeric) {
+ json.append(value);
+ } else {
+ json.append(Metrics.escapeJSON(value));
+ }
+ }
+
+ private static String escapeJSON(String text) {
+ StringBuilder builder = new StringBuilder();
+ builder.append('\"');
+ block7 : for (int index = 0; index < text.length(); ++index) {
+ char chr = text.charAt(index);
+ switch (chr) {
+ case '\"':
+ case '\\': {
+ builder.append('\\');
+ builder.append(chr);
+ continue block7;
+ }
+ case '\b': {
+ builder.append("\\b");
+ continue block7;
+ }
+ case '\t': {
+ builder.append("\\t");
+ continue block7;
+ }
+ case '\n': {
+ builder.append("\\n");
+ continue block7;
+ }
+ case '\r': {
+ builder.append("\\r");
+ continue block7;
+ }
+ default: {
+ if (chr < ' ') {
+ String t = "000" + Integer.toHexString(chr);
+ builder.append("\\u" + t.substring(t.length() - 4));
+ continue block7;
+ }
+ builder.append(chr);
+ }
+ }
+ }
+ builder.append('\"');
+ return builder.toString();
+ }
+
+ private static String urlEncode(String text) throws UnsupportedEncodingException {
+ return URLEncoder.encode(text, "UTF-8");
+ }
+
+ public static abstract class Plotter {
+ private final String name;
+
+ public Plotter() {
+ this("Default");
+ }
+
+ public Plotter(String name) {
+ this.name = name;
+ }
+
+ public abstract int getValue();
+
+ public String getColumnName() {
+ return this.name;
+ }
+
+ public void reset() {
+ }
+
+ public int hashCode() {
+ return this.getColumnName().hashCode();
+ }
+
+ public boolean equals(Object object) {
+ if (!(object instanceof Plotter)) {
+ return false;
+ }
+ Plotter plotter = (Plotter)object;
+ return plotter.name.equals(this.name) && plotter.getValue() == this.getValue();
+ }
+ }
+
+ /*
+ * This class specifies class file version 49.0 but uses Java 6 signatures. Assumed Java 6.
+ */
+ public static class Graph {
+ private final String name;
+ private final Set plotters = new LinkedHashSet();
+
+ private Graph(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public void addPlotter(Plotter plotter) {
+ this.plotters.add(plotter);
+ }
+
+ public void removePlotter(Plotter plotter) {
+ this.plotters.remove(plotter);
+ }
+
+ public Set getPlotters() {
+ return Collections.unmodifiableSet(this.plotters);
+ }
+
+ public int hashCode() {
+ return this.name.hashCode();
+ }
+
+ public boolean equals(Object object) {
+ if (!(object instanceof Graph)) {
+ return false;
+ }
+ Graph graph = (Graph)object;
+ return graph.name.equals(this.name);
+ }
+
+ protected void onOptOut() {
+ }
+ }
+
+}
+
diff --git a/src/main/java/me/shansen/nbt/NbtReflection.java b/src/main/java/me/shansen/nbt/NbtReflection.java
index 44ef91e..8bd8db3 100644
--- a/src/main/java/me/shansen/nbt/NbtReflection.java
+++ b/src/main/java/me/shansen/nbt/NbtReflection.java
@@ -1,33 +1,36 @@
+/*
+ * Decompiled with CFR 0_115.
+ *
+ * Could not load the following classes:
+ * org.bukkit.Bukkit
+ * org.bukkit.inventory.ItemStack
+ */
package me.shansen.nbt;
+import java.lang.reflect.Method;
import org.bukkit.Bukkit;
import org.bukkit.inventory.ItemStack;
public class NbtReflection {
-
public static ItemStack setNewEntityTag(ItemStack itemStack, String entityType) {
try {
String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
- if(version.contains("1_7") || version.contains("1_8")) {
- // Legacy support. Can be cleaned up later.
+ if (version.contains("1_7") || version.contains("1_8")) {
return itemStack;
}
Class craftItemStack = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftItemStack");
- Object nmsItemStack = craftItemStack.getMethod("asNMSCopy", ItemStack.class).invoke(craftItemStack, itemStack);
+ Object nmsItemStack = craftItemStack.getMethod("asNMSCopy", ItemStack.class).invoke(craftItemStack, new Object[]{itemStack});
Object rootTag = Class.forName("net.minecraft.server." + version + ".NBTTagCompound").newInstance();
Object nbtEntityTag = Class.forName("net.minecraft.server." + version + ".NBTTagCompound").newInstance();
-
nbtEntityTag.getClass().getMethod("setString", String.class, String.class).invoke(nbtEntityTag, "id", entityType);
- rootTag.getClass().getMethod("set", String.class, rootTag.getClass().getSuperclass())
- .invoke(rootTag, "EntityTag", nbtEntityTag);
-
+ rootTag.getClass().getMethod("set", String.class, rootTag.getClass().getSuperclass()).invoke(rootTag, "EntityTag", nbtEntityTag);
nmsItemStack.getClass().getMethod("setTag", rootTag.getClass()).invoke(nmsItemStack, rootTag);
- return (ItemStack) craftItemStack.getMethod("asBukkitCopy", nmsItemStack.getClass())
- .invoke(craftItemStack, nmsItemStack);
- } catch (Exception ex) {
+ return (ItemStack)craftItemStack.getMethod("asBukkitCopy", nmsItemStack.getClass()).invoke(craftItemStack, nmsItemStack);
+ }
+ catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
+}
-}
\ No newline at end of file