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.recipes.MinecraftRecipe;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
@ -76,33 +75,37 @@ public class RecipeType {
return SlimefunItem.getByID(machine);
}
public static List<ItemStack> getRecipeInputs(SlimefunItem machine) {
public static List<ItemStack> getRecipeInputs(SlimefunMachine machine) {
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<>();
for (int i = 0; i < recipes.size(); i++) {
if (i % 2 == 0) convertible.add(recipes.get(i)[0]);
}
return convertible;
}
public static List<ItemStack[]> getRecipeInputList(SlimefunItem machine) {
public static List<ItemStack[]> getRecipeInputList(SlimefunMachine machine) {
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<>();
for (int i = 0; i < recipes.size(); i++) {
if (i % 2 == 0) convertible.add(recipes.get(i));
}
return convertible;
}
public static ItemStack getRecipeOutput(SlimefunItem machine, ItemStack input) {
List<ItemStack[]> recipes = (machine instanceof SlimefunMachine ? ((SlimefunMachine) machine).getRecipes(): ((SlimefunGadget) machine).getRecipes());
public static ItemStack getRecipeOutput(SlimefunMachine machine, ItemStack input) {
List<ItemStack[]> recipes = machine.getRecipes();
return recipes.get(((getRecipeInputs(machine).indexOf(input) * 2) + 1))[0].clone();
}
public static ItemStack getRecipeOutputList(SlimefunItem machine, ItemStack[] input) {
List<ItemStack[]> recipes = (machine instanceof SlimefunMachine ? ((SlimefunMachine) machine).getRecipes(): ((SlimefunGadget) machine).getRecipes());
public static ItemStack getRecipeOutputList(SlimefunMachine machine, ItemStack[] input) {
List<ItemStack[]> recipes = machine.getRecipes();
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);
if (handler.isPresent()) {
callable.accept(c.cast(handler.get()));
try {
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;
}

View File

@ -17,19 +17,29 @@ import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
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.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.Slimefun;
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) {
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<>();
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.NETHER_WART));
return items.toArray(new ItemStack[0]);
return items;
}
@Override
public void preRegister() {
addItemHandler((BlockUseHandler) e -> {
public BlockUseHandler getItemHandler() {
return e -> {
Optional<Block> block = e.getClickedBlock();
if (block.isPresent()) {
e.cancel();
Player p = e.getPlayer();
Block b = block.get();
if (p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.ACCESS_INVENTORIES)) {
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)) {
ItemStack removing = input.clone();
removing.setAmount(convert.getAmount());
p.getInventory().removeItem(removing);
ItemStack adding = RecipeType.getRecipeOutput(Composter.this, convert);
ItemStack adding = recipes.get(i + 1);
for (int i = 1; i < 12; i++) {
int j = i;
for (int j = 1; j < 12; j++) {
int index = j;
Slimefun.runSync(() -> {
if (j < 11) {
if (index < 11) {
b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType().isBlock() ? input.getType() : Material.HAY_BLOCK);
}
else {
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F);
b.getWorld().dropItemNaturally(b.getRelative(BlockFace.UP).getLocation(), adding);
}
}, i * 30L);
}, j * 30L);
}
break;
}
}
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.Lists.RecipeType;
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.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
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) {
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<>();
items.add(new ItemStack(Material.COBBLESTONE, 16));
@ -57,15 +67,17 @@ public class Crucible extends SlimefunGadget {
items.add(new ItemStack(Material.LAVA_BUCKET));
}
return items.toArray(new ItemStack[0]);
return items;
}
@Override
public void preRegister() {
addItemHandler((BlockUseHandler) e -> {
public BlockUseHandler getItemHandler() {
return e -> {
Optional<Block> optional = e.getClickedBlock();
if (optional.isPresent()) {
e.cancel();
Player p = e.getPlayer();
Block b = optional.get();
@ -73,10 +85,10 @@ public class Crucible extends SlimefunGadget {
ItemStack input = e.getItem();
Block block = b.getRelative(BlockFace.UP);
for (ItemStack convert : RecipeType.getRecipeInputs(Crucible.this)) {
for (int i = 0; i < recipes.size(); i += 2) {
ItemStack convert = recipes.get(i);
if (SlimefunManager.isItemSimilar(input, convert, true)) {
e.cancel();
ItemStack removing = input.clone();
removing.setAmount(convert.getAmount());
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);
}, 50L);
break;
}
}
SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true);
}
}
});
};
}
private void runPostTask(Block block, Sound sound, int times) {