diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..03a93b3
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,16 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+
+[*.java]
+indent_style = tab
+indent_size = 4
+trim_trailing_whitespace = true
+
+[*.yml]
+indent_style = spaces
+indent_size = 2
+trim_trailing_whitespace = true
+
diff --git a/pom.xml b/pom.xml
index d4ce54f..a1841df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,15 +1,15 @@
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.dre
brewery
- 1.3.2
+ 1.4.0
Brewery
- UTF-8
- UTF-8
+ UTF-8
+ UTF-8
@@ -33,10 +33,10 @@
maven-compiler-plugin
- 3.1
+ 2.5.1
-
- 1.6
+
+ 1.7
UTF-8
@@ -47,35 +47,19 @@
spigot-repo
https://hub.spigotmc.org/nexus/content/groups/public/
-
- true
- always
-
-
-
- vault-repo
- http://nexus.theyeticave.net/content/repositories/pub_releases
-
-
+
+ vault-repo
+ http://nexus.theyeticave.net/content/repositories/pub_releases
+
+
sk89q-repo
- http://maven.sk89q.com/artifactory/repo/
-
- true
- always
-
+ http://maven.sk89q.com/repo/
-
-
- dre-repo
- http://server.die-reiche-erethons.com/maven2
-
- true
- always
-
-
-
addstar-repo
http://maven.addstar.com.au/artifactory/ext-release-local/
@@ -84,60 +68,44 @@
always
-
+
+ md_5-releases
+ http://repo.md-5.net/content/repositories/releases/
+
-
- org.spigotmc
- spigot-api
- 1.8-R0.1-SNAPSHOT
+ org.bukkit
+ bukkit
+ 1.9-R0.1-SNAPSHOT
+
+
+ net.milkbowl.vault
+ VaultAPI
+ 1.5
+ provided
-
-
- net.milkbowl.vault
- VaultAPI
- 1.5
- provided
-
-
com.sk89q
worldguard
- 6.0.0-SNAPSHOT
+ 6.1
-
- com.dre
- managerxl
- 0.0.1-SNAPSHOT
- compile
- jar
+ com.griefcraft.lwc
+ LWCPlugin
+ 1.7.2
-
-
- com.griefcraft
- lwc
- 4.4.0
- compile
- jar
-
-
me.ryanhamshire
- griefprevention
- 7.8
+ GriefPrevention
+ 14.5.1
compile
- jar
-
- de.diddiz.LogBlock
- LogBlock
- 1.80
- compile
- jar
+ de.diddiz
+ logblock
+ 1.94
diff --git a/resources/plugin.yml b/resources/plugin.yml
index bb0bf5f..8ff27f3 100644
--- a/resources/plugin.yml
+++ b/resources/plugin.yml
@@ -1,7 +1,7 @@
name: Brewery
-version: 1.3.2
+version: 1.4.0
main: com.dre.brewery.P
-authors: [Milan Albrecht, Frank Baumann]
+authors: [Milan Albrecht, Frank Baumann, ProgrammerDan]
softdepend: [LWC, LogBlock, WorldGuard, GriefPrevention, Vault]
commands:
brewery:
@@ -110,4 +110,4 @@ permissions:
brewery.bypass.overdrink:
description: Will despite config-setting not be kicked on overdrink
brewery.bypass.teleport:
- description: Will despite config-setting not be teleported on login
\ No newline at end of file
+ description: Will despite config-setting not be teleported on login
diff --git a/src/com/dre/brewery/BIngredients.java b/src/com/dre/brewery/BIngredients.java
index 2a7874b..e26896c 100644
--- a/src/com/dre/brewery/BIngredients.java
+++ b/src/com/dre/brewery/BIngredients.java
@@ -1,16 +1,15 @@
package com.dre.brewery;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
-import java.util.HashMap;
import java.util.Set;
-
+import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.Material;
-import org.bukkit.potion.PotionEffectType;
import org.bukkit.inventory.meta.PotionMeta;
+import org.bukkit.potion.PotionEffectType;
public class BIngredients {
public static Set possibleIngredients = new HashSet();
@@ -84,7 +83,11 @@ public class BIngredients {
Brew.addOrReplaceEffects(potionMeta, brew.getEffects(), brew.getQuality());
cookedName = cookRecipe.getName(quality);
- potion.setDurability(Brew.PotionColor.valueOf(cookRecipe.getColor()).getColorId(false));
+ if (P.use1_9) {
+ potionMeta.setMainEffect(Brew.PotionColor.valueOf(cookRecipe.getColor()).getEffect());
+ } else {
+ potion.setDurability(Brew.PotionColor.valueOf(cookRecipe.getColor()).getColorId(false));
+ }
} else {
// new base potion
@@ -92,14 +95,22 @@ public class BIngredients {
if (state <= 1) {
cookedName = P.p.languageReader.get("Brew_ThickBrew");
- potion.setDurability(Brew.PotionColor.BLUE.getColorId(false));
+ if (P.use1_9) {
+ potionMeta.setMainEffect(Brew.PotionColor.BLUE.getEffect());
+ } else {
+ potion.setDurability(Brew.PotionColor.BLUE.getColorId(false));
+ }
} else {
for (Material ingredient : materials.keySet()) {
if (cookedNames.containsKey(ingredient)) {
// if more than half of the ingredients is of one kind
if (materials.get(ingredient) > (getIngredientsCount() / 2)) {
cookedName = cookedNames.get(ingredient);
- potion.setDurability(Brew.PotionColor.CYAN.getColorId(true));
+ if (P.use1_9) {
+ potionMeta.setMainEffect(Brew.PotionColor.CYAN.getEffect());
+ } else {
+ potion.setDurability(Brew.PotionColor.CYAN.getColorId(true));
+ }
}
}
}
@@ -108,7 +119,11 @@ public class BIngredients {
if (cookedName == null) {
// if no name could be found
cookedName = P.p.languageReader.get("Brew_Undefined");
- potion.setDurability(Brew.PotionColor.CYAN.getColorId(true));
+ if (P.use1_9) {
+ potionMeta.setMainEffect(Brew.PotionColor.CYAN.getEffect());
+ } else {
+ potion.setDurability(Brew.PotionColor.CYAN.getColorId(true));
+ }
}
potionMeta.setDisplayName(P.p.color("&f" + cookedName));
diff --git a/src/com/dre/brewery/BPlayer.java b/src/com/dre/brewery/BPlayer.java
index ed198a1..c577433 100644
--- a/src/com/dre/brewery/BPlayer.java
+++ b/src/com/dre/brewery/BPlayer.java
@@ -1,22 +1,21 @@
package com.dre.brewery;
import java.util.ArrayList;
-import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
import java.util.UUID;
-
+import org.bukkit.Location;
+import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
-import org.bukkit.event.player.PlayerMoveEvent;
-import org.bukkit.entity.Player;
+import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
+import org.bukkit.entity.Player;
+import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.Material;
-import org.bukkit.util.Vector;
-import org.bukkit.Location;
import org.bukkit.potion.PotionEffectType;
-import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.util.Vector;
public class BPlayer {
private static Map players = new HashMap();// Players name/uuid and BPlayer
@@ -339,10 +338,6 @@ public class BPlayer {
Location home = null;
if (homeType.equalsIgnoreCase("bed")) {
home = player.getBedSpawnLocation();
- } else if (homeType.equalsIgnoreCase("ManagerXL")) {
- if (com.dre.managerxl.MPlayer.get(player.getName()) != null) {
- home = com.dre.managerxl.MPlayer.get(player.getName()).getHome();
- }
} else if (homeType.startsWith("cmd: ")) {
player.performCommand(homeType.substring(5));
} else if (homeType.startsWith("cmd:")) {
diff --git a/src/com/dre/brewery/BRecipe.java b/src/com/dre/brewery/BRecipe.java
index 320a832..d772dc9 100644
--- a/src/com/dre/brewery/BRecipe.java
+++ b/src/com/dre/brewery/BRecipe.java
@@ -2,9 +2,8 @@ package com.dre.brewery;
import java.util.ArrayList;
import java.util.List;
-
-import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.Material;
+import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionEffectType;
@@ -205,7 +204,11 @@ public class BRecipe {
Brew brew = new Brew(uid, bIngredients, quality, distillruns, getAge(), wood, getName(5), false, false, true);
- potion.setDurability(Brew.PotionColor.valueOf(getColor()).getColorId(false));
+ if (P.use1_9) {
+ potionMeta.setMainEffect(Brew.PotionColor.valueOf(getColor()).getEffect());
+ } else {
+ potion.setDurability(Brew.PotionColor.valueOf(getColor()).getColorId(false));
+ }
potionMeta.setDisplayName(P.p.color("&f" + getName(quality)));
// This effect stores the UID in its Duration
potionMeta.addCustomEffect((PotionEffectType.REGENERATION).createEffect((uid * 4), 0), true);
diff --git a/src/com/dre/brewery/Brew.java b/src/com/dre/brewery/Brew.java
index 546f131..eb89a14 100644
--- a/src/com/dre/brewery/Brew.java
+++ b/src/com/dre/brewery/Brew.java
@@ -1,22 +1,20 @@
package com.dre.brewery;
-import java.util.Map;
-import java.util.HashMap;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
-
+import java.util.Map;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.inventory.BrewerInventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
-import org.bukkit.inventory.BrewerInventory;
public class Brew {
// represents the liquid in the brewed Potions
-
public static Map potions = new HashMap();
public static Boolean colorInBarrels; // color the Lore while in Barrels
public static Boolean colorInBrewer; // color the Lore while in Brewer
@@ -87,7 +85,6 @@ public class Brew {
return null;
}
-
// returns UID of custom Potion item
public static int getUID(ItemStack item) {
return getUID((PotionMeta) item.getItemMeta());
@@ -210,7 +207,7 @@ public class Brew {
alc *= 1 - ((float) (10 - quality) * 0.04);
// distillable Potions should have half alc after one and full alc after all needed distills
alc /= 2;
- alc *= 1.0F + ((float) distillRuns / currentRecipe.getDistillRuns()) ;
+ alc *= 1.0F + ((float) distillRuns / currentRecipe.getDistillRuns());
} else {
// quality decides 10% - 100%
alc *= ((float) quality / 10.0);
@@ -294,7 +291,15 @@ public class Brew {
this.stat = stat;
if (currentRecipe != null && canDistill()) {
if (stat) {
- potion.setDurability(PotionColor.valueOf(currentRecipe.getColor()).getColorId(false));
+ if (P.use1_9) {
+ PotionMeta potionMeta = (PotionMeta) potion.getItemMeta();
+ potionMeta.setMainEffect(PotionColor.valueOf(currentRecipe.getColor()).getEffect());
+ } else {
+ potion.setDurability(PotionColor.valueOf(currentRecipe.getColor()).getColorId(false));
+ }
+ } else if (P.use1_9) {
+ PotionMeta potionMeta = (PotionMeta) potion.getItemMeta();
+ potionMeta.setMainEffect(PotionColor.valueOf(currentRecipe.getColor()).getEffect());
} else {
potion.setDurability(PotionColor.valueOf(currentRecipe.getColor()).getColorId(true));
}
@@ -302,7 +307,6 @@ public class Brew {
}
// Distilling section ---------------
-
// distill all custom potions in the brewer
public static void distillAll(BrewerInventory inv, Boolean[] contents) {
int slot = 0;
@@ -332,12 +336,21 @@ public class Brew {
addOrReplaceEffects(potionMeta, getEffects(), quality);
potionMeta.setDisplayName(P.p.color("&f" + recipe.getName(quality)));
- slotItem.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(canDistill()));
+ if (P.use1_9) {
+ potionMeta.setMainEffect(PotionColor.valueOf(recipe.getColor()).getEffect());
+ } else {
+ slotItem.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(canDistill()));
+ }
+
} else {
quality = 0;
removeEffects(potionMeta);
potionMeta.setDisplayName(P.p.color("&f" + P.p.languageReader.get("Brew_DistillUndefined")));
- slotItem.setDurability(PotionColor.GREY.getColorId(canDistill()));
+ if (P.use1_9) {
+ potionMeta.setMainEffect(PotionColor.GREY.getEffect());
+ } else {
+ slotItem.setDurability(PotionColor.GREY.getColorId(canDistill()));
+ }
}
// Distill Lore
@@ -356,7 +369,6 @@ public class Brew {
}
// Ageing Section ------------------
-
public void age(ItemStack item, float time, byte woodType) {
if (stat) {
return;
@@ -364,15 +376,13 @@ public class Brew {
PotionMeta potionMeta = (PotionMeta) item.getItemMeta();
ageTime += time;
-
+
// if younger than half a day, it shouldnt get aged form
if (ageTime > 0.5) {
if (wood == 0) {
wood = woodType;
- } else {
- if (wood != woodType) {
- woodShift(time, woodType);
- }
+ } else if (wood != woodType) {
+ woodShift(time, woodType);
}
BRecipe recipe = ingredients.getAgeRecipe(wood, ageTime, distillRuns > 0);
if (recipe != null) {
@@ -381,12 +391,20 @@ public class Brew {
addOrReplaceEffects(potionMeta, getEffects(), quality);
potionMeta.setDisplayName(P.p.color("&f" + recipe.getName(quality)));
- item.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(canDistill()));
+ if (P.use1_9) {
+ potionMeta.setMainEffect(PotionColor.valueOf(recipe.getColor()).getEffect());
+ } else {
+ item.setDurability(PotionColor.valueOf(recipe.getColor()).getColorId(canDistill()));
+ }
} else {
quality = 0;
removeEffects(potionMeta);
potionMeta.setDisplayName(P.p.color("&f" + P.p.languageReader.get("Brew_BadPotion")));
- item.setDurability(PotionColor.GREY.getColorId(canDistill()));
+ if (P.use1_9) {
+ potionMeta.setMainEffect(PotionColor.GREY.getEffect());
+ } else {
+ item.setDurability(PotionColor.GREY.getColorId(canDistill()));
+ }
}
}
@@ -434,7 +452,6 @@ public class Brew {
}
// Lore -----------
-
// Converts to/from qualitycolored Lore
public void convertLore(PotionMeta meta, Boolean toQuality) {
if (currentRecipe == null) {
@@ -521,14 +538,12 @@ public class Brew {
if (currentRecipe.getWood() > 0) {
int quality = ingredients.getWoodQuality(currentRecipe, wood);
addOrReplaceLore(meta, getQualityColor(quality), P.p.languageReader.get("Brew_Woodtype"));
- } else {
- if (meta.hasLore()) {
- List existingLore = meta.getLore();
- int index = indexOfSubstring(existingLore, P.p.languageReader.get("Brew_Woodtype"));
- if (index > -1) {
- existingLore.remove(index);
- meta.setLore(existingLore);
- }
+ } else if (meta.hasLore()) {
+ List existingLore = meta.getLore();
+ int index = indexOfSubstring(existingLore, P.p.languageReader.get("Brew_Woodtype"));
+ if (index > -1) {
+ existingLore.remove(index);
+ meta.setLore(existingLore);
}
}
}
@@ -587,7 +602,7 @@ public class Brew {
}
// True if the PotionMeta has colored Lore
- public static Boolean hasColorLore(PotionMeta meta) {
+ public static Boolean hasColorLore(PotionMeta meta) {
return meta.hasLore() && !meta.getLore().get(1).startsWith(P.p.color("&7"));
}
@@ -645,23 +660,25 @@ public class Brew {
}
public static enum PotionColor {
- PINK(1),
- CYAN(2),
- ORANGE(3),
- GREEN(4),
- BRIGHT_RED(5),
- BLUE(6),
- BLACK(8),
- RED(9),
- GREY(10),
- WATER(11),
- DARK_RED(12),
- BRIGHT_GREY(14);
+ PINK(1, PotionEffectType.REGENERATION),
+ CYAN(2, PotionEffectType.SPEED),
+ ORANGE(3, PotionEffectType.FIRE_RESISTANCE),
+ GREEN(4, PotionEffectType.POISON),
+ BRIGHT_RED(5, PotionEffectType.HEAL),
+ BLUE(6, PotionEffectType.NIGHT_VISION),
+ BLACK(8, PotionEffectType.WEAKNESS),
+ RED(9, PotionEffectType.INCREASE_DAMAGE),
+ GREY(10, PotionEffectType.SLOW),
+ WATER(11, PotionEffectType.WATER_BREATHING),
+ DARK_RED(12, PotionEffectType.HARM),
+ BRIGHT_GREY(14, PotionEffectType.INVISIBILITY);
private final int colorId;
+ private final PotionEffectType effect;
- private PotionColor(int colorId) {
+ private PotionColor(int colorId, PotionEffectType effect) {
this.colorId = colorId;
+ this.effect = effect;
}
// gets the Damage Value, that sets a color on the potion
@@ -672,6 +689,11 @@ public class Brew {
}
return (short) (colorId + 32);
}
+
+ public PotionEffectType getEffect() {
+ return effect;
+ }
+
}
-}
\ No newline at end of file
+}
diff --git a/src/com/dre/brewery/P.java b/src/com/dre/brewery/P.java
index c69fabb..f71d447 100644
--- a/src/com/dre/brewery/P.java
+++ b/src/com/dre/brewery/P.java
@@ -1,46 +1,44 @@
package com.dre.brewery;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Map;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.ListIterator;
-import java.util.HashMap;
-import java.io.IOException;
-import java.io.File;
-import java.util.UUID;
-
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.plugin.java.JavaPlugin;
-import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.configuration.file.YamlConfiguration;
-import org.bukkit.configuration.ConfigurationSection;
-
+import com.dre.brewery.filedata.*;
+import com.dre.brewery.integration.LogBlockBarrel;
import com.dre.brewery.integration.WGBarrel;
import com.dre.brewery.integration.WGBarrelNew;
import com.dre.brewery.integration.WGBarrelOld;
-import org.apache.commons.lang.math.NumberUtils;
-import org.bukkit.event.HandlerList;
-import org.bukkit.Bukkit;
-import org.bukkit.World;
-import org.bukkit.Location;
-import org.bukkit.command.CommandSender;
-import org.bukkit.ChatColor;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-
import com.dre.brewery.listeners.*;
-import com.dre.brewery.filedata.*;
-import com.dre.brewery.integration.LogBlockBarrel;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.UUID;
+import org.apache.commons.lang.math.NumberUtils;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.block.Block;
+import org.bukkit.command.CommandSender;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.event.HandlerList;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.plugin.java.JavaPlugin;
public class P extends JavaPlugin {
public static P p;
public static String configVersion = "1.3.1";
public static boolean debug;
public static boolean useUUID;
+ public static boolean use1_9;
public static boolean updateCheck;
// Third Party Enabled
@@ -57,6 +55,7 @@ public class P extends JavaPlugin {
public EntityListener entityListener;
public InventoryListener inventoryListener;
public WorldListener worldListener;
+ public Compat1_9 compat1_9;
// Language
public String language;
@@ -68,7 +67,12 @@ public class P extends JavaPlugin {
// Version check
String v = Bukkit.getBukkitVersion();
- useUUID = !v.matches(".*1\\.[1-6].*") && !v.matches(".*1\\.7\\.[0-5].*");
+ useUUID = !v.matches(".*1\\.[0-6].*") && !v.matches(".*1\\.7\\.[0-5].*");
+ use1_9 = !v.matches(".*1\\.[0-8].*");
+ if (use1_9) {
+ log("&cExperimental support for Bukkit 1.9 enabled.");
+ log("&cPlease note that the changes of 1.9 make a build of Brewery with the same quality as for older versions impossible.");
+ }
// load the Config
try {
@@ -94,6 +98,7 @@ public class P extends JavaPlugin {
entityListener = new EntityListener();
inventoryListener = new InventoryListener();
worldListener = new WorldListener();
+ compat1_9 = new Compat1_9();
getCommand("Brewery").setExecutor(new CommandListener());
p.getServer().getPluginManager().registerEvents(blockListener, p);
@@ -101,6 +106,9 @@ public class P extends JavaPlugin {
p.getServer().getPluginManager().registerEvents(entityListener, p);
p.getServer().getPluginManager().registerEvents(inventoryListener, p);
p.getServer().getPluginManager().registerEvents(worldListener, p);
+ if (use1_9) {
+ p.getServer().getPluginManager().registerEvents(compat1_9, p);
+ }
// Heartbeat
p.getServer().getScheduler().runTaskTimer(p, new BreweryRunnable(), 650, 1200);
diff --git a/src/com/dre/brewery/integration/GriefPreventionBarrel.java b/src/com/dre/brewery/integration/GriefPreventionBarrel.java
index a992d16..421c42f 100644
--- a/src/com/dre/brewery/integration/GriefPreventionBarrel.java
+++ b/src/com/dre/brewery/integration/GriefPreventionBarrel.java
@@ -1,42 +1,47 @@
package com.dre.brewery.integration;
+import com.dre.brewery.P;
+import me.ryanhamshire.GriefPrevention.Claim;
+import me.ryanhamshire.GriefPrevention.GriefPrevention;
+import me.ryanhamshire.GriefPrevention.PlayerData;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
-import com.dre.brewery.P;
-import me.ryanhamshire.GriefPrevention.Configuration.WorldConfig;
-import me.ryanhamshire.GriefPrevention.GriefPrevention;
-import me.ryanhamshire.GriefPrevention.Messages;
-import me.ryanhamshire.GriefPrevention.PlayerData;
-import me.ryanhamshire.GriefPrevention.TextMode;
-
public class GriefPreventionBarrel {
+
+ static P brewery = P.p;
+ static GriefPrevention griefPrevention = GriefPrevention.instance;
+
public static boolean checkAccess(Player player, Block sign) {
+ PlayerData playerData = griefPrevention.dataStore.getPlayerData(player.getUniqueId());
- WorldConfig wc = GriefPrevention.instance.getWorldCfg(player.getWorld());
- /*if (!wc.Enabled()) {
+ if (!griefPrevention.claimsEnabledForWorld(player.getWorld()) || playerData.ignoreClaims || !griefPrevention.config_claims_preventTheft) {
return true;
- }*/
-
- PlayerData playerData = GriefPrevention.instance.dataStore.getPlayerData(player.getName());
+ }
// block container use during pvp combat
- if (playerData.inPvpCombat() && wc.getPvPBlockContainers()) {
- GriefPrevention.sendMessage(player, TextMode.Err, Messages.PvPNoContainers);
+ if (playerData.inPvpCombat()) {
+ brewery.msg(player, brewery.languageReader.get("Error_NoBarrelAccess"));
return false;
}
// check permissions for the claim the Barrel is in
- if (wc.getContainersRules().Allowed(sign.getLocation(), player, true).Denied()) {
- P.p.msg(player, P.p.languageReader.get("Error_NoBarrelAccess"));
- return false;
+ Claim claim = griefPrevention.dataStore.getClaimAt(sign.getLocation(), false, playerData.lastClaim);
+ if (claim != null) {
+ playerData.lastClaim = claim;
+ String noContainersReason = claim.allowContainers(player);
+ if (noContainersReason != null) {
+ brewery.msg(player, brewery.languageReader.get("Error_NoBarrelAccess"));
+ return false;
+ }
}
// drop any pvp protection, as the player opens a barrel
if (playerData.pvpImmune) {
playerData.pvpImmune = false;
- GriefPrevention.sendMessage(player, TextMode.Warn, Messages.PvPImmunityEnd);
}
+
return true;
}
+
}
diff --git a/src/com/dre/brewery/listeners/Compat1_9.java b/src/com/dre/brewery/listeners/Compat1_9.java
new file mode 100644
index 0000000..c42fca8
--- /dev/null
+++ b/src/com/dre/brewery/listeners/Compat1_9.java
@@ -0,0 +1,31 @@
+package com.dre.brewery.listeners;
+
+import com.dre.brewery.Brew;
+import org.bukkit.Material;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerItemConsumeEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.PotionMeta;
+
+// Workaround to remove unwanted potion effects
+public class Compat1_9 implements Listener {
+
+ @EventHandler
+ public void onPlayerDrink(PlayerItemConsumeEvent event) {
+ ItemStack item = event.getItem();
+ Brew brew = Brew.get(item);
+ if (brew == null) {
+ return;
+ }
+
+ if (item.getType() == Material.POTION) {
+ try {
+ PotionMeta meta = (PotionMeta) item.getItemMeta();
+ meta.setMainEffect(null);
+ item.setItemMeta(meta);
+ } catch (Exception exception) {}
+ }
+ }
+
+}
diff --git a/src/com/dre/brewery/listeners/InventoryListener.java b/src/com/dre/brewery/listeners/InventoryListener.java
index dea31a0..c75aed6 100644
--- a/src/com/dre/brewery/listeners/InventoryListener.java
+++ b/src/com/dre/brewery/listeners/InventoryListener.java
@@ -1,16 +1,28 @@
package com.dre.brewery.listeners;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.UUID;
+
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockState;
+import org.bukkit.block.BrewingStand;
+import org.bukkit.entity.HumanEntity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.BrewEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
+import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.inventory.InventoryPickupItemEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.BrewerInventory;
+import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.scheduler.BukkitRunnable;
+import org.bukkit.Bukkit;
import org.bukkit.Material;
import com.dre.brewery.Barrel;
@@ -18,8 +30,148 @@ import com.dre.brewery.Brew;
import com.dre.brewery.P;
import com.dre.brewery.integration.LogBlockBarrel;
+/**
+ * Updated for 1.9 to replicate the "Brewing" process for distilling.
+ * Because of how metadata has changed, the brewer no longer triggers as previously described.
+ * So, I've added some event tracking and manual forcing of the brewing "animation" if the
+ * set of ingredients in the brewer can be distilled.
+ * Nothing here should interfere with vanilla brewing.
+ *
+ * Note in testing I did discover a few ways to "hack" brewing to distill your brews alongside
+ * potions; put fuel and at least one "valid" water bottle w/ a brewing component. You can distill
+ * two brews this way, just remove them before the "final" distillation or you will actually
+ * brew the potion as well.
+ *
+ * @author ProgrammerDan (1.9 distillation update only)
+ */
public class InventoryListener implements Listener {
+
+ /* === Recreating manually the prior BrewEvent behavior. === */
+ private HashSet trackedBrewmen = new HashSet();
+ private HashMap trackedBrewers = new HashMap();
+
+ /**
+ * Start tracking distillation for a person when they open the brewer window.
+ * @param event
+ */
+ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
+ public void onBrewerOpen(InventoryOpenEvent event) {
+ if (!P.use1_9) return;
+ HumanEntity player = event.getPlayer();
+ Inventory inv = event.getInventory();
+ if (player == null || inv == null || !(inv instanceof BrewerInventory)) return;
+
+ P.p.debugLog("Starting brew inventory tracking");
+ trackedBrewmen.add(player.getUniqueId());
+ }
+
+ /**
+ * Stop tracking distillation for a person when they close the brewer window.
+ * @param event
+ */
+ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
+ public void onBrewerClose(InventoryCloseEvent event) {
+ if (!P.use1_9) return;
+ HumanEntity player = event.getPlayer();
+ Inventory inv = event.getInventory();
+ if (player == null || inv == null || !(inv instanceof BrewerInventory)) return;
+
+ P.p.debugLog("Stopping brew inventory tracking");
+ trackedBrewmen.remove(player.getUniqueId());
+ }
+ /**
+ * Clicking can either start or stop the new brew distillation tracking.
+ * Note that server restart will halt any ongoing brewing processes and
+ * they will _not_ restart until a new click event.
+ *
+ * @param event the Click event.
+ */
+ @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
+ public void onBrewerClick(InventoryClickEvent event) {
+ if (!P.use1_9) return;
+ HumanEntity player = event.getWhoClicked();
+ Inventory inv = event.getInventory();
+ if (player == null || inv == null || !(inv instanceof BrewerInventory)) return;
+
+ UUID puid = player.getUniqueId();
+ if (!trackedBrewmen.contains(puid)) return;
+
+ if (InventoryType.BREWING != inv.getType()) return;
+
+ BrewerInventory brewer = (BrewerInventory) inv;
+ final Block brewery = brewer.getHolder().getBlock();
+
+ // If we were already tracking the brewer, cancel any ongoing event due to the click.
+ Integer curTask = trackedBrewers.get(brewery);
+ if (curTask != null) {
+ Bukkit.getScheduler().cancelTask(curTask); // cancel prior
+ }
+
+ // Now check if we should bother to track it.
+ trackedBrewers.put(brewery, new BukkitRunnable() {
+ private int brewTime = 401;
+ @Override
+ public void run() {
+ BlockState now = brewery.getState();
+ if (now instanceof BrewingStand) {
+ BrewingStand stand = (BrewingStand) now;
+ // check if still custom
+ BrewerInventory brewer = stand.getInventory();
+ if (isCustomAndDistill(brewer) ) {
+
+ // Still a valid brew distillation
+ brewTime = brewTime - 1; // count down.
+ stand.setBrewingTime(brewTime); // arbitrary for now
+
+ if (brewTime <= 1) { // Done!
+ BrewEvent doBrew = new BrewEvent(brewery, brewer);
+ Bukkit.getServer().getPluginManager().callEvent(doBrew);
+ if (!doBrew.isCancelled()) { // BrewEvent _wasn't_ cancelled.
+ this.cancel();
+ trackedBrewers.remove(brewery);
+ stand.setBrewingTime(0);
+ P.p.debugLog("All done distilling");
+ } else {
+ brewTime = 401; // go again.
+ P.p.debugLog("Can distill more! Continuing.");
+ }
+ }
+ } else {
+ this.cancel();
+ trackedBrewers.remove(brewery);
+ }
+ } else {
+ this.cancel();
+ trackedBrewers.remove(brewery);
+ P.p.debugLog("The block was replaced; not a brewing stand.");
+ }
+ }
+ }.runTaskTimer(P.p, 2l, 1l).getTaskId());
+ }
+
+ private boolean isCustomAndDistill(BrewerInventory brewer) {
+ ItemStack item = brewer.getItem(3); // ingredient
+ if (item == null || Material.GLOWSTONE_DUST != item.getType()) return false; // need dust in the top slot.
+ Boolean[] contents = new Boolean[3];
+ for (int slot = 0; slot < 3; slot++) {
+ item = brewer.getItem(slot);
+ contents[slot] = false;
+ if (item != null) {
+ if (item.getType() == Material.POTION) {
+ if (item.hasItemMeta()) {
+ int uid = Brew.getUID(item);
+ Brew pot = Brew.potions.get(uid);
+ if (pot != null && pot.canDistill()) { // need at least one distillable potion.
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onBrew(BrewEvent event) {
int slot = 0;