1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 03:35:51 +00:00

[Ci skip] Improved debugging and removed a deprecated class

This commit is contained in:
TheBusyBiscuit 2020-02-08 22:42:11 +01:00
parent c8f85ccab2
commit 55cf5a1079
5 changed files with 76 additions and 89 deletions

View File

@ -8,7 +8,6 @@ import org.bukkit.inventory.ItemStack;
import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe; import io.github.thebusybiscuit.cscorelib2.recipes.MinecraftRecipe;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
@ -76,33 +75,37 @@ public class RecipeType {
return SlimefunItem.getByID(machine); return SlimefunItem.getByID(machine);
} }
public static List<ItemStack> getRecipeInputs(SlimefunItem machine) { public static List<ItemStack> getRecipeInputs(SlimefunMachine machine) {
if (machine == null) return new ArrayList<>(); if (machine == null) return new ArrayList<>();
List<ItemStack[]> recipes = (machine instanceof SlimefunMachine ? ((SlimefunMachine) machine).getRecipes(): ((SlimefunGadget) machine).getRecipes()); List<ItemStack[]> recipes = machine.getRecipes();
List<ItemStack> convertible = new ArrayList<>(); List<ItemStack> convertible = new ArrayList<>();
for (int i = 0; i < recipes.size(); i++) { for (int i = 0; i < recipes.size(); i++) {
if (i % 2 == 0) convertible.add(recipes.get(i)[0]); if (i % 2 == 0) convertible.add(recipes.get(i)[0]);
} }
return convertible; return convertible;
} }
public static List<ItemStack[]> getRecipeInputList(SlimefunItem machine) { public static List<ItemStack[]> getRecipeInputList(SlimefunMachine machine) {
if (machine == null) return new ArrayList<>(); if (machine == null) return new ArrayList<>();
List<ItemStack[]> recipes = (machine instanceof SlimefunMachine ? ((SlimefunMachine) machine).getRecipes(): ((SlimefunGadget) machine).getRecipes()); List<ItemStack[]> recipes = machine.getRecipes();
List<ItemStack[]> convertible = new ArrayList<>(); List<ItemStack[]> convertible = new ArrayList<>();
for (int i = 0; i < recipes.size(); i++) { for (int i = 0; i < recipes.size(); i++) {
if (i % 2 == 0) convertible.add(recipes.get(i)); if (i % 2 == 0) convertible.add(recipes.get(i));
} }
return convertible; return convertible;
} }
public static ItemStack getRecipeOutput(SlimefunItem machine, ItemStack input) { public static ItemStack getRecipeOutput(SlimefunMachine machine, ItemStack input) {
List<ItemStack[]> recipes = (machine instanceof SlimefunMachine ? ((SlimefunMachine) machine).getRecipes(): ((SlimefunGadget) machine).getRecipes()); List<ItemStack[]> recipes = machine.getRecipes();
return recipes.get(((getRecipeInputs(machine).indexOf(input) * 2) + 1))[0].clone(); return recipes.get(((getRecipeInputs(machine).indexOf(input) * 2) + 1))[0].clone();
} }
public static ItemStack getRecipeOutputList(SlimefunItem machine, ItemStack[] input) { public static ItemStack getRecipeOutputList(SlimefunMachine machine, ItemStack[] input) {
List<ItemStack[]> recipes = (machine instanceof SlimefunMachine ? ((SlimefunMachine) machine).getRecipes(): ((SlimefunGadget) machine).getRecipes()); List<ItemStack[]> recipes = machine.getRecipes();
return recipes.get(((getRecipeInputList(machine).indexOf(input) * 2) + 1))[0]; return recipes.get(((getRecipeInputList(machine).indexOf(input) * 2) + 1))[0];
} }
} }

View File

@ -1,53 +0,0 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
@Deprecated
public class SlimefunGadget extends SlimefunItem implements RecipeDisplayItem {
private List<ItemStack[]> recipes;
private List<ItemStack> displayRecipes;
public SlimefunGadget(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes) {
this(category, item, id, recipeType, recipe, machineRecipes, null, null);
}
public SlimefunGadget(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes) {
this(category, item, item.getItemID(), recipeType, recipe, machineRecipes, null, null);
}
public SlimefunGadget(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes, String[] keys, Object[] values) {
super(category, item, id, recipeType, recipe, keys, values);
this.recipes = new ArrayList<>();
this.displayRecipes = new ArrayList<>();
for (ItemStack i: machineRecipes) {
this.recipes.add(new ItemStack[] {i});
this.displayRecipes.add(i);
}
}
public List<ItemStack[]> getRecipes() {
return this.recipes;
}
@Override
public List<ItemStack> getDisplayRecipes() {
return this.displayRecipes;
}
public void addRecipe(ItemStack input, ItemStack output) {
this.recipes.add(new ItemStack[] {input});
this.recipes.add(new ItemStack[] {output});
this.displayRecipes.add(input);
this.displayRecipes.add(output);
}
}

View File

@ -592,7 +592,14 @@ public class SlimefunItem implements Placeable {
Optional<ItemHandler> handler = itemhandlers.get(c); Optional<ItemHandler> handler = itemhandlers.get(c);
if (handler.isPresent()) { if (handler.isPresent()) {
try {
callable.accept(c.cast(handler.get())); callable.accept(c.cast(handler.get()));
}
catch (Throwable x) {
// Catch any throwables and give more precise info on where to start debugging
String file = x.getStackTrace()[0].getClassName();
Bukkit.getLogger().log(Level.SEVERE, "Could not pass \"" + c.getSimpleName() + "\" for the following Item: \"" + getID() + "\" (" + file + ")", x);
}
return true; return true;
} }

View File

@ -17,19 +17,29 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
public class Composter extends SlimefunGadget { public class Composter extends SimpleSlimefunItem<BlockUseHandler> implements RecipeDisplayItem {
private final List<ItemStack> recipes;
public Composter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { public Composter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe, getMachineRecipes()); super(category, item, recipeType, recipe);
recipes = getMachineRecipes();
} }
private static ItemStack[] getMachineRecipes() { @Override
public List<ItemStack> getDisplayRecipes() {
return recipes;
}
private static List<ItemStack> getMachineRecipes() {
List<ItemStack> items = new LinkedList<>(); List<ItemStack> items = new LinkedList<>();
for (Material leave : MaterialCollections.getAllLeaves()) { for (Material leave : MaterialCollections.getAllLeaves()) {
@ -51,48 +61,54 @@ public class Composter extends SlimefunGadget {
items.add(new ItemStack(Material.WHEAT, 4)); items.add(new ItemStack(Material.WHEAT, 4));
items.add(new ItemStack(Material.NETHER_WART)); items.add(new ItemStack(Material.NETHER_WART));
return items.toArray(new ItemStack[0]); return items;
} }
@Override @Override
public void preRegister() { public BlockUseHandler getItemHandler() {
addItemHandler((BlockUseHandler) e -> { return e -> {
Optional<Block> block = e.getClickedBlock(); Optional<Block> block = e.getClickedBlock();
if (block.isPresent()) { if (block.isPresent()) {
e.cancel();
Player p = e.getPlayer(); Player p = e.getPlayer();
Block b = block.get(); Block b = block.get();
if (p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.ACCESS_INVENTORIES)) { if (p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.ACCESS_INVENTORIES)) {
ItemStack input = e.getItem(); ItemStack input = e.getItem();
for (ItemStack convert : RecipeType.getRecipeInputs(Composter.this)) { for (int i = 0; i < recipes.size(); i += 2) {
ItemStack convert = recipes.get(i);
if (convert != null && SlimefunManager.isItemSimilar(input, convert, true)) { if (convert != null && SlimefunManager.isItemSimilar(input, convert, true)) {
ItemStack removing = input.clone(); ItemStack removing = input.clone();
removing.setAmount(convert.getAmount()); removing.setAmount(convert.getAmount());
p.getInventory().removeItem(removing); p.getInventory().removeItem(removing);
ItemStack adding = RecipeType.getRecipeOutput(Composter.this, convert); ItemStack adding = recipes.get(i + 1);
for (int i = 1; i < 12; i++) { for (int j = 1; j < 12; j++) {
int j = i; int index = j;
Slimefun.runSync(() -> { Slimefun.runSync(() -> {
if (j < 11) { if (index < 11) {
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType().isBlock() ? input.getType() : Material.HAY_BLOCK); b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType().isBlock() ? input.getType() : Material.HAY_BLOCK);
} }
else { else {
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F);
b.getWorld().dropItemNaturally(b.getRelative(BlockFace.UP).getLocation(), adding); b.getWorld().dropItemNaturally(b.getRelative(BlockFace.UP).getLocation(), adding);
} }
}, i * 30L); }, j * 30L);
} }
break;
} }
} }
SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true); SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true);
} }
} }
}); };
} }
} }

View File

@ -19,20 +19,30 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
public class Crucible extends SlimefunGadget { public class Crucible extends SimpleSlimefunItem<BlockUseHandler> implements RecipeDisplayItem {
private final List<ItemStack> recipes;
public Crucible(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { public Crucible(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, recipeType, recipe, getMachineRecipes()); super(category, item, recipeType, recipe);
recipes = getMachineRecipes();
} }
private static ItemStack[] getMachineRecipes() { @Override
public List<ItemStack> getDisplayRecipes() {
return recipes;
}
private static List<ItemStack> getMachineRecipes() {
List<ItemStack> items = new LinkedList<>(); List<ItemStack> items = new LinkedList<>();
items.add(new ItemStack(Material.COBBLESTONE, 16)); items.add(new ItemStack(Material.COBBLESTONE, 16));
@ -57,15 +67,17 @@ public class Crucible extends SlimefunGadget {
items.add(new ItemStack(Material.LAVA_BUCKET)); items.add(new ItemStack(Material.LAVA_BUCKET));
} }
return items.toArray(new ItemStack[0]); return items;
} }
@Override @Override
public void preRegister() { public BlockUseHandler getItemHandler() {
addItemHandler((BlockUseHandler) e -> { return e -> {
Optional<Block> optional = e.getClickedBlock(); Optional<Block> optional = e.getClickedBlock();
if (optional.isPresent()) { if (optional.isPresent()) {
e.cancel();
Player p = e.getPlayer(); Player p = e.getPlayer();
Block b = optional.get(); Block b = optional.get();
@ -73,10 +85,10 @@ public class Crucible extends SlimefunGadget {
ItemStack input = e.getItem(); ItemStack input = e.getItem();
Block block = b.getRelative(BlockFace.UP); Block block = b.getRelative(BlockFace.UP);
for (ItemStack convert : RecipeType.getRecipeInputs(Crucible.this)) { for (int i = 0; i < recipes.size(); i += 2) {
if (SlimefunManager.isItemSimilar(input, convert, true)) { ItemStack convert = recipes.get(i);
e.cancel();
if (SlimefunManager.isItemSimilar(input, convert, true)) {
ItemStack removing = input.clone(); ItemStack removing = input.clone();
removing.setAmount(convert.getAmount()); removing.setAmount(convert.getAmount());
p.getInventory().removeItem(removing); p.getInventory().removeItem(removing);
@ -133,13 +145,15 @@ public class Crucible extends SlimefunGadget {
runPostTask(block, water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, 1); runPostTask(block, water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, 1);
}, 50L); }, 50L);
break;
} }
} }
SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true); SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true);
} }
} }
}); };
} }
private void runPostTask(Block block, Sound sound, int times) { private void runPostTask(Block block, Sound sound, int times) {