mirror of
https://github.com/exituser/Brewery.git
synced 2026-09-17 06:38:56 +00:00
Implemented Lore Save system
This commit is contained in:
@@ -4,7 +4,6 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.PotionMeta;
|
import org.bukkit.inventory.meta.PotionMeta;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
@@ -17,30 +16,39 @@ public class BIngredients {
|
|||||||
public static Map<Material, String> cookedNames = new HashMap<>();
|
public static Map<Material, String> cookedNames = new HashMap<>();
|
||||||
private static int lastId = 0;
|
private static int lastId = 0;
|
||||||
|
|
||||||
private int id;
|
private int id; // Legacy
|
||||||
private ArrayList<ItemStack> ingredients = new ArrayList<>();
|
private List<ItemStack> ingredients = new ArrayList<>();
|
||||||
private Map<Material, Integer> materials = new HashMap<>(); // Merged List Of ingredients that doesnt consider Durability
|
private Map<Material, Integer> materials = new HashMap<>(); // Merged List Of ingredients that doesnt consider Durability
|
||||||
private int cookedTime;
|
private int cookedTime;
|
||||||
|
|
||||||
// Represents ingredients in Cauldron, Brew
|
// Represents ingredients in Cauldron, Brew
|
||||||
// Init a new BIngredients
|
// Init a new BIngredients
|
||||||
public BIngredients() {
|
public BIngredients() {
|
||||||
this.id = lastId;
|
//this.id = lastId;
|
||||||
lastId++;
|
//lastId++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load from File
|
// Load from File
|
||||||
public BIngredients(ArrayList<ItemStack> ingredients, int cookedTime) {
|
public BIngredients(List<ItemStack> ingredients, int cookedTime) {
|
||||||
this.ingredients = ingredients;
|
this.ingredients = ingredients;
|
||||||
this.cookedTime = cookedTime;
|
this.cookedTime = cookedTime;
|
||||||
this.id = lastId;
|
//this.id = lastId;
|
||||||
lastId++;
|
//lastId++;
|
||||||
|
|
||||||
for (ItemStack item : ingredients) {
|
for (ItemStack item : ingredients) {
|
||||||
addMaterial(item);
|
addMaterial(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load from legacy Brew section
|
||||||
|
public BIngredients(List<ItemStack> ingredients, int cookedTime, boolean legacy) {
|
||||||
|
this(ingredients, cookedTime);
|
||||||
|
if (legacy) {
|
||||||
|
this.id = lastId;
|
||||||
|
lastId++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Add an ingredient to this
|
// Add an ingredient to this
|
||||||
public void add(ItemStack ingredient) {
|
public void add(ItemStack ingredient) {
|
||||||
addMaterial(ingredient);
|
addMaterial(ingredient);
|
||||||
@@ -72,14 +80,15 @@ public class BIngredients {
|
|||||||
cookedTime = state;
|
cookedTime = state;
|
||||||
String cookedName = null;
|
String cookedName = null;
|
||||||
BRecipe cookRecipe = getCookRecipe();
|
BRecipe cookRecipe = getCookRecipe();
|
||||||
|
Brew brew;
|
||||||
|
|
||||||
int uid = Brew.generateUID();
|
//int uid = Brew.generateUID();
|
||||||
|
|
||||||
if (cookRecipe != null) {
|
if (cookRecipe != null) {
|
||||||
// Potion is best with cooking only
|
// Potion is best with cooking only
|
||||||
int quality = (int) Math.round((getIngredientQuality(cookRecipe) + getCookingQuality(cookRecipe, false)) / 2.0);
|
int quality = (int) Math.round((getIngredientQuality(cookRecipe) + getCookingQuality(cookRecipe, false)) / 2.0);
|
||||||
P.p.debugLog("cooked potion has Quality: " + quality);
|
P.p.debugLog("cooked potion has Quality: " + quality);
|
||||||
Brew brew = new Brew(uid, quality, cookRecipe, this);
|
brew = new Brew(quality, cookRecipe, this);
|
||||||
Brew.addOrReplaceEffects(potionMeta, brew.getEffects(), brew.getQuality());
|
Brew.addOrReplaceEffects(potionMeta, brew.getEffects(), brew.getQuality());
|
||||||
|
|
||||||
cookedName = cookRecipe.getName(quality);
|
cookedName = cookRecipe.getName(quality);
|
||||||
@@ -87,7 +96,7 @@ public class BIngredients {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
// new base potion
|
// new base potion
|
||||||
new Brew(uid, this);
|
brew = new Brew(this);
|
||||||
|
|
||||||
if (state <= 1) {
|
if (state <= 1) {
|
||||||
cookedName = P.p.languageReader.get("Brew_ThickBrew");
|
cookedName = P.p.languageReader.get("Brew_ThickBrew");
|
||||||
@@ -117,14 +126,17 @@ public class BIngredients {
|
|||||||
uid *= 4;
|
uid *= 4;
|
||||||
}
|
}
|
||||||
// This effect stores the UID in its Duration
|
// This effect stores the UID in its Duration
|
||||||
potionMeta.addCustomEffect((PotionEffectType.REGENERATION).createEffect(uid, 0), true);
|
//potionMeta.addCustomEffect((PotionEffectType.REGENERATION).createEffect((uid * 4), 0), true);
|
||||||
|
|
||||||
|
brew.touch();
|
||||||
|
brew.save(potionMeta);
|
||||||
potion.setItemMeta(potionMeta);
|
potion.setItemMeta(potionMeta);
|
||||||
|
|
||||||
return potion;
|
return potion;
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns amount of ingredients
|
// returns amount of ingredients
|
||||||
private int getIngredientsCount() {
|
public int getIngredientsCount() {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (ItemStack item : ingredients) {
|
for (ItemStack item : ingredients) {
|
||||||
count += item.getAmount();
|
count += item.getAmount();
|
||||||
@@ -290,7 +302,7 @@ public class BIngredients {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// returns pseudo quality of distilling. 0 if doesnt match the need of the recipes distilling
|
// returns pseudo quality of distilling. 0 if doesnt match the need of the recipes distilling
|
||||||
public int getDistillQuality(BRecipe recipe, int distillRuns) {
|
public int getDistillQuality(BRecipe recipe, byte distillRuns) {
|
||||||
if (recipe.needsDistilling() != distillRuns > 0) {
|
if (recipe.needsDistilling() != distillRuns > 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -316,7 +328,12 @@ public class BIngredients {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Creates a copy ingredients
|
// Creates a copy ingredients
|
||||||
|
@Override
|
||||||
public BIngredients clone() {
|
public BIngredients clone() {
|
||||||
|
try {
|
||||||
|
super.clone();
|
||||||
|
} catch (CloneNotSupportedException ingored) {
|
||||||
|
}
|
||||||
BIngredients copy = new BIngredients();
|
BIngredients copy = new BIngredients();
|
||||||
copy.ingredients.addAll(ingredients);
|
copy.ingredients.addAll(ingredients);
|
||||||
copy.materials.putAll(materials);
|
copy.materials.putAll(materials);
|
||||||
@@ -324,7 +341,14 @@ public class BIngredients {
|
|||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testStore(DataOutputStream out) throws IOException {
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "BIngredients{" +
|
||||||
|
"cookedTime=" + cookedTime +
|
||||||
|
", total ingedients: " + getIngredientsCount() + '}';
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public void testStore(DataOutputStream out) throws IOException {
|
||||||
out.writeInt(cookedTime);
|
out.writeInt(cookedTime);
|
||||||
out.writeByte(ingredients.size());
|
out.writeByte(ingredients.size());
|
||||||
for (ItemStack item : ingredients) {
|
for (ItemStack item : ingredients) {
|
||||||
@@ -353,9 +377,34 @@ public class BIngredients {
|
|||||||
P.p.log("amount wrong");
|
P.p.log("amount wrong");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
public void save(DataOutputStream out) throws IOException {
|
||||||
|
out.writeInt(cookedTime);
|
||||||
|
out.writeByte(ingredients.size());
|
||||||
|
for (ItemStack item : ingredients) {
|
||||||
|
out.writeUTF(item.getType().name());
|
||||||
|
out.writeShort(item.getAmount());
|
||||||
|
out.writeShort(item.getDurability());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BIngredients load(DataInputStream in) throws IOException {
|
||||||
|
int cookedTime = in.readInt();
|
||||||
|
byte size = in.readByte();
|
||||||
|
List<ItemStack> ing = new ArrayList<>(size);
|
||||||
|
for (; size > 0; size--) {
|
||||||
|
Material mat = Material.getMaterial(in.readUTF());
|
||||||
|
if (mat != null) {
|
||||||
|
ing.add(new ItemStack(mat, in.readShort(), in.readShort()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new BIngredients(ing, cookedTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
// saves data into main Ingredient section. Returns the save id
|
// saves data into main Ingredient section. Returns the save id
|
||||||
|
// Only needed for legacy potions
|
||||||
|
@Deprecated
|
||||||
public int save(ConfigurationSection config) {
|
public int save(ConfigurationSection config) {
|
||||||
String path = "Ingredients." + id;
|
String path = "Ingredients." + id;
|
||||||
if (cookedTime != 0) {
|
if (cookedTime != 0) {
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.PotionMeta;
|
import org.bukkit.inventory.meta.PotionMeta;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -14,7 +13,7 @@ public class BRecipe {
|
|||||||
private String[] name;
|
private String[] name;
|
||||||
private ArrayList<ItemStack> ingredients = new ArrayList<>(); // material and amount
|
private ArrayList<ItemStack> ingredients = new ArrayList<>(); // material and amount
|
||||||
private int cookingTime; // time to cook in cauldron
|
private int cookingTime; // time to cook in cauldron
|
||||||
private int distillruns; // runs through the brewer
|
private byte distillruns; // runs through the brewer
|
||||||
private int distillTime; // time for one distill run in seconds
|
private int distillTime; // time for one distill run in seconds
|
||||||
private byte wood; // type of wood the barrel has to consist of
|
private byte wood; // type of wood the barrel has to consist of
|
||||||
private int age; // time in minecraft days for the potions to age in barrels
|
private int age; // time in minecraft days for the potions to age in barrels
|
||||||
@@ -90,7 +89,12 @@ public class BRecipe {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.cookingTime = configSectionRecipes.getInt(recipeId + ".cookingtime", 1);
|
this.cookingTime = configSectionRecipes.getInt(recipeId + ".cookingtime", 1);
|
||||||
this.distillruns = configSectionRecipes.getInt(recipeId + ".distillruns", 0);
|
int dis = configSectionRecipes.getInt(recipeId + ".distillruns", 0);
|
||||||
|
if (dis > Byte.MAX_VALUE) {
|
||||||
|
this.distillruns = Byte.MAX_VALUE;
|
||||||
|
} else {
|
||||||
|
this.distillruns = (byte) dis;
|
||||||
|
}
|
||||||
this.distillTime = configSectionRecipes.getInt(recipeId + ".distilltime", 0) * 20;
|
this.distillTime = configSectionRecipes.getInt(recipeId + ".distilltime", 0) * 20;
|
||||||
this.wood = (byte) configSectionRecipes.getInt(recipeId + ".wood", 0);
|
this.wood = (byte) configSectionRecipes.getInt(recipeId + ".wood", 0);
|
||||||
this.age = configSectionRecipes.getInt(recipeId + ".age", 0);
|
this.age = configSectionRecipes.getInt(recipeId + ".age", 0);
|
||||||
@@ -247,8 +251,6 @@ public class BRecipe {
|
|||||||
ItemStack potion = new ItemStack(Material.POTION);
|
ItemStack potion = new ItemStack(Material.POTION);
|
||||||
PotionMeta potionMeta = (PotionMeta) potion.getItemMeta();
|
PotionMeta potionMeta = (PotionMeta) potion.getItemMeta();
|
||||||
|
|
||||||
int uid = Brew.generateUID();
|
|
||||||
|
|
||||||
ArrayList<ItemStack> list = new ArrayList<>(ingredients.size());
|
ArrayList<ItemStack> list = new ArrayList<>(ingredients.size());
|
||||||
for (ItemStack item : ingredients) {
|
for (ItemStack item : ingredients) {
|
||||||
if (item.getDurability() == -1) {
|
if (item.getDurability() == -1) {
|
||||||
@@ -260,7 +262,7 @@ public class BRecipe {
|
|||||||
|
|
||||||
BIngredients bIngredients = new BIngredients(list, cookingTime);
|
BIngredients bIngredients = new BIngredients(list, cookingTime);
|
||||||
|
|
||||||
Brew brew = new Brew(uid, bIngredients, quality, distillruns, getAge(), wood, getName(5), false, false, true, 0);
|
Brew brew = new Brew(bIngredients, quality, distillruns, getAge(), wood, getName(5), false, false, true);
|
||||||
|
|
||||||
Brew.PotionColor.fromString(getColor()).colorBrew(potionMeta, potion, false);
|
Brew.PotionColor.fromString(getColor()).colorBrew(potionMeta, potion, false);
|
||||||
potionMeta.setDisplayName(P.p.color("&f" + getName(quality)));
|
potionMeta.setDisplayName(P.p.color("&f" + getName(quality)));
|
||||||
@@ -270,11 +272,12 @@ public class BRecipe {
|
|||||||
uid *= 4;
|
uid *= 4;
|
||||||
}
|
}
|
||||||
// This effect stores the UID in its Duration
|
// This effect stores the UID in its Duration
|
||||||
potionMeta.addCustomEffect((PotionEffectType.REGENERATION).createEffect(uid, 0), true);
|
//potionMeta.addCustomEffect((PotionEffectType.REGENERATION).createEffect((uid * 4), 0), true);
|
||||||
|
|
||||||
brew.convertLore(potionMeta, false);
|
brew.convertLore(potionMeta, false);
|
||||||
Brew.addOrReplaceEffects(potionMeta, effects, quality);
|
Brew.addOrReplaceEffects(potionMeta, effects, quality);
|
||||||
brew.touch();
|
brew.touch();
|
||||||
|
brew.save(potionMeta);
|
||||||
|
|
||||||
potion.setItemMeta(potionMeta);
|
potion.setItemMeta(potionMeta);
|
||||||
return potion;
|
return potion;
|
||||||
@@ -322,7 +325,7 @@ public class BRecipe {
|
|||||||
return cookingTime;
|
return cookingTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDistillRuns() {
|
public byte getDistillRuns() {
|
||||||
return distillruns;
|
return distillruns;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -358,4 +361,8 @@ public class BRecipe {
|
|||||||
return effects;
|
return effects;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "BRecipe{" + getName(5) + '}';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+248
-98
@@ -1,11 +1,16 @@
|
|||||||
package com.dre.brewery;
|
package com.dre.brewery;
|
||||||
|
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
|
import com.dre.brewery.lore.Base91DecoderStream;
|
||||||
|
import com.dre.brewery.lore.Base91EncoderStream;
|
||||||
|
import com.dre.brewery.lore.LoreLoadStream;
|
||||||
|
import com.dre.brewery.lore.LoreSaveStream;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.inventory.BrewerInventory;
|
import org.bukkit.inventory.BrewerInventory;
|
||||||
import org.bukkit.inventory.ItemFlag;
|
import org.bukkit.inventory.ItemFlag;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.inventory.meta.PotionMeta;
|
import org.bukkit.inventory.meta.PotionMeta;
|
||||||
import org.bukkit.potion.PotionData;
|
import org.bukkit.potion.PotionData;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
@@ -24,40 +29,35 @@ public class Brew {
|
|||||||
|
|
||||||
// represents the liquid in the brewed Potions
|
// represents the liquid in the brewed Potions
|
||||||
|
|
||||||
public static Map<Integer, Brew> potions = new HashMap<>();
|
public static Map<Integer, Brew> legacyPotions = new HashMap<>();
|
||||||
public static long installTime = System.currentTimeMillis(); // plugin install time in millis after epoch
|
public static long installTime = System.currentTimeMillis(); // plugin install time in millis after epoch
|
||||||
public static Boolean colorInBarrels; // color the Lore while in Barrels
|
public static Boolean colorInBarrels; // color the Lore while in Barrels
|
||||||
public static Boolean colorInBrewer; // color the Lore while in Brewer
|
public static Boolean colorInBrewer; // color the Lore while in Brewer
|
||||||
|
|
||||||
private BIngredients ingredients;
|
private BIngredients ingredients;
|
||||||
private int quality;
|
private int quality;
|
||||||
private int distillRuns;
|
private byte distillRuns;
|
||||||
private float ageTime;
|
private float ageTime;
|
||||||
private float wood;
|
private float wood;
|
||||||
private BRecipe currentRecipe;
|
private BRecipe currentRecipe;
|
||||||
private boolean unlabeled;
|
private boolean unlabeled;
|
||||||
private boolean persistent;
|
private boolean persistent;
|
||||||
private boolean stat; // static potions should not be changed
|
private boolean stat; // static potions should not be changed
|
||||||
private int lastUpdate; // last update in hours after install time
|
//private int lastUpdate; // last update in hours after install time
|
||||||
|
|
||||||
public Brew(int uid, BIngredients ingredients) {
|
public Brew(BIngredients ingredients) {
|
||||||
this.ingredients = ingredients;
|
this.ingredients = ingredients;
|
||||||
touch();
|
|
||||||
potions.put(uid, this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// quality already set
|
// quality already set
|
||||||
public Brew(int uid, int quality, BRecipe recipe, BIngredients ingredients) {
|
public Brew(int quality, BRecipe recipe, BIngredients ingredients) {
|
||||||
this.ingredients = ingredients;
|
this.ingredients = ingredients;
|
||||||
this.quality = quality;
|
this.quality = quality;
|
||||||
this.currentRecipe = recipe;
|
this.currentRecipe = recipe;
|
||||||
touch();
|
|
||||||
potions.put(uid, this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// loading from file
|
// loading with all values set
|
||||||
public Brew(int uid, BIngredients ingredients, int quality, int distillRuns, float ageTime, float wood, String recipe, boolean unlabeled, boolean persistent, boolean stat, int lastUpdate) {
|
public Brew(BIngredients ingredients, int quality, byte distillRuns, float ageTime, float wood, String recipe, boolean unlabeled, boolean persistent, boolean stat) {
|
||||||
potions.put(uid, this);
|
|
||||||
this.ingredients = ingredients;
|
this.ingredients = ingredients;
|
||||||
this.quality = quality;
|
this.quality = quality;
|
||||||
this.distillRuns = distillRuns;
|
this.distillRuns = distillRuns;
|
||||||
@@ -66,44 +66,95 @@ public class Brew {
|
|||||||
this.unlabeled = unlabeled;
|
this.unlabeled = unlabeled;
|
||||||
this.persistent = persistent;
|
this.persistent = persistent;
|
||||||
this.stat = stat;
|
this.stat = stat;
|
||||||
this.lastUpdate = lastUpdate;
|
|
||||||
setRecipeFromString(recipe);
|
setRecipeFromString(recipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns a Brew by its UID
|
// Loading from InputStream
|
||||||
public static Brew get(int uid) {
|
private Brew() {
|
||||||
if (uid < -1) {
|
|
||||||
if (!potions.containsKey(uid)) {
|
|
||||||
P.p.errorLog("Database failure! unable to find UID " + uid + " of a custom Potion!");
|
|
||||||
return null;// throw some exception?
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return potions.get(uid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns a Brew by PotionMeta
|
// returns a Brew by ItemMeta
|
||||||
public static Brew get(PotionMeta meta) {
|
public static Brew get(ItemMeta meta) {
|
||||||
return get(getUID(meta));
|
if (meta.hasLore()) {
|
||||||
|
if (meta instanceof PotionMeta && ((PotionMeta) meta).hasCustomEffect(PotionEffectType.REGENERATION)) {
|
||||||
|
Brew brew = load(meta);
|
||||||
|
if (brew != null) {
|
||||||
|
brew = getFromPotionEffect(((PotionMeta) meta), false);
|
||||||
|
}
|
||||||
|
return brew;
|
||||||
|
} else {
|
||||||
|
return load(meta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns a Brew by ItemStack
|
// returns a Brew by ItemStack
|
||||||
public static Brew get(ItemStack item) {
|
public static Brew get(ItemStack item) {
|
||||||
if (item.getType() == Material.POTION) {
|
if (item.getType() == Material.POTION) {
|
||||||
if (item.hasItemMeta()) {
|
if (item.hasItemMeta()) {
|
||||||
return get((PotionMeta) item.getItemMeta());
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
if (meta.hasLore()) {
|
||||||
|
if (meta instanceof PotionMeta && ((PotionMeta) meta).hasCustomEffect(PotionEffectType.REGENERATION)) {
|
||||||
|
Brew brew = load(meta);
|
||||||
|
if (brew != null) {
|
||||||
|
((PotionMeta) meta).removeCustomEffect(PotionEffectType.REGENERATION);
|
||||||
|
} else {
|
||||||
|
brew = getFromPotionEffect(((PotionMeta) meta), true);
|
||||||
|
if (brew == null) return null;
|
||||||
|
brew.save(meta);
|
||||||
|
}
|
||||||
|
item.setItemMeta(meta);
|
||||||
|
return brew;
|
||||||
|
} else {
|
||||||
|
return load(meta);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Brew getFromPotionEffect(PotionMeta potionMeta, boolean remove) {
|
||||||
|
for (PotionEffect effect : potionMeta.getCustomEffects()) {
|
||||||
|
if (effect.getType().equals(PotionEffectType.REGENERATION)) {
|
||||||
|
if (effect.getDuration() < -1) {
|
||||||
|
if (remove) {
|
||||||
|
return legacyPotions.remove(effect.getDuration());
|
||||||
|
} else {
|
||||||
|
return legacyPotions.get(effect.getDuration());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns a Brew by its UID
|
||||||
|
// Does not work anymore with new save system
|
||||||
|
@Deprecated
|
||||||
|
public static Brew get(int uid) {
|
||||||
|
if (uid < -1) {
|
||||||
|
if (!legacyPotions.containsKey(uid)) {
|
||||||
|
P.p.errorLog("Database failure! unable to find UID " + uid + " of a custom Potion!");
|
||||||
|
return null;// throw some exception?
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return legacyPotions.get(uid);
|
||||||
|
}
|
||||||
|
|
||||||
// returns UID of custom Potion item
|
// returns UID of custom Potion item
|
||||||
|
// Does not work anymore with new save system
|
||||||
|
@Deprecated
|
||||||
public static int getUID(ItemStack item) {
|
public static int getUID(ItemStack item) {
|
||||||
return getUID((PotionMeta) item.getItemMeta());
|
return getUID((PotionMeta) item.getItemMeta());
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns UID of custom Potion meta
|
// returns UID of custom Potion meta
|
||||||
|
// Does not work anymore with new save system
|
||||||
|
@Deprecated
|
||||||
public static int getUID(PotionMeta potionMeta) {
|
public static int getUID(PotionMeta potionMeta) {
|
||||||
if (potionMeta.hasCustomEffect(PotionEffectType.REGENERATION)) {
|
if (potionMeta.hasCustomEffect(PotionEffectType.REGENERATION)) {
|
||||||
for (PotionEffect effect : potionMeta.getCustomEffects()) {
|
for (PotionEffect effect : potionMeta.getCustomEffects()) {
|
||||||
@@ -118,13 +169,13 @@ public class Brew {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// generate an UID
|
// generate an UID
|
||||||
public static int generateUID() {
|
/*public static int generateUID() {
|
||||||
int uid = -2;
|
int uid = -2;
|
||||||
while (potions.containsKey(uid)) {
|
while (potions.containsKey(uid)) {
|
||||||
uid -= 1;
|
uid -= 1;
|
||||||
}
|
}
|
||||||
return uid;
|
return uid;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
//returns the recipe with the given name, recalculates if not found
|
//returns the recipe with the given name, recalculates if not found
|
||||||
public boolean setRecipeFromString(String name) {
|
public boolean setRecipeFromString(String name) {
|
||||||
@@ -158,7 +209,8 @@ public class Brew {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Copy a Brew with a new unique ID and return its item
|
// Copy a Brew with a new unique ID and return its item
|
||||||
public ItemStack copy(ItemStack item) {
|
// Not needed anymore
|
||||||
|
/*public ItemStack copy(ItemStack item) {
|
||||||
ItemStack copy = item.clone();
|
ItemStack copy = item.clone();
|
||||||
int uid = generateUID();
|
int uid = generateUID();
|
||||||
clone(uid);
|
clone(uid);
|
||||||
@@ -170,11 +222,13 @@ public class Brew {
|
|||||||
meta.addCustomEffect((PotionEffectType.REGENERATION).createEffect(uid, 0), true);
|
meta.addCustomEffect((PotionEffectType.REGENERATION).createEffect(uid, 0), true);
|
||||||
copy.setItemMeta(meta);
|
copy.setItemMeta(meta);
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
// Clones this instance with a new unique ID
|
// Clones this instance
|
||||||
public Brew clone(int uid) {
|
@Override
|
||||||
Brew brew = new Brew(uid, quality, currentRecipe, ingredients);
|
public Brew clone() throws CloneNotSupportedException {
|
||||||
|
super.clone();
|
||||||
|
Brew brew = new Brew(quality, currentRecipe, ingredients);
|
||||||
brew.distillRuns = distillRuns;
|
brew.distillRuns = distillRuns;
|
||||||
brew.ageTime = ageTime;
|
brew.ageTime = ageTime;
|
||||||
brew.unlabeled = unlabeled;
|
brew.unlabeled = unlabeled;
|
||||||
@@ -184,12 +238,28 @@ public class Brew {
|
|||||||
return brew;
|
return brew;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Brew{" +
|
||||||
|
ingredients + " ingredients" +
|
||||||
|
", quality=" + quality +
|
||||||
|
", distillRuns=" + distillRuns +
|
||||||
|
", ageTime=" + ageTime +
|
||||||
|
", wood=" + wood +
|
||||||
|
", currentRecipe=" + currentRecipe +
|
||||||
|
", unlabeled=" + unlabeled +
|
||||||
|
", persistent=" + persistent +
|
||||||
|
", stat=" + stat +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
// remove potion from file (drinking, despawning, combusting, cmdDeleting, should be more!)
|
// remove potion from file (drinking, despawning, combusting, cmdDeleting, should be more!)
|
||||||
public void remove(ItemStack item) {
|
// Not needed anymore
|
||||||
|
/*public void remove(ItemStack item) {
|
||||||
if (!persistent) {
|
if (!persistent) {
|
||||||
potions.remove(getUID(item));
|
potions.remove(getUID(item));
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
// calculate alcohol from recipe
|
// calculate alcohol from recipe
|
||||||
public int calcAlcohol() {
|
public int calcAlcohol() {
|
||||||
@@ -283,11 +353,12 @@ public class Brew {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Do some regular updates
|
// Do some regular updates
|
||||||
|
// Currently does nothing, but may be used to update something on this brew
|
||||||
public void touch() {
|
public void touch() {
|
||||||
lastUpdate = (int) ((double) (System.currentTimeMillis() - installTime) / 3600000D);
|
//lastUpdate = (int) ((double) (System.currentTimeMillis() - installTime) / 3600000D);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDistillRuns() {
|
public byte getDistillRuns() {
|
||||||
return distillRuns;
|
return distillRuns;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,16 +370,23 @@ public class Brew {
|
|||||||
return currentRecipe;
|
return currentRecipe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Not needed anymore
|
||||||
|
// TODO remove
|
||||||
|
@Deprecated
|
||||||
public boolean isPersistent() {
|
public boolean isPersistent() {
|
||||||
return persistent;
|
return persistent;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make a potion persistent to not delete it when drinking it
|
// Make a potion persistent to not delete it when drinking it
|
||||||
|
// Not needed anymore
|
||||||
|
@Deprecated
|
||||||
public void makePersistent() {
|
public void makePersistent() {
|
||||||
persistent = true;
|
persistent = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the Persistence Flag from a brew, so it will be normally deleted when drinking it
|
// Remove the Persistence Flag from a brew, so it will be normally deleted when drinking it
|
||||||
|
// Not needed anymore
|
||||||
|
@Deprecated
|
||||||
public void removePersistence() {
|
public void removePersistence() {
|
||||||
persistent = false;
|
persistent = false;
|
||||||
}
|
}
|
||||||
@@ -329,9 +407,9 @@ public class Brew {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLastUpdate() {
|
/*public int getLastUpdate() {
|
||||||
return lastUpdate;
|
return lastUpdate;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
// Distilling section ---------------
|
// Distilling section ---------------
|
||||||
|
|
||||||
@@ -382,6 +460,7 @@ public class Brew {
|
|||||||
}
|
}
|
||||||
updateDistillLore(prefix, potionMeta);
|
updateDistillLore(prefix, potionMeta);
|
||||||
touch();
|
touch();
|
||||||
|
save(potionMeta);
|
||||||
|
|
||||||
slotItem.setItemMeta(potionMeta);
|
slotItem.setItemMeta(potionMeta);
|
||||||
}
|
}
|
||||||
@@ -454,6 +533,7 @@ public class Brew {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
touch();
|
touch();
|
||||||
|
save(potionMeta);
|
||||||
item.setItemMeta(potionMeta);
|
item.setItemMeta(potionMeta);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -607,14 +687,14 @@ public class Brew {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Removes all effects except regeneration which stores data
|
// Removes all effects
|
||||||
public static void removeEffects(PotionMeta meta) {
|
public static void removeEffects(PotionMeta meta) {
|
||||||
if (meta.hasCustomEffects()) {
|
if (meta.hasCustomEffects()) {
|
||||||
for (PotionEffect effect : meta.getCustomEffects()) {
|
for (PotionEffect effect : meta.getCustomEffects()) {
|
||||||
PotionEffectType type = effect.getType();
|
PotionEffectType type = effect.getType();
|
||||||
if (!type.equals(PotionEffectType.REGENERATION)) {
|
//if (!type.equals(PotionEffectType.REGENERATION)) {
|
||||||
meta.removeCustomEffect(type);
|
meta.removeCustomEffect(type);
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -652,18 +732,101 @@ public class Brew {
|
|||||||
return P.p.color(color);
|
return P.p.color(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testStore(DataOutputStream out) throws IOException {
|
private static Brew load(ItemMeta meta) {
|
||||||
out.writeByte(86); // Parity
|
LoreLoadStream loreStream;
|
||||||
|
try {
|
||||||
|
loreStream = new LoreLoadStream(meta, 0);
|
||||||
|
} catch (IllegalArgumentException ignored) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
DataInputStream in = new DataInputStream(new Base91DecoderStream(loreStream));
|
||||||
|
try {
|
||||||
|
if (in.readByte() != 86) {
|
||||||
|
P.p.errorLog("parity check failed on Brew while loading, trying to load anyways!");
|
||||||
|
}
|
||||||
|
Brew brew = new Brew();
|
||||||
|
byte ver = in.readByte();
|
||||||
|
switch (ver) {
|
||||||
|
case 1:
|
||||||
|
brew.loadFromStream(in);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
P.p.errorLog("Brew has data stored in v" + ver + " this version supports up to v1");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return brew;
|
||||||
|
} catch (IOException e) {
|
||||||
|
P.p.errorLog("IO Error while loading Brew");
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
in.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO load and save Ingredients
|
||||||
|
|
||||||
|
private void loadFromStream(DataInputStream in) throws IOException {
|
||||||
|
quality = in.readByte();
|
||||||
|
int bools = in.readUnsignedByte();
|
||||||
|
if ((bools & 1) != 0) {
|
||||||
|
distillRuns = in.readByte();
|
||||||
|
}
|
||||||
|
if ((bools & 2) != 0) {
|
||||||
|
ageTime = in.readFloat();
|
||||||
|
}
|
||||||
|
if ((bools & 4) != 0) {
|
||||||
|
wood = in.readFloat();
|
||||||
|
}
|
||||||
|
if ((bools & 8) != 0) {
|
||||||
|
setRecipeFromString(in.readUTF());
|
||||||
|
} else {
|
||||||
|
setRecipeFromString(null);
|
||||||
|
}
|
||||||
|
unlabeled = (bools & 16) != 0;
|
||||||
|
persistent = (bools & 32) != 0;
|
||||||
|
stat = (bools & 64) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save brew data into meta/lore
|
||||||
|
public void save(ItemMeta meta) {
|
||||||
|
LoreSaveStream loreStream = new LoreSaveStream(meta, 0);
|
||||||
|
saveToStream(new DataOutputStream(new Base91EncoderStream(loreStream)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save brew data into the meta/lore of the specified item
|
||||||
|
// The meta on the item changes, so to make further changes to the meta, item.getItemMeta() has to be called again after this
|
||||||
|
public void save(ItemStack item) {
|
||||||
|
ItemMeta meta;
|
||||||
|
if (!item.hasItemMeta()) {
|
||||||
|
meta = P.p.getServer().getItemFactory().getItemMeta(item.getType());
|
||||||
|
} else {
|
||||||
|
meta = item.getItemMeta();
|
||||||
|
}
|
||||||
|
save(meta);
|
||||||
|
item.setItemMeta(meta);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveToStream(DataOutputStream out) {
|
||||||
|
try {
|
||||||
|
out.writeByte(86); // Parity/sanity
|
||||||
out.writeByte(1); // Version
|
out.writeByte(1); // Version
|
||||||
out.writeInt(quality);
|
if (quality > 10) {
|
||||||
|
quality = 10;
|
||||||
|
}
|
||||||
|
out.writeByte((byte) quality);
|
||||||
int bools = 0;
|
int bools = 0;
|
||||||
bools += (distillRuns != 0 ? 1 : 0);
|
bools |= ((distillRuns != 0) ? 1 : 0);
|
||||||
bools += (ageTime > 0 ? 2 : 0);
|
bools |= (ageTime > 0 ? 2 : 0);
|
||||||
bools += (wood != -1 ? 4 : 0);
|
bools |= (wood != -1 ? 4 : 0);
|
||||||
bools += (currentRecipe != null ? 8 : 0);
|
bools |= (currentRecipe != null ? 8 : 0);
|
||||||
bools += (unlabeled ? 16 : 0);
|
bools |= (unlabeled ? 16 : 0);
|
||||||
bools += (persistent ? 32 : 0);
|
bools |= (persistent ? 32 : 0); // TODO remove persistence
|
||||||
bools += (stat ? 64 : 0);
|
bools |= (stat ? 64 : 0);
|
||||||
out.writeByte(bools);
|
out.writeByte(bools);
|
||||||
if (distillRuns != 0) {
|
if (distillRuns != 0) {
|
||||||
out.writeByte(distillRuns);
|
out.writeByte(distillRuns);
|
||||||
@@ -677,58 +840,45 @@ public class Brew {
|
|||||||
if (currentRecipe != null) {
|
if (currentRecipe != null) {
|
||||||
out.writeUTF(currentRecipe.getName(5));
|
out.writeUTF(currentRecipe.getName(5));
|
||||||
}
|
}
|
||||||
ingredients.testStore(out);
|
} catch (IOException e) {
|
||||||
|
P.p.errorLog("IO Error while saving Brew");
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
out.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testLoad(DataInputStream in) throws IOException {
|
// Load potion data from data file for backwards compatibility
|
||||||
if (in.readByte() != 86) {
|
public static void loadLegacy(BIngredients ingredients, int uid, int quality, byte distillRuns, float ageTime, float wood, String recipe, boolean unlabeled, boolean persistent, boolean stat) {
|
||||||
P.p.log("parity check failed");
|
Brew brew = new Brew(ingredients, quality, distillRuns, ageTime, wood, recipe, unlabeled, persistent, stat);
|
||||||
|
legacyPotions.put(uid, brew);
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove legacy potiondata from item
|
||||||
|
public static void removeLegacy(ItemStack item) {
|
||||||
|
if (legacyPotions.isEmpty()) return;
|
||||||
|
if (!item.hasItemMeta()) return;
|
||||||
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
if (!(meta instanceof PotionMeta)) return;
|
||||||
|
for (PotionEffect effect : ((PotionMeta) meta).getCustomEffects()) {
|
||||||
|
if (effect.getType().equals(PotionEffectType.REGENERATION)) {
|
||||||
|
if (effect.getDuration() < -1) {
|
||||||
|
legacyPotions.remove(effect.getDuration());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (in.readByte() != 1) {
|
|
||||||
P.p.log("unknown version");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (in.readInt() != quality) {
|
|
||||||
P.p.log("quality wrong");
|
|
||||||
}
|
|
||||||
int bools = in.readUnsignedByte();
|
|
||||||
if ((bools & 1) != 0) {
|
|
||||||
if (in.readByte() != distillRuns) {
|
|
||||||
P.p.log("distillruns wrong");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((bools & 2) != 0) {
|
|
||||||
if (in.readFloat() != ageTime) {
|
|
||||||
P.p.log("agetime wrong");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((bools & 4) != 0) {
|
|
||||||
if (in.readFloat() != wood) {
|
|
||||||
P.p.log("wood wrong");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((bools & 8) != 0) {
|
|
||||||
if (!in.readUTF().equals(currentRecipe.getName(5))) {
|
|
||||||
P.p.log("currecipe wrong");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((bools & 16) != 0 && !unlabeled) {
|
|
||||||
P.p.log("unlabeled wrong");
|
|
||||||
}
|
|
||||||
if ((bools & 32) != 0 && !persistent) {
|
|
||||||
P.p.log("persistent wrong");
|
|
||||||
}
|
|
||||||
if ((bools & 64) != 0 && !stat) {
|
|
||||||
P.p.log("stat wrong");
|
|
||||||
}
|
|
||||||
ingredients.testLoad(in);
|
|
||||||
P.p.log("load successful");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Saves all data
|
// Saves all data
|
||||||
|
// Legacy method to save to data file
|
||||||
|
@Deprecated
|
||||||
public static void save(ConfigurationSection config) {
|
public static void save(ConfigurationSection config) {
|
||||||
for (Map.Entry<Integer, Brew> entry : potions.entrySet()) {
|
for (Map.Entry<Integer, Brew> entry : legacyPotions.entrySet()) {
|
||||||
int uid = entry.getKey();
|
int uid = entry.getKey();
|
||||||
Brew brew = entry.getValue();
|
Brew brew = entry.getValue();
|
||||||
ConfigurationSection idConfig = config.createSection("" + uid);
|
ConfigurationSection idConfig = config.createSection("" + uid);
|
||||||
@@ -757,9 +907,9 @@ public class Brew {
|
|||||||
if (brew.stat) {
|
if (brew.stat) {
|
||||||
idConfig.set("stat", true);
|
idConfig.set("stat", true);
|
||||||
}
|
}
|
||||||
if (brew.lastUpdate > 0) {
|
/*if (brew.lastUpdate > 0) {
|
||||||
idConfig.set("lastUpdate", brew.lastUpdate);
|
idConfig.set("lastUpdate", brew.lastUpdate);
|
||||||
}
|
}*/
|
||||||
// save the ingredients
|
// save the ingredients
|
||||||
idConfig.set("ingId", brew.ingredients.save(config.getParent()));
|
idConfig.set("ingId", brew.ingredients.save(config.getParent()));
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-15
@@ -11,10 +11,6 @@ import com.dre.brewery.integration.WGBarrel7;
|
|||||||
import com.dre.brewery.integration.WGBarrelNew;
|
import com.dre.brewery.integration.WGBarrelNew;
|
||||||
import com.dre.brewery.integration.WGBarrelOld;
|
import com.dre.brewery.integration.WGBarrelOld;
|
||||||
import com.dre.brewery.listeners.*;
|
import com.dre.brewery.listeners.*;
|
||||||
import com.dre.brewery.lore.Base91DecoderStream;
|
|
||||||
import com.dre.brewery.lore.Base91EncoderStream;
|
|
||||||
import com.dre.brewery.lore.LoreLoadStream;
|
|
||||||
import com.dre.brewery.lore.LoreSaveStream;
|
|
||||||
import org.apache.commons.lang.math.NumberUtils;
|
import org.apache.commons.lang.math.NumberUtils;
|
||||||
import org.bstats.bukkit.Metrics;
|
import org.bstats.bukkit.Metrics;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@@ -91,7 +87,7 @@ public class P extends JavaPlugin {
|
|||||||
//P.p.log("§" + (use1_9 ? "a":"c") + "1.9 " + "§" + (use1_11 ? "a":"c") + "1.11 " + "§" + (use1_13 ? "a":"c") + "1.13 " + "§" + (use1_14 ? "a":"c") + "1.14");
|
//P.p.log("§" + (use1_9 ? "a":"c") + "1.9 " + "§" + (use1_11 ? "a":"c") + "1.11 " + "§" + (use1_13 ? "a":"c") + "1.13 " + "§" + (use1_14 ? "a":"c") + "1.14");
|
||||||
|
|
||||||
|
|
||||||
try {
|
/*try {
|
||||||
ItemMeta meta = new ItemStack(Material.POTION).getItemMeta();
|
ItemMeta meta = new ItemStack(Material.POTION).getItemMeta();
|
||||||
DataOutputStream data = new DataOutputStream(new Base91EncoderStream(new LoreSaveStream(meta, 3)));
|
DataOutputStream data = new DataOutputStream(new Base91EncoderStream(new LoreSaveStream(meta, 3)));
|
||||||
|
|
||||||
@@ -125,7 +121,7 @@ public class P extends JavaPlugin {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*basE91 basE91 = new basE91();
|
basE91 basE91 = new basE91();
|
||||||
int[] input = new int[] {12, 65, 324, 5, 12, 129459, 1234567, Integer.MIN_VALUE, Integer.MAX_VALUE};
|
int[] input = new int[] {12, 65, 324, 5, 12, 129459, 1234567, Integer.MIN_VALUE, Integer.MAX_VALUE};
|
||||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||||
DataOutputStream data = new DataOutputStream(stream);
|
DataOutputStream data = new DataOutputStream(stream);
|
||||||
@@ -198,11 +194,11 @@ public class P extends JavaPlugin {
|
|||||||
|
|
||||||
}
|
}
|
||||||
tdata.close();
|
tdata.close();
|
||||||
test = test;*/
|
test = test;
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
// load the Config
|
// load the Config
|
||||||
@@ -338,7 +334,7 @@ public class P extends JavaPlugin {
|
|||||||
BIngredients.recipes.clear();
|
BIngredients.recipes.clear();
|
||||||
BIngredients.cookedNames.clear();
|
BIngredients.cookedNames.clear();
|
||||||
BPlayer.clear();
|
BPlayer.clear();
|
||||||
Brew.potions.clear();
|
Brew.legacyPotions.clear();
|
||||||
Wakeup.wakeups.clear();
|
Wakeup.wakeups.clear();
|
||||||
Words.words.clear();
|
Words.words.clear();
|
||||||
Words.ignoreText.clear();
|
Words.ignoreText.clear();
|
||||||
@@ -387,7 +383,7 @@ public class P extends JavaPlugin {
|
|||||||
|
|
||||||
// Reload Recipes
|
// Reload Recipes
|
||||||
boolean successful = true;
|
boolean successful = true;
|
||||||
for (Brew brew : Brew.potions.values()) {
|
for (Brew brew : Brew.legacyPotions.values()) {
|
||||||
if (!brew.reloadRecipe()) {
|
if (!brew.reloadRecipe()) {
|
||||||
successful = false;
|
successful = false;
|
||||||
}
|
}
|
||||||
@@ -603,30 +599,30 @@ public class P extends JavaPlugin {
|
|||||||
if (matSection != null) {
|
if (matSection != null) {
|
||||||
// matSection has all the materials + amount as Integers
|
// matSection has all the materials + amount as Integers
|
||||||
ArrayList<ItemStack> ingredients = deserializeIngredients(matSection);
|
ArrayList<ItemStack> ingredients = deserializeIngredients(matSection);
|
||||||
ingMap.put(id, new BIngredients(ingredients, section.getInt(id + ".cookedTime", 0)));
|
ingMap.put(id, new BIngredients(ingredients, section.getInt(id + ".cookedTime", 0), true));
|
||||||
} else {
|
} else {
|
||||||
errorLog("Ingredient id: '" + id + "' incomplete in data.yml");
|
errorLog("Ingredient id: '" + id + "' incomplete in data.yml");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// loading Brew
|
// loading Brew legacy
|
||||||
section = data.getConfigurationSection("Brew");
|
section = data.getConfigurationSection("Brew");
|
||||||
if (section != null) {
|
if (section != null) {
|
||||||
// All sections have the UID as name
|
// All sections have the UID as name
|
||||||
for (String uid : section.getKeys(false)) {
|
for (String uid : section.getKeys(false)) {
|
||||||
BIngredients ingredients = getIngredients(ingMap, section.getString(uid + ".ingId"));
|
BIngredients ingredients = getIngredients(ingMap, section.getString(uid + ".ingId"));
|
||||||
int quality = section.getInt(uid + ".quality", 0);
|
int quality = section.getInt(uid + ".quality", 0);
|
||||||
int distillRuns = section.getInt(uid + ".distillRuns", 0);
|
byte distillRuns = (byte) section.getInt(uid + ".distillRuns", 0);
|
||||||
float ageTime = (float) section.getDouble(uid + ".ageTime", 0.0);
|
float ageTime = (float) section.getDouble(uid + ".ageTime", 0.0);
|
||||||
float wood = (float) section.getDouble(uid + ".wood", -1.0);
|
float wood = (float) section.getDouble(uid + ".wood", -1.0);
|
||||||
String recipe = section.getString(uid + ".recipe", null);
|
String recipe = section.getString(uid + ".recipe", null);
|
||||||
boolean unlabeled = section.getBoolean(uid + ".unlabeled", false);
|
boolean unlabeled = section.getBoolean(uid + ".unlabeled", false);
|
||||||
boolean persistent = section.getBoolean(uid + ".persist", false);
|
boolean persistent = section.getBoolean(uid + ".persist", false);
|
||||||
boolean stat = section.getBoolean(uid + ".stat", false);
|
boolean stat = section.getBoolean(uid + ".stat", false);
|
||||||
int lastUpdate = section.getInt("lastUpdate", 0);
|
//int lastUpdate = section.getInt("lastUpdate", 0);
|
||||||
|
|
||||||
new Brew(parseInt(uid), ingredients, quality, distillRuns, ageTime, wood, recipe, unlabeled, persistent, stat, lastUpdate);
|
Brew.loadLegacy(ingredients, parseInt(uid), quality, distillRuns, ageTime, wood, recipe, unlabeled, persistent, stat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public class DataSave extends BukkitRunnable {
|
|||||||
configFile.set("installTime", Brew.installTime);
|
configFile.set("installTime", Brew.installTime);
|
||||||
configFile.set("MCBarrelTime", MCBarrel.mcBarrelTime);
|
configFile.set("MCBarrelTime", MCBarrel.mcBarrelTime);
|
||||||
|
|
||||||
if (!Brew.potions.isEmpty()) {
|
if (!Brew.legacyPotions.isEmpty()) {
|
||||||
Brew.save(configFile.createSection("Brew"));
|
Brew.save(configFile.createSection("Brew"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -380,6 +380,7 @@ public class CommandListener implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void cmdCopy(CommandSender sender, int count) {
|
public void cmdCopy(CommandSender sender, int count) {
|
||||||
|
|
||||||
@@ -395,7 +396,7 @@ public class CommandListener implements CommandExecutor {
|
|||||||
Brew brew = Brew.get(hand);
|
Brew brew = Brew.get(hand);
|
||||||
if (brew != null) {
|
if (brew != null) {
|
||||||
while (count > 0) {
|
while (count > 0) {
|
||||||
ItemStack item = brew.copy(hand);
|
ItemStack item = hand.clone();
|
||||||
if (!(player.getInventory().addItem(item)).isEmpty()) {
|
if (!(player.getInventory().addItem(item)).isEmpty()) {
|
||||||
p.msg(sender, p.languageReader.get("CMD_Copy_Error", "" + count));
|
p.msg(sender, p.languageReader.get("CMD_Copy_Error", "" + count));
|
||||||
return;
|
return;
|
||||||
@@ -417,6 +418,7 @@ public class CommandListener implements CommandExecutor {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void cmdDelete(CommandSender sender) {
|
public void cmdDelete(CommandSender sender) {
|
||||||
|
|
||||||
@@ -429,7 +431,7 @@ public class CommandListener implements CommandExecutor {
|
|||||||
if (brew.isPersistent()) {
|
if (brew.isPersistent()) {
|
||||||
p.msg(sender, p.languageReader.get("CMD_PersistRemove"));
|
p.msg(sender, p.languageReader.get("CMD_PersistRemove"));
|
||||||
} else {
|
} else {
|
||||||
brew.remove(hand);
|
//brew.remove(hand);
|
||||||
player.setItemInHand(new ItemStack(Material.AIR));
|
player.setItemInHand(new ItemStack(Material.AIR));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -442,6 +444,7 @@ public class CommandListener implements CommandExecutor {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void cmdPersist(CommandSender sender) {
|
public void cmdPersist(CommandSender sender) {
|
||||||
|
|
||||||
@@ -461,6 +464,7 @@ public class CommandListener implements CommandExecutor {
|
|||||||
p.msg(sender, p.languageReader.get("CMD_Persistent"));
|
p.msg(sender, p.languageReader.get("CMD_Persistent"));
|
||||||
}
|
}
|
||||||
brew.touch();
|
brew.touch();
|
||||||
|
brew.save(hand);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -492,6 +496,7 @@ public class CommandListener implements CommandExecutor {
|
|||||||
p.msg(sender, p.languageReader.get("CMD_Static"));
|
p.msg(sender, p.languageReader.get("CMD_Static"));
|
||||||
}
|
}
|
||||||
brew.touch();
|
brew.touch();
|
||||||
|
brew.save(hand);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -513,6 +518,7 @@ public class CommandListener implements CommandExecutor {
|
|||||||
if (brew != null) {
|
if (brew != null) {
|
||||||
brew.unLabel(hand);
|
brew.unLabel(hand);
|
||||||
brew.touch();
|
brew.touch();
|
||||||
|
brew.save(hand);
|
||||||
p.msg(sender, p.languageReader.get("CMD_UnLabel"));
|
p.msg(sender, p.languageReader.get("CMD_UnLabel"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,10 +28,7 @@ public class EntityListener implements Listener {
|
|||||||
public void onItemDespawn(ItemDespawnEvent event) {
|
public void onItemDespawn(ItemDespawnEvent event) {
|
||||||
ItemStack item = event.getEntity().getItemStack();
|
ItemStack item = event.getEntity().getItemStack();
|
||||||
if (item.getType() == Material.POTION) {
|
if (item.getType() == Material.POTION) {
|
||||||
Brew brew = Brew.get(item);
|
Brew.removeLegacy(item);
|
||||||
if (brew != null) {
|
|
||||||
brew.remove(item);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,10 +39,7 @@ public class EntityListener implements Listener {
|
|||||||
if (entity instanceof Item) {
|
if (entity instanceof Item) {
|
||||||
ItemStack item = ((Item) entity).getItemStack();
|
ItemStack item = ((Item) entity).getItemStack();
|
||||||
if (item.getType() == Material.POTION) {
|
if (item.getType() == Material.POTION) {
|
||||||
Brew brew = Brew.get(item);
|
Brew.removeLegacy(item);
|
||||||
if (brew != null) {
|
|
||||||
brew.remove(item);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,10 +7,6 @@ import com.dre.brewery.Brew;
|
|||||||
import com.dre.brewery.MCBarrel;
|
import com.dre.brewery.MCBarrel;
|
||||||
import com.dre.brewery.P;
|
import com.dre.brewery.P;
|
||||||
import com.dre.brewery.integration.LogBlockBarrel;
|
import com.dre.brewery.integration.LogBlockBarrel;
|
||||||
import com.dre.brewery.lore.Base91DecoderStream;
|
|
||||||
import com.dre.brewery.lore.Base91EncoderStream;
|
|
||||||
import com.dre.brewery.lore.LoreLoadStream;
|
|
||||||
import com.dre.brewery.lore.LoreSaveStream;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
@@ -38,9 +34,6 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.bukkit.inventory.meta.PotionMeta;
|
import org.bukkit.inventory.meta.PotionMeta;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.io.DataOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@@ -209,25 +202,13 @@ public class InventoryListener implements Listener {
|
|||||||
for (int slot = 0; slot < 3; slot++) {
|
for (int slot = 0; slot < 3; slot++) {
|
||||||
item = inv.getItem(slot);
|
item = inv.getItem(slot);
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
contents[slot] = Brew.get(item);
|
if (item.getType() == Material.POTION) {
|
||||||
|
if (item.hasItemMeta()) {
|
||||||
|
Brew pot = Brew.get(item);
|
||||||
|
if (pot != null && (!distill || pot.canDistill())) { // need at least one distillable potion.
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return contents;
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte hasCustom(BrewerInventory brewer) {
|
|
||||||
ItemStack item = brewer.getItem(3); // ingredient
|
|
||||||
boolean glowstone = (item != null && Material.GLOWSTONE_DUST == item.getType()); // need dust in the top slot.
|
|
||||||
byte customFound = 0;
|
|
||||||
for (Brew brew : getDistillContents(brewer)) {
|
|
||||||
if (brew != null) {
|
|
||||||
if (!glowstone) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (brew.canDistill()) {
|
|
||||||
return 2;
|
|
||||||
} else {
|
|
||||||
customFound = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -249,14 +230,24 @@ public class InventoryListener implements Listener {
|
|||||||
|
|
||||||
private boolean runDistill(BrewerInventory inv) {
|
private boolean runDistill(BrewerInventory inv) {
|
||||||
boolean custom = false;
|
boolean custom = false;
|
||||||
Brew[] contents = getDistillContents(inv);
|
Boolean[] contents = new Boolean[3];
|
||||||
for (int slot = 0; slot < 3; slot++) {
|
while (slot < 3) {
|
||||||
if (contents[slot] == null) continue;
|
item = inv.getItem(slot);
|
||||||
if (contents[slot].canDistill()) {
|
contents[slot] = false;
|
||||||
|
if (item != null) {
|
||||||
|
if (item.getType() == Material.POTION) {
|
||||||
|
if (item.hasItemMeta()) {
|
||||||
|
Brew brew = Brew.get(item);
|
||||||
|
if (brew != null) {
|
||||||
|
// has custom potion in "slot"
|
||||||
|
if (brew.canDistill()) {
|
||||||
// is further distillable
|
// is further distillable
|
||||||
|
contents[slot] = true;
|
||||||
custom = true;
|
custom = true;
|
||||||
} else {
|
}
|
||||||
contents[slot] = null;
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (custom) {
|
if (custom) {
|
||||||
@@ -305,14 +296,16 @@ public class InventoryListener implements Listener {
|
|||||||
item.setItemMeta(potion);
|
item.setItemMeta(potion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
brew.touch();
|
P.p.log(brew.toString());
|
||||||
|
//P.p.log(potion.getLore().get(0));
|
||||||
|
//brew.touch();
|
||||||
|
|
||||||
try {
|
/*try {
|
||||||
DataInputStream in = new DataInputStream(new Base91DecoderStream(new LoreLoadStream(potion)));
|
DataInputStream in = new DataInputStream(new Base91DecoderStream(new LoreLoadStream(potion)));
|
||||||
|
|
||||||
brew.testLoad(in);
|
brew.testLoad(in);
|
||||||
|
|
||||||
/*if (in.readByte() == 27 && in.skip(48) > 0) {
|
*//*if (in.readByte() == 27 && in.skip(48) > 0) {
|
||||||
in.mark(100);
|
in.mark(100);
|
||||||
if (in.readUTF().equals("TESTHalloª∆Ω") && in.readInt() == 34834 && in.skip(4) > 0 && in.readLong() == Long.MAX_VALUE) {
|
if (in.readUTF().equals("TESTHalloª∆Ω") && in.readInt() == 34834 && in.skip(4) > 0 && in.readLong() == Long.MAX_VALUE) {
|
||||||
in.reset();
|
in.reset();
|
||||||
@@ -326,7 +319,7 @@ public class InventoryListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
P.p.log("false1");
|
P.p.log("false1");
|
||||||
}*/
|
}*//*
|
||||||
|
|
||||||
in.close();
|
in.close();
|
||||||
} catch (IllegalArgumentException argExc) {
|
} catch (IllegalArgumentException argExc) {
|
||||||
@@ -339,7 +332,7 @@ public class InventoryListener implements Listener {
|
|||||||
brew.testStore(out);
|
brew.testStore(out);
|
||||||
|
|
||||||
|
|
||||||
/*out.writeByte(27);
|
*//*out.writeByte(27);
|
||||||
out.writeLong(1111); //skip
|
out.writeLong(1111); //skip
|
||||||
out.writeLong(1111); //skip
|
out.writeLong(1111); //skip
|
||||||
out.writeLong(1111); //skip
|
out.writeLong(1111); //skip
|
||||||
@@ -349,16 +342,16 @@ public class InventoryListener implements Listener {
|
|||||||
out.writeUTF("TESTHalloª∆Ω");
|
out.writeUTF("TESTHalloª∆Ω");
|
||||||
out.writeInt(34834);
|
out.writeInt(34834);
|
||||||
out.writeInt(6436); //skip
|
out.writeInt(6436); //skip
|
||||||
out.writeLong(Long.MAX_VALUE);*/
|
out.writeLong(Long.MAX_VALUE);*//*
|
||||||
|
|
||||||
out.close();
|
out.close();
|
||||||
/*StringBuilder b = new StringBuilder();
|
*//*StringBuilder b = new StringBuilder();
|
||||||
for (char c : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!$%&()*+,-./:;<=>?@[]^_`{|}~\"".toCharArray()) {
|
for (char c : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!$%&()*+,-./:;<=>?@[]^_`{|}~\"".toCharArray()) {
|
||||||
b.append('§').append(c);
|
b.append('§').append(c);
|
||||||
}
|
}
|
||||||
List<String> lore = potion.getLore();
|
List<String> lore = potion.getLore();
|
||||||
lore.add(b.toString());
|
lore.add(b.toString());
|
||||||
potion.setLore(lore);*/
|
potion.setLore(lore);*//*
|
||||||
item.setItemMeta(potion);
|
item.setItemMeta(potion);
|
||||||
|
|
||||||
} catch (IOException h) {
|
} catch (IOException h) {
|
||||||
@@ -367,7 +360,7 @@ public class InventoryListener implements Listener {
|
|||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -257,9 +257,9 @@ public class PlayerListener implements Listener {
|
|||||||
Brew brew = Brew.get(item);
|
Brew brew = Brew.get(item);
|
||||||
if (brew != null) {
|
if (brew != null) {
|
||||||
BPlayer.drink(brew, player);
|
BPlayer.drink(brew, player);
|
||||||
if (player.getGameMode() != GameMode.CREATIVE) {
|
/*if (player.getGameMode() != org.bukkit.GameMode.CREATIVE) {
|
||||||
brew.remove(item);
|
brew.remove(item);
|
||||||
}
|
}*/
|
||||||
if (P.use1_9) {
|
if (P.use1_9) {
|
||||||
if (player.getGameMode() != GameMode.CREATIVE) {
|
if (player.getGameMode() != GameMode.CREATIVE) {
|
||||||
// replace the potion with an empty potion to avoid effects
|
// replace the potion with an empty potion to avoid effects
|
||||||
|
|||||||
Reference in New Issue
Block a user