diff --git a/src/com/dre/brewery/BIngredients.java b/src/com/dre/brewery/BIngredients.java index 592d2af..2f91db8 100644 --- a/src/com/dre/brewery/BIngredients.java +++ b/src/com/dre/brewery/BIngredients.java @@ -327,6 +327,16 @@ public class BIngredients { return Math.max(quality, 0); } + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof BIngredients)) return false; + BIngredients other = ((BIngredients) obj); + return cookedTime == other.cookedTime && + ingredients.equals(other.ingredients) && + materials.equals(other.materials); + } + // Creates a copy ingredients @Override public BIngredients clone() { diff --git a/src/com/dre/brewery/BRecipe.java b/src/com/dre/brewery/BRecipe.java index 10a4f2e..30402ce 100644 --- a/src/com/dre/brewery/BRecipe.java +++ b/src/com/dre/brewery/BRecipe.java @@ -6,6 +6,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class BRecipe { @@ -251,18 +252,7 @@ public class BRecipe { ItemStack potion = new ItemStack(Material.POTION); PotionMeta potionMeta = (PotionMeta) potion.getItemMeta(); - ArrayList list = new ArrayList<>(ingredients.size()); - for (ItemStack item : ingredients) { - if (item.getDurability() == -1) { - list.add(new ItemStack(item.getType(), item.getAmount())); - } else { - list.add(item.clone()); - } - } - - BIngredients bIngredients = new BIngredients(list, cookingTime); - - Brew brew = new Brew(bIngredients, quality, distillruns, getAge(), wood, getName(5), false, true); + Brew brew = createBrew(quality); Brew.PotionColor.fromString(getColor()).colorBrew(potionMeta, potion, false); potionMeta.setDisplayName(P.p.color("&f" + getName(quality))); @@ -283,6 +273,21 @@ public class BRecipe { return potion; } + public Brew createBrew(int quality) { + ArrayList list = new ArrayList<>(ingredients.size()); + for (ItemStack item : ingredients) { + if (item.getDurability() == -1) { + list.add(new ItemStack(item.getType(), item.getAmount())); + } else { + list.add(item.clone()); + } + } + + BIngredients bIngredients = new BIngredients(list, cookingTime); + + return new Brew(bIngredients, quality, distillruns, getAge(), wood, getName(5), false, true); + } + // Getter @@ -365,4 +370,13 @@ public class BRecipe { public String toString() { return "BRecipe{" + getName(5) + '}'; } + + public static BRecipe get(String name) { + for (BRecipe recipe : BIngredients.recipes) { + if (recipe.getName(5).equalsIgnoreCase(name)) { + return recipe; + } + } + return null; + } } diff --git a/src/com/dre/brewery/Brew.java b/src/com/dre/brewery/Brew.java index 571fa49..798545b 100644 --- a/src/com/dre/brewery/Brew.java +++ b/src/com/dre/brewery/Brew.java @@ -222,6 +222,20 @@ public class Brew { return copy; }*/ + public boolean isSimilar(Brew brew) { + if (brew == null) return false; + if (equals(brew)) return true; + return quality == brew.quality && + distillRuns == brew.distillRuns && + Float.compare(brew.ageTime, ageTime) == 0 && + Float.compare(brew.wood, wood) == 0 && + unlabeled == brew.unlabeled && + persistent == brew.persistent && + immutable == brew.immutable && + ingredients.equals(brew.ingredients) && + currentRecipe != null ? currentRecipe.equals(brew.currentRecipe) : brew.currentRecipe == null; + } + // Clones this instance @Override public Brew clone() throws CloneNotSupportedException { diff --git a/src/com/dre/brewery/listeners/InventoryListener.java b/src/com/dre/brewery/listeners/InventoryListener.java index a55bb69..dace63a 100644 --- a/src/com/dre/brewery/listeners/InventoryListener.java +++ b/src/com/dre/brewery/listeners/InventoryListener.java @@ -298,6 +298,8 @@ public class InventoryListener implements Listener { } P.p.log(brew.toString()); P.p.log(potion.getLore().get(0).replaceAll("ยง", "")); + P.p.log("similar to beispiel? " + BRecipe.get("Beispiel").createBrew(10).isSimilar(brew)); + //brew.touch(); /*try { diff --git a/src/com/dre/brewery/lore/Base91DecoderStream.java b/src/com/dre/brewery/lore/Base91DecoderStream.java index d784ac2..7dbbb1f 100644 --- a/src/com/dre/brewery/lore/Base91DecoderStream.java +++ b/src/com/dre/brewery/lore/Base91DecoderStream.java @@ -7,8 +7,8 @@ import java.io.InputStream; public class Base91DecoderStream extends FilterInputStream { private final basE91 decoder = new basE91(); - private byte[] decbuf = new byte[18]; - private byte[] buf = new byte[18]; + private byte[] decbuf = new byte[32]; + private byte[] buf = new byte[32]; private int reader = 0; private int count = 0; private byte[] markBuf = null; @@ -62,6 +62,7 @@ public class Base91DecoderStream extends FilterInputStream { int out = 0; int writeSize; while (count > 0) { + // Not enough data in buffer, write all out, decode and repeat writeSize = Math.min(len, count - reader); System.arraycopy(buf, reader, b, off + out, writeSize); out += writeSize; @@ -99,7 +100,8 @@ public class Base91DecoderStream extends FilterInputStream { @Override public int available() throws IOException { - return (int) (in.available() * 0.813F); // Ratio encoded to decoded with random data + if (count == -1) return 0; + return (int) (in.available() * 0.813F) + count - reader; // Ratio encoded to decoded with random data } @Override diff --git a/src/com/dre/brewery/lore/Base91EncoderStream.java b/src/com/dre/brewery/lore/Base91EncoderStream.java index 224bc29..0de1354 100644 --- a/src/com/dre/brewery/lore/Base91EncoderStream.java +++ b/src/com/dre/brewery/lore/Base91EncoderStream.java @@ -8,8 +8,8 @@ import java.io.OutputStream; public class Base91EncoderStream extends FilterOutputStream { private final basE91 encoder = new basE91(); - private byte[] buf = new byte[16]; - private byte[] encBuf = new byte[24]; + private byte[] buf = new byte[32]; + private byte[] encBuf = new byte[48]; private int writer = 0; private int encoded = 0;