From 4882c7e4ccb424a876c0c83c53515fef7b8b4c66 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 27 Jan 2020 01:05:28 +0100 Subject: [PATCH] Super extreme ultra mega refactor 3000 --- CHANGELOG.md | 2 + pom.xml | 4 +- .../slimefun4/api/ErrorReport.java | 2 +- .../slimefun4/api/events/ItemUseEvent.java | 134 +++++++++++ .../commands/subcommands/GiveCommand.java | 26 ++- .../commands/subcommands/ResearchCommand.java | 13 +- .../subcommands/TeleporterCommand.java | 6 +- .../core/guide/ChestSlimefunGuide.java | 18 +- .../slimefun4/core/guide/GuideSettings.java | 1 + .../listeners/BlockListener.java | 3 +- .../listeners/ItemPickupListener.java | 17 +- .../listeners/SlimefunGuideListener.java | 34 ++- .../listeners/SlimefunItemListener.java | 74 +++--- .../slimefun4/utils/FireworkUtils.java | 6 +- .../SlimefunItem/SlimefunBackpack.java | 9 +- .../SlimefunItem/cargo/CargoConnector.java | 36 +++ .../SlimefunItem/cargo/CargoManagerBlock.java | 36 +-- .../Objects/SlimefunItem/items/Bandage.java | 41 ++++ .../SlimefunItem/items/DietCookie.java | 13 +- .../SlimefunItem/items/EnderBackpack.java | 20 +- .../SlimefunItem/items/ExplosivePickaxe.java | 74 +++--- .../SlimefunItem/items/ExplosiveShovel.java | 48 ++-- .../SlimefunItem/items/FortuneCookie.java | 12 +- .../Objects/SlimefunItem/items/GoldPan.java | 25 +- .../SlimefunItem/items/GrapplingHook.java | 103 ++++----- .../SlimefunItem/items/HerculesPickaxe.java | 3 + .../SlimefunItem/items/InfernalBonemeal.java | 24 +- .../SlimefunItem/items/KnowledgeFlask.java | 27 ++- .../SlimefunItem/items/KnowledgeTome.java | 63 ++--- .../Objects/SlimefunItem/items/LumberAxe.java | 3 + .../SlimefunItem/items/MagicEyeOfEnder.java | 35 ++- .../SlimefunItem/items/MagicSugar.java | 43 ++-- .../Objects/SlimefunItem/items/MeatJerky.java | 8 +- .../Objects/SlimefunItem/items/Medicine.java | 33 +++ .../SlimefunItem/items/MonsterJerky.java | 20 +- .../SlimefunItem/items/Multimeter.java | 38 +-- .../SlimefunItem/items/NetherGoldPan.java | 21 +- .../items/PickaxeOfTheSeeker.java | 66 +++--- .../SlimefunItem/items/PortableCrafter.java | 18 +- .../SlimefunItem/items/PortableDustbin.java | 21 +- .../items/PortableGEOScanner.java | 18 +- .../Objects/SlimefunItem/items/Rag.java | 41 ++++ .../SlimefunItem/items/SeismicAxe.java | 89 ++++---- .../SlimefunItem/items/SmeltersPickaxe.java | 2 + .../Objects/SlimefunItem/items/Splint.java | 39 ++++ .../SlimefunItem/items/StormStaff.java | 102 +++++---- .../items/TelepositionScroll.java | 24 +- .../Objects/SlimefunItem/items/Vitamins.java | 49 ++++ .../SlimefunItem/items/WaterStaff.java | 29 +++ .../Objects/SlimefunItem/items/WindStaff.java | 40 ++-- .../SlimefunItem/machines/Composter.java | 73 +++--- .../SlimefunItem/machines/Crucible.java | 131 ++++++----- .../machines/HologramProjector.java | 26 +-- .../electric/geo/GEOScannerBlock.java | 20 +- .../machines/electric/gps/ElevatorPlate.java | 20 +- .../electric/gps/GPSControlPanel.java | 22 ++ .../machines/electric/gps/GPSTransmitter.java | 11 +- .../Objects/handlers/BlockUseHandler.java | 15 ++ .../handlers/ItemConsumptionHandler.java | 2 +- .../handlers/ItemInteractionHandler.java | 10 +- .../Objects/handlers/ItemUseHandler.java | 15 ++ .../Slimefun/Setup/MiscSetup.java | 15 +- .../Slimefun/Setup/SlimefunSetup.java | 216 +++++------------- .../Slimefun/SlimefunPlugin.java | 2 +- src/main/resources/languages/messages_en.yml | 1 + 65 files changed, 1279 insertions(+), 913 deletions(-) create mode 100644 src/main/java/io/github/thebusybiscuit/slimefun4/api/events/ItemUseEvent.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoConnector.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Bandage.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Medicine.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Rag.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Splint.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Vitamins.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/WaterStaff.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSControlPanel.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/BlockUseHandler.java create mode 100644 src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemUseHandler.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 2681e2f0f..14dcb3cd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,8 @@ * Removed Solar Array * A lot of internal cleanup * Performance improvements for GEO Miner and Oil Pump +* General performance improvements +* Changed Startup console message ### Fixes * Fixed #1355 diff --git a/pom.xml b/pom.xml index 80291eb05..03a56410e 100644 --- a/pom.xml +++ b/pom.xml @@ -109,13 +109,13 @@ com.github.TheBusyBiscuit CS-CoreLib - ebba7c0096 + 8081bb4fe4 provided com.github.thebusybiscuit CS-CoreLib2 - 0.8.8 + 0.9 compile diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java index 1be6a1c73..31fb13082 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java @@ -76,7 +76,7 @@ public class ErrorReport { Slimefun.getLogger().log(Level.WARNING, "You can put the file on Pastebin and then post it here: https://github.com/TheBusyBiscuit/Slimefun4/issues"); Slimefun.getLogger().log(Level.WARNING, ""); } catch (FileNotFoundException x) { - Slimefun.getLogger().log(Level.SEVERE, "An Error occured while saving an Error-Report for Slimefun " + Slimefun.getVersion(), x); + Slimefun.getLogger().log(Level.SEVERE, "An Error occured while saving an Error-Report for Slimefun " + SlimefunPlugin.getVersion(), x); } }); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/events/ItemUseEvent.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/events/ItemUseEvent.java new file mode 100644 index 000000000..d9680df5f --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/events/ItemUseEvent.java @@ -0,0 +1,134 @@ +package io.github.thebusybiscuit.slimefun4.api.events; + +import java.util.Optional; + +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.cscorelib2.data.ComputedOptional; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.api.BlockStorage; + +public class ItemUseEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + + private final PlayerInteractEvent event; + private final Player player; + + private final Optional itemStack; + private final Optional clickedBlock; + + private final EquipmentSlot hand; + private final BlockFace face; + + private ComputedOptional slimefunItem = ComputedOptional.createNew(); + private ComputedOptional slimefunBlock = ComputedOptional.createNew(); + + private Result itemResult = Result.DEFAULT; + private Result blockResult = Result.DEFAULT; + + public ItemUseEvent(PlayerInteractEvent e) { + event = e; + player = e.getPlayer(); + clickedBlock = Optional.ofNullable(e.getClickedBlock()); + face = e.getBlockFace(); + hand = e.getHand(); + + if (e.getItem() == null || e.getItem().getType() == Material.AIR || e.getItem().getAmount() == 0) { + itemStack = Optional.empty(); + } + else { + itemStack = Optional.of(e.getItem()); + } + } + + public static HandlerList getHandlerList() { + return handlers; + } + + public HandlerList getHandlers() { + return handlers; + } + + public PlayerInteractEvent getInteractEvent() { + return event; + } + + public Player getPlayer() { + return player; + } + + public ItemStack getItem() { + return itemStack.orElse(new ItemStack(Material.AIR)); + } + + public EquipmentSlot getHand() { + return hand; + } + + public Optional getClickedBlock() { + return clickedBlock; + } + + public BlockFace getClickedFace() { + return face; + } + + public Optional getSlimefunItem() { + + if (!slimefunItem.isComputed()) { + if (itemStack.isPresent()) { + slimefunItem.compute(SlimefunItem.getByItem(itemStack.get())); + } + else { + slimefunItem = ComputedOptional.empty(); + } + } + + return slimefunItem.getAsOptional(); + } + + public Optional getSlimefunBlock() { + + if (!slimefunBlock.isComputed()) { + if (clickedBlock.isPresent()) { + slimefunBlock.compute(BlockStorage.check(clickedBlock.get())); + } + else { + slimefunBlock = ComputedOptional.empty(); + } + } + + return slimefunBlock.getAsOptional(); + } + + public void cancel() { + itemResult = Result.DENY; + blockResult = Result.DENY; + } + + public Result useItem() { + return itemResult; + } + + public Result useBlock() { + return blockResult; + } + + public void setUseItem(Result result) { + itemResult = result; + } + + public void setUseBlock(Result result) { + blockResult = result; + } + +} diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java index 7bcd06be7..50553668d 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/GiveCommand.java @@ -14,6 +14,10 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.Slimefun; public class GiveCommand extends SubCommand { + + private static final String PLACEHOLDER_PLAYER = "%player%"; + private static final String PLACEHOLDER_ITEM = "%item%"; + private static final String PLACEHOLDER_AMOUNT = "%amount%"; public GiveCommand(SlimefunPlugin plugin, SlimefunCommand cmd) { super(plugin, cmd); @@ -32,37 +36,39 @@ public class GiveCommand extends SubCommand { if (player.isPresent()) { Player p = player.get(); + if (Slimefun.listIDs().contains(args[2].toUpperCase())) { - SlimefunPlugin.getLocal().sendMessage(p, "messages.given-item", true, msg -> msg.replace("%item%", SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()).replace("%amount%", "1")); + SlimefunPlugin.getLocal().sendMessage(p, "messages.given-item", true, msg -> msg.replace(PLACEHOLDER_ITEM, SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()).replace(PLACEHOLDER_AMOUNT, "1")); p.getInventory().addItem(SlimefunItem.getByID(args[2].toUpperCase()).getItem()); - SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-item", true, msg -> msg.replace("%player%", args[1]).replace("%item%", SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()).replace("%amount%", "1")); + SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-item", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1]).replace(PLACEHOLDER_ITEM, SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()).replace(PLACEHOLDER_AMOUNT, "1")); } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-item", true, msg -> msg.replace("%item%", args[2])); + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-item", true, msg -> msg.replace(PLACEHOLDER_ITEM, args[2])); } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace("%player%", args[1])); + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1])); } else if (args.length == 4) { Optional player = PlayerList.findByName(args[1]); if (player.isPresent()) { Player p = player.get(); + if (Slimefun.listIDs().contains(args[2].toUpperCase())) { try { int amount = Integer.parseInt(args[3]); if (amount > 0) { - SlimefunPlugin.getLocal().sendMessage(p, "messages.given-item", true, msg -> msg.replace("%item%", SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()).replace("%amount%", String.valueOf(amount))); + SlimefunPlugin.getLocal().sendMessage(p, "messages.given-item", true, msg -> msg.replace(PLACEHOLDER_ITEM, SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()).replace(PLACEHOLDER_AMOUNT, String.valueOf(amount))); p.getInventory().addItem(new CustomItem(SlimefunItem.getByID(args[2].toUpperCase()).getItem(), amount)); - SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-item", true, msg -> msg.replace("%player%", args[1]).replace("%item%", SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()).replace("%amount%", String.valueOf(amount))); + SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-item", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1]).replace(PLACEHOLDER_ITEM, SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()).replace(PLACEHOLDER_AMOUNT, String.valueOf(amount))); } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-amount", true, msg -> msg.replace("%amount%", String.valueOf(amount))); + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-amount", true, msg -> msg.replace(PLACEHOLDER_AMOUNT, String.valueOf(amount))); } catch (NumberFormatException e){ - SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-amount", true, msg -> msg.replace("%amount%", args[3])); + SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-amount", true, msg -> msg.replace(PLACEHOLDER_AMOUNT, args[3])); } } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-item", true, msg -> msg.replace("%item%", args[2])); + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-item", true, msg -> msg.replace(PLACEHOLDER_ITEM, args[2])); } - else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace("%player%", args[1])); + else SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1])); } else SlimefunPlugin.getLocal().sendMessage(sender, "messages.usage", true, msg -> msg.replace("%usage%", "/sf give [Amount]")); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/ResearchCommand.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/ResearchCommand.java index cb4f890a6..6d109aea3 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/ResearchCommand.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/ResearchCommand.java @@ -13,6 +13,9 @@ import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.api.PlayerProfile; public class ResearchCommand extends SubCommand { + + private static final String PLACEHOLDER_PLAYER = "%player%"; + private static final String PLACEHOLDER_RESEARCH = "%research%"; public ResearchCommand(SlimefunPlugin plugin, SlimefunCommand cmd) { super(plugin, cmd); @@ -40,7 +43,7 @@ public class ResearchCommand extends SubCommand { PlayerProfile.get(p, profile -> { if (args[2].equalsIgnoreCase("all")) { for (Research res : Research.list()) { - if (!profile.hasUnlocked(res)) SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-research", true, msg -> msg.replace("%player%", p.getName()).replace("%research%", res.getName())); + if (!profile.hasUnlocked(res)) SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-research", true, msg -> msg.replace(PLACEHOLDER_PLAYER, p.getName()).replace(PLACEHOLDER_RESEARCH, res.getName())); res.unlock(p, true); } } @@ -48,7 +51,7 @@ public class ResearchCommand extends SubCommand { for (Research res : Research.list()) { profile.setResearched(res, false); } - SlimefunPlugin.getLocal().sendMessage(p, "commands.research.reset", true, msg -> msg.replace("%player%", args[1])); + SlimefunPlugin.getLocal().sendMessage(p, "commands.research.reset", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1])); } else { Research research = null; @@ -62,16 +65,16 @@ public class ResearchCommand extends SubCommand { if (research != null) { research.unlock(p, true); final Research r = research; - SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-research", true, msg -> msg.replace("%player%", p.getName()).replace("%research%", r.getName())); + SlimefunPlugin.getLocal().sendMessage(sender, "messages.give-research", true, msg -> msg.replace(PLACEHOLDER_PLAYER, p.getName()).replace(PLACEHOLDER_RESEARCH, r.getName())); } else { - SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-research", true, msg -> msg.replace("%research%", args[2])); + SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-valid-research", true, msg -> msg.replace(PLACEHOLDER_RESEARCH, args[2])); } } }); } else { - SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace("%player%", args[1])); + SlimefunPlugin.getLocal().sendMessage(sender, "messages.not-online", true, msg -> msg.replace(PLACEHOLDER_PLAYER, args[1])); } } else SlimefunPlugin.getLocal().sendMessage(sender, "messages.no-permission", true); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/TeleporterCommand.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/TeleporterCommand.java index c7046bf1d..118d46e1e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/TeleporterCommand.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/commands/subcommands/TeleporterCommand.java @@ -9,7 +9,6 @@ import org.bukkit.entity.Player; import io.github.thebusybiscuit.slimefun4.core.commands.SlimefunCommand; import io.github.thebusybiscuit.slimefun4.core.commands.SubCommand; import me.mrCookieSlime.Slimefun.SlimefunPlugin; -import me.mrCookieSlime.Slimefun.api.Slimefun; public class TeleporterCommand extends SubCommand { @@ -21,8 +20,7 @@ public class TeleporterCommand extends SubCommand { public String getName() { return "teleporter"; } - - @SuppressWarnings("deprecation") + @Override public void onExecute(CommandSender sender, String[] args) { if (args.length == 2) { @@ -30,7 +28,7 @@ public class TeleporterCommand extends SubCommand { OfflinePlayer player = Bukkit.getOfflinePlayer(args[1]); if (player.getName() != null) { - Slimefun.getGPSNetwork().openTeleporterGUI((Player) sender, player.getUniqueId(), ((Player) sender).getLocation().getBlock().getRelative(BlockFace.DOWN), 999999999); + SlimefunPlugin.getGPSNetwork().openTeleporterGUI((Player) sender, player.getUniqueId(), ((Player) sender).getLocation().getBlock().getRelative(BlockFace.DOWN), 999999999); } else SlimefunPlugin.getLocal().sendMessage(sender, "messages.unknown-player", msg -> msg.replace("%player%", args[1])); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java index b68fd6c4d..4ffad5d1b 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/ChestSlimefunGuide.java @@ -371,21 +371,15 @@ public class ChestSlimefunGuide implements ISlimefunGuide { RecipeChoice[] choices = SlimefunPlugin.getMinecraftRecipes().getRecipeInput(recipe); - if (choices.length == 1) { - recipeItems[4] = choices[0].getItemStack(); - - if (choices[0] instanceof MaterialChoice && ((MaterialChoice) choices[0]).getChoices().size() > 1) { - task.add(RECIPE_SLOTS[4], (MaterialChoice) choices[0]); - } + if (choices[0] instanceof MaterialChoice && ((MaterialChoice) choices[0]).getChoices().size() > 1) { + recipeItems[4] = new ItemStack(((MaterialChoice) choices[0]).getChoices().get(0)); + task.add(RECIPE_SLOTS[4], (MaterialChoice) choices[0]); } else { for (int i = 0; i < choices.length; i++) { - if (choices[i] != null) { - recipeItems[i] = choices[i].getItemStack(); - - if (choices[i] instanceof MaterialChoice && ((MaterialChoice) choices[i]).getChoices().size() > 1) { - task.add(RECIPE_SLOTS[i], (MaterialChoice) choices[i]); - } + if (choices[i] instanceof MaterialChoice && ((MaterialChoice) choices[i]).getChoices().size() > 1) { + recipeItems[i] = new ItemStack(((MaterialChoice) choices[i]).getChoices().get(0)); + task.add(RECIPE_SLOTS[i], (MaterialChoice) choices[i]); } } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java index 73bcc59c3..17ddb8a40 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideSettings.java @@ -161,6 +161,7 @@ public final class GuideSettings { "&7Something will be added here later..." ), (pl, slot, item, action) -> { + // Add something here return false; }); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java index 1bca8f855..77ebd539b 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/BlockListener.java @@ -68,7 +68,7 @@ public class BlockListener implements Listener { ItemStack item = e.getItemInHand(); SlimefunItem sfItem = SlimefunItem.getByItem(item); - if (sfItem != null && !sfItem.isDisabled() && !(sfItem instanceof NotPlaceable)) { + if (sfItem != null && Slimefun.isEnabled(e.getPlayer(), sfItem, true) && !(sfItem instanceof NotPlaceable)) { if (!Slimefun.hasUnlocked(e.getPlayer(), sfItem, true)) { e.setCancelled(true); } @@ -196,6 +196,7 @@ public class BlockListener implements Listener { int fortune = getFortuneLevel(item, e.getBlock()); Block block2 = e.getBlock().getRelative(BlockFace.UP); + if (sensitiveMaterials.contains(block2.getType())) { SlimefunItem sfItem = BlockStorage.check(e.getBlock().getRelative(BlockFace.UP)); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ItemPickupListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ItemPickupListener.java index c4a3b1737..ff93d4307 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ItemPickupListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ItemPickupListener.java @@ -1,13 +1,13 @@ package io.github.thebusybiscuit.slimefun4.implementation.listeners; -import me.mrCookieSlime.Slimefun.SlimefunPlugin; - -import org.bukkit.ChatColor; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.inventory.InventoryPickupItemEvent; +import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; + /** * Listens to the ItemPickup events to prevent it if the item has the "no_pickup" metadata or is an ALTAR_PROBE. * @@ -16,6 +16,9 @@ import org.bukkit.event.inventory.InventoryPickupItemEvent; * @since 4.1.11 */ public class ItemPickupListener implements Listener { + + private static final String METADATA_JEY = "no_pickup"; + private static final String ITEM_PREFIX = ChatColors.color("&5&dALTAR &3Probe - &e"); public ItemPickupListener(SlimefunPlugin plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); @@ -23,8 +26,8 @@ public class ItemPickupListener implements Listener { @EventHandler public void onPickup(EntityPickupItemEvent e) { - if (e.getItem().hasMetadata("no_pickup")) e.setCancelled(true); - else if (!e.getItem().hasMetadata("no_pickup") && e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith(ChatColor.translateAlternateColorCodes('&', "&5&dALTAR &3Probe - &e"))) { + if (e.getItem().hasMetadata(METADATA_JEY)) e.setCancelled(true); + else if (e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith(ITEM_PREFIX)) { e.setCancelled(true); e.getItem().remove(); } @@ -32,8 +35,8 @@ public class ItemPickupListener implements Listener { @EventHandler public void onMinecartPickup(InventoryPickupItemEvent e) { - if (e.getItem().hasMetadata("no_pickup")) e.setCancelled(true); - else if (!e.getItem().hasMetadata("no_pickup") && e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith(ChatColor.translateAlternateColorCodes('&', "&5&dALTAR &3Probe - &e"))) { + if (e.getItem().hasMetadata(METADATA_JEY)) e.setCancelled(true); + else if (e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith(ITEM_PREFIX)) { e.setCancelled(true); e.getItem().remove(); } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java index 5c8cab97f..4c3e55fff 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunGuideListener.java @@ -3,21 +3,28 @@ package io.github.thebusybiscuit.slimefun4.implementation.listeners; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.slimefun4.core.guide.GuideSettings; import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout; import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; public class SlimefunGuideListener implements Listener { + + private final boolean giveOnFirstJoin; - public SlimefunGuideListener(SlimefunPlugin plugin) { + public SlimefunGuideListener(SlimefunPlugin plugin, boolean giveOnFirstJoin) { + this.giveOnFirstJoin = giveOnFirstJoin; plugin.getServer().getPluginManager().registerEvents(this, plugin); } @EventHandler public void onJoin(PlayerJoinEvent e) { - if (!e.getPlayer().hasPlayedBefore()) { + if (giveOnFirstJoin && !e.getPlayer().hasPlayedBefore()) { Player p = e.getPlayer(); if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled")) return; if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled-items.SLIMEFUN_GUIDE")) return; @@ -26,5 +33,28 @@ public class SlimefunGuideListener implements Listener { p.getInventory().addItem(SlimefunGuide.getItem(type)); } } + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + Player p = e.getPlayer(); + ItemStack item = e.getItem(); + + if (SlimefunManager.isItemSimilar(item, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true)) { + if (p.isSneaking()) GuideSettings.openSettings(p, item); + else SlimefunGuide.openGuide(p, SlimefunGuideLayout.BOOK); + } + else if (SlimefunManager.isItemSimilar(item, SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), true)) { + if (p.isSneaking()) GuideSettings.openSettings(p, item); + else SlimefunGuide.openGuide(p, SlimefunGuideLayout.CHEST); + } + else if (SlimefunManager.isItemSimilar(item, SlimefunGuide.getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) { + if (p.isSneaking()) GuideSettings.openSettings(p, item); + else { + // We rather just run the command here, + // all necessary permission checks will be handled there. + p.chat("/sf cheat"); + } + } + } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunItemListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunItemListener.java index 448434f10..342f022d0 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunItemListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/SlimefunItemListener.java @@ -1,6 +1,7 @@ package io.github.thebusybiscuit.slimefun4.implementation.listeners; import java.util.List; +import java.util.Optional; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -8,6 +9,7 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.IronGolem; import org.bukkit.entity.Player; +import org.bukkit.event.Event.Result; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -23,20 +25,18 @@ import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import io.github.thebusybiscuit.slimefun4.core.guide.GuideSettings; -import io.github.thebusybiscuit.slimefun4.core.guide.SlimefunGuideLayout; import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; -import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.MultiTool; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBackpack; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemDropHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; @@ -54,19 +54,39 @@ public class SlimefunItemListener implements Listener { plugin.getServer().getPluginManager().registerEvents(this, plugin); utilities = SlimefunPlugin.getUtilities(); } - - /* - * Handles Left click use and checks for disabled items. - */ + @EventHandler - public void enabledCheck(PlayerInteractEvent e) { - if (e.getAction() != Action.LEFT_CLICK_AIR && e.getAction() != Action.LEFT_CLICK_BLOCK) { - return; - } + public void onRightClick(PlayerInteractEvent e) { + if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { + io.github.thebusybiscuit.slimefun4.api.events.ItemUseEvent event = new io.github.thebusybiscuit.slimefun4.api.events.ItemUseEvent(e); + Bukkit.getPluginManager().callEvent(event); + + boolean itemUsed = e.getHand() == EquipmentSlot.HAND; + + if (event.useItem() != Result.DENY) { + Optional optional = event.getSlimefunItem(); + + if (optional.isPresent() && Slimefun.hasUnlocked(e.getPlayer(), optional.get(), true)) { + optional.get().callItemHandler(ItemUseHandler.class, handler -> handler.onRightClick(event)); + itemUsed = true; + } + } + + if (!itemUsed && event.useBlock() != Result.DENY) { + Optional optional = event.getSlimefunBlock(); - ItemStack item = e.getItem(); - if (item != null && !Slimefun.isEnabled(e.getPlayer(), item, true)) { - e.setCancelled(true); + if (optional.isPresent() && Slimefun.hasUnlocked(e.getPlayer(), optional.get(), true)) { + optional.get().callItemHandler(BlockUseHandler.class, handler -> handler.onRightClick(event)); + } + } + + if (e.useInteractedBlock() != Result.DENY) { + e.setUseInteractedBlock(event.useBlock()); + } + + if (e.useItemInHand() != Result.DENY) { + e.setUseItemInHand(event.useItem()); + } } } @@ -79,22 +99,7 @@ public class SlimefunItemListener implements Listener { Player p = e.getPlayer(); ItemStack item = e.getItem(); - if (SlimefunManager.isItemSimilar(item, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true)) { - if (p.isSneaking()) GuideSettings.openSettings(p, item); - else SlimefunGuide.openGuide(p, SlimefunGuideLayout.BOOK); - } - else if (SlimefunManager.isItemSimilar(item, SlimefunGuide.getItem(SlimefunGuideLayout.CHEST), true)) { - if (p.isSneaking()) GuideSettings.openSettings(p, item); - else SlimefunGuide.openGuide(p, SlimefunGuideLayout.CHEST); - } - else if (SlimefunManager.isItemSimilar(item, SlimefunGuide.getItem(SlimefunGuideLayout.CHEAT_SHEET), true)) { - if (p.isSneaking()) GuideSettings.openSettings(p, item); - else p.chat("/sf cheat"); - } - else if (SlimefunManager.isItemSimilar(item, SlimefunItems.DEBUG_FISH, true)) { - // Ignore the debug fish in here - } - else { + if (!SlimefunManager.isItemSimilar(item, SlimefunItems.DEBUG_FISH, true)) { SlimefunItem slimefunItem = SlimefunItem.getByItem(item); if (slimefunItem != null) { @@ -103,12 +108,7 @@ public class SlimefunItemListener implements Listener { handler.onRightClick(e, p, item) ); - // Open the Backpack (also includes Coolers) - if (slimefunItem instanceof SlimefunBackpack) { - e.setCancelled(true); - BackpackListener.openBackpack(p, item, (SlimefunBackpack) slimefunItem); - } - else if (slimefunItem instanceof MultiTool) { + if (slimefunItem instanceof MultiTool) { e.setCancelled(true); List modes = ((MultiTool) slimefunItem).getModes(); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/FireworkUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/FireworkUtils.java index d924f8768..386acbca7 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/FireworkUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/FireworkUtils.java @@ -7,9 +7,9 @@ import org.bukkit.Color; import org.bukkit.FireworkEffect; import org.bukkit.FireworkEffect.Type; import org.bukkit.Location; +import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Firework; -import org.bukkit.entity.Player; import org.bukkit.inventory.meta.FireworkMeta; public final class FireworkUtils { @@ -40,9 +40,9 @@ public final class FireworkUtils { return fw; } - public static void launchRandom(Player p, int amount) { + public static void launchRandom(Entity n, int amount) { for (int i = 0; i < amount; i++) { - Location l = p.getLocation().clone(); + Location l = n.getLocation().clone(); l.setX(l.getX() + ThreadLocalRandom.current().nextInt(amount)); l.setX(l.getX() - ThreadLocalRandom.current().nextInt(amount)); l.setZ(l.getZ() + ThreadLocalRandom.current().nextInt(amount)); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java index 146d0d1af..4b1649796 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java @@ -2,11 +2,13 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.slimefun4.implementation.listeners.BackpackListener; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class SlimefunBackpack extends SlimefunItem { +public class SlimefunBackpack extends SimpleSlimefunItem { private final int size; @@ -20,4 +22,9 @@ public class SlimefunBackpack extends SlimefunItem { return size; } + @Override + public ItemUseHandler getItemHandler() { + return e -> BackpackListener.openBackpack(e.getPlayer(), e.getItem(), this); + } + } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoConnector.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoConnector.java new file mode 100644 index 000000000..36953a884 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoConnector.java @@ -0,0 +1,36 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo; + +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; +import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; + +public class CargoConnector extends SimpleSlimefunItem { + + public CargoConnector(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { + super(category, item, recipeType, recipe, recipeOutput); + } + + + @Override + public BlockUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + Block b = e.getClickedBlock().get(); + + if (CargoNet.getNetworkFromLocation(b.getLocation()) != null) { + p.sendMessage(ChatColors.color("&7Connected: " + "&2\u2714")); + } + else { + p.sendMessage(ChatColors.color("&7Connected: " + "&4\u2718")); + } + }; + } +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java index fa2b7c9f5..65f4350a0 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java @@ -1,18 +1,20 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo; +import java.util.Optional; + import org.bukkit.ChatColor; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import io.github.thebusybiscuit.slimefun4.api.events.ItemUseEvent; import io.github.thebusybiscuit.slimefun4.utils.holograms.SimpleHologram; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; -import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; @@ -42,26 +44,24 @@ public class CargoManagerBlock extends SlimefunItem { return false; } - }, new ItemInteractionHandler() { + }, new BlockUseHandler() { @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { - Block b = e.getClickedBlock(); - if (b == null) return false; - - String item = BlockStorage.checkID(b); - if (item == null || !item.equals(getID())) return false; - e.setCancelled(true); + public void onRightClick(ItemUseEvent e) { + Optional block = e.getClickedBlock(); + if (block.isPresent()) { + Player p = e.getPlayer(); + Block b = block.get(); - if (BlockStorage.getLocationInfo(b.getLocation(), "visualizer") == null) { - BlockStorage.addBlockInfo(b, "visualizer", "disabled"); - p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&4\u2718")); + if (BlockStorage.getLocationInfo(b.getLocation(), "visualizer") == null) { + BlockStorage.addBlockInfo(b, "visualizer", "disabled"); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&4\u2718")); + } + else { + BlockStorage.addBlockInfo(b, "visualizer", null); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&2\u2714")); + } } - else { - BlockStorage.addBlockInfo(b, "visualizer", null); - p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&2\u2714")); - } - return true; } }); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Bandage.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Bandage.java new file mode 100644 index 000000000..060053774 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Bandage.java @@ -0,0 +1,41 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class Bandage extends SimpleSlimefunItem { + + public Bandage(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { + super(category, item, recipeType, recipe, recipeOutput); + } + + @Override + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + + if (p.getGameMode() != GameMode.CREATIVE) { + ItemUtils.consumeItem(e.getItem(), false); + } + + p.getWorld().playEffect(p.getLocation(), Effect.STEP_SOUND, Material.WHITE_WOOL); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 1)); + p.setFireTicks(0); + + e.cancel(); + }; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java index 5557cce79..1d7395992 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java @@ -20,16 +20,11 @@ public class DietCookie extends SimpleSlimefunItem { @Override public ItemConsumptionHandler getItemHandler() { return (e, p, item) -> { - if (isItem(item)) { - SlimefunPlugin.getLocal().sendMessage(p, "messages.diet-cookie"); - p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); + SlimefunPlugin.getLocal().sendMessage(p, "messages.diet-cookie"); + p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); - if (p.hasPotionEffect(PotionEffectType.LEVITATION)) p.removePotionEffect(PotionEffectType.LEVITATION); - p.addPotionEffect(PotionEffectType.LEVITATION.createEffect(60, 1)); - - return true; - } - return false; + if (p.hasPotionEffect(PotionEffectType.LEVITATION)) p.removePotionEffect(PotionEffectType.LEVITATION); + p.addPotionEffect(PotionEffectType.LEVITATION.createEffect(60, 1)); }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/EnderBackpack.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/EnderBackpack.java index 4c0ddf7e3..91535dacb 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/EnderBackpack.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/EnderBackpack.java @@ -1,30 +1,28 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; import org.bukkit.Sound; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class EnderBackpack extends SimpleSlimefunItem { +public class EnderBackpack extends SimpleSlimefunItem { public EnderBackpack(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - e.setCancelled(true); - p.openInventory(p.getEnderChest()); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 1, 1); - return true; - } - else return false; + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + p.openInventory(p.getEnderChest()); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 1, 1); + e.cancel(); }; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java index 2d8a1a280..a0fc6a92a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java @@ -40,47 +40,49 @@ public class ExplosivePickaxe extends SimpleSlimefunItem impl public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { if (isItem(item)) { - e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F); - e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F); - - for (int x = -1; x <= 1; x++) { - for (int y = -1; y <= 1; y++) { - for (int z = -1; z <= 1; z++) { - if (x == 0 && y == 0 && z == 0) { - continue; - } - - Block b = e.getBlock().getRelative(x, y, z); - - if (b.getType() != Material.AIR && !b.isLiquid() && !MaterialCollections.getAllUnbreakableBlocks().contains(b.getType()) && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), ProtectableAction.BREAK_BLOCK)) { - SlimefunPlugin.getProtectionManager().logAction(e.getPlayer(), b, ProtectableAction.BREAK_BLOCK); + if (Slimefun.hasUnlocked(e.getPlayer(), this, true)) { + e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F); + e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F); + + for (int x = -1; x <= 1; x++) { + for (int y = -1; y <= 1; y++) { + for (int z = -1; z <= 1; z++) { + if (x == 0 && y == 0 && z == 0) { + continue; + } + + Block b = e.getBlock().getRelative(x, y, z); + + if (b.getType() != Material.AIR && !b.isLiquid() && !MaterialCollections.getAllUnbreakableBlocks().contains(b.getType()) && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), ProtectableAction.BREAK_BLOCK)) { + SlimefunPlugin.getProtectionManager().logAction(e.getPlayer(), b, ProtectableAction.BREAK_BLOCK); - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); - SlimefunItem sfItem = BlockStorage.check(b); - boolean allow = false; - - if (sfItem != null && !(sfItem instanceof HandledBlock)) { - if (SlimefunPlugin.getUtilities().blockHandlers.containsKey(sfItem.getID())) { - allow = SlimefunPlugin.getUtilities().blockHandlers.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK); + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); + SlimefunItem sfItem = BlockStorage.check(b); + boolean allow = false; + + if (sfItem != null && !(sfItem instanceof HandledBlock)) { + if (SlimefunPlugin.getUtilities().blockHandlers.containsKey(sfItem.getID())) { + allow = SlimefunPlugin.getUtilities().blockHandlers.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK); + } + if (allow) { + drops.add(BlockStorage.retrieve(e.getBlock())); + } } - if (allow) { - drops.add(BlockStorage.retrieve(e.getBlock())); + else if (b.getType() == Material.PLAYER_HEAD) { + b.breakNaturally(); } - } - else if (b.getType() == Material.PLAYER_HEAD) { - b.breakNaturally(); - } - else if (b.getType().name().endsWith("_SHULKER_BOX")) { - b.breakNaturally(); - } - else { - for (ItemStack drop : b.getDrops(getItem())) { - b.getWorld().dropItemNaturally(b.getLocation(), (b.getType().toString().endsWith("_ORE") && b.getType() != Material.IRON_ORE && b.getType() != Material.GOLD_ORE) ? new CustomItem(drop, fortune): drop); + else if (b.getType().name().endsWith("_SHULKER_BOX")) { + b.breakNaturally(); } - b.setType(Material.AIR); + else { + for (ItemStack drop : b.getDrops(getItem())) { + b.getWorld().dropItemNaturally(b.getLocation(), (b.getType().toString().endsWith("_ORE") && b.getType() != Material.IRON_ORE && b.getType() != Material.GOLD_ORE) ? new CustomItem(drop, fortune): drop); + } + b.setType(Material.AIR); + } + + damageItem(e.getPlayer(), item); } - - damageItem(e.getPlayer(), item); } } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java index acfc28b3c..145937b71 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java @@ -35,31 +35,33 @@ public class ExplosiveShovel extends SimpleSlimefunItem imple public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { if (isItem(item)) { - e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F); - e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F); - - for (int x = -1; x <= 1; x++) { - for (int y = -1; y <= 1; y++) { - for (int z = -1; z <= 1; z++) { - if (x == 0 && y == 0 && z == 0) { - continue; - } - - Block b = e.getBlock().getRelative(x, y, z); - - if (MaterialTools.getBreakableByShovel().contains(b.getType()) && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), ProtectableAction.BREAK_BLOCK)) { - SlimefunPlugin.getProtectionManager().logAction(e.getPlayer(), b, ProtectableAction.BREAK_BLOCK); - - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); - - for (ItemStack drop : b.getDrops(getItem())) { - if (drop != null) { - b.getWorld().dropItemNaturally(b.getLocation(), drop); - } + if (Slimefun.hasUnlocked(e.getPlayer(), this, true)) { + e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F); + e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F); + + for (int x = -1; x <= 1; x++) { + for (int y = -1; y <= 1; y++) { + for (int z = -1; z <= 1; z++) { + if (x == 0 && y == 0 && z == 0) { + continue; } - b.setType(Material.AIR); - damageItem(e.getPlayer(), item); + Block b = e.getBlock().getRelative(x, y, z); + + if (MaterialTools.getBreakableByShovel().contains(b.getType()) && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), ProtectableAction.BREAK_BLOCK)) { + SlimefunPlugin.getProtectionManager().logAction(e.getPlayer(), b, ProtectableAction.BREAK_BLOCK); + + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); + + for (ItemStack drop : b.getDrops(getItem())) { + if (drop != null) { + b.getWorld().dropItemNaturally(b.getLocation(), drop); + } + } + + b.setType(Material.AIR); + damageItem(e.getPlayer(), item); + } } } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/FortuneCookie.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/FortuneCookie.java index 1c754062d..60e306968 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/FortuneCookie.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/FortuneCookie.java @@ -22,14 +22,10 @@ public class FortuneCookie extends SimpleSlimefunItem { @Override public ItemConsumptionHandler getItemHandler() { return (e, p, item) -> { - if (isItem(item)) { - List messages = SlimefunPlugin.getLocal().getMessages(p, "messages.fortune-cookie"); - String message = messages.get(ThreadLocalRandom.current().nextInt(messages.size())); - - p.sendMessage(ChatColors.color(message)); - return true; - } - return false; + List messages = SlimefunPlugin.getLocal().getMessages(p, "messages.fortune-cookie"); + String message = messages.get(ThreadLocalRandom.current().nextInt(messages.size())); + + p.sendMessage(ChatColors.color(message)); }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java index 9c0cff202..583f3224a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java @@ -2,6 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; import java.util.Arrays; import java.util.List; +import java.util.Optional; import org.bukkit.Effect; import org.bukkit.Material; @@ -16,11 +17,11 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class GoldPan extends SimpleSlimefunItem implements RecipeDisplayItem { +public class GoldPan extends SimpleSlimefunItem implements RecipeDisplayItem { private final List recipes; private final RandomizedSet randomizer = new RandomizedSet<>(); @@ -55,14 +56,16 @@ public class GoldPan extends SimpleSlimefunItem implemen } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - Block b = e.getClickedBlock(); + public ItemUseHandler getItemHandler() { + return e -> { + Optional block = e.getClickedBlock(); + + if (block.isPresent()) { + Block b = block.get(); - if (b != null && b.getType() == Material.GRAVEL && SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.BREAK_BLOCK)) { + if (b.getType() == Material.GRAVEL && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), ProtectableAction.BREAK_BLOCK)) { ItemStack output = randomizer.getRandom(); - + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); b.setType(Material.AIR); @@ -70,11 +73,9 @@ public class GoldPan extends SimpleSlimefunItem implemen b.getWorld().dropItemNaturally(b.getLocation(), output.clone()); } } - - e.setCancelled(true); - return true; } - else return false; + + e.cancel(); }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GrapplingHook.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GrapplingHook.java index ca5594157..12dca5c31 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GrapplingHook.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GrapplingHook.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Arrow; import org.bukkit.entity.Bat; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -16,12 +17,12 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.utils.Utilities; -public class GrapplingHook extends SimpleSlimefunItem { +public class GrapplingHook extends SimpleSlimefunItem { private long despawnTicks; @@ -30,60 +31,60 @@ public class GrapplingHook extends SimpleSlimefunItem { } @Override - public ItemInteractionHandler getItemHandler() { + public ItemUseHandler getItemHandler() { Utilities utilities = SlimefunPlugin.getUtilities(); - return (e, p, item) -> { - if (isItem(item)) { - UUID uuid = p.getUniqueId(); + return e -> { + Player p = e.getPlayer(); + UUID uuid = p.getUniqueId(); + + if (!e.getClickedBlock().isPresent() && !utilities.jumpState.containsKey(uuid)) { + e.cancel(); - if (e.getClickedBlock() == null && !utilities.jumpState.containsKey(uuid)) { - e.setCancelled(true); - - if (p.getInventory().getItemInOffHand().getType() == Material.BOW) { - // Cancel, to fix dupe #740 - return false; - } - utilities.jumpState.put(uuid, p.getInventory().getItemInMainHand().getType() != Material.SHEARS); - - if (item.getType() == Material.LEAD) { - item.setAmount(item.getAmount() - 1); - } - - Vector direction = p.getEyeLocation().getDirection().multiply(2.0); - Arrow arrow = p.getWorld().spawn(p.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), Arrow.class); - arrow.setShooter(p); - arrow.setVelocity(direction); - - Bat b = (Bat) p.getWorld().spawnEntity(p.getLocation(), EntityType.BAT); - b.setCanPickupItems(false); - b.setAI(false); - b.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 100000, 100000)); - b.setLeashHolder(arrow); - - utilities.damage.add(uuid); - utilities.remove.put(uuid, new Entity[]{b, arrow}); - - // To fix issue #253 - Slimefun.runSync(() -> { - if (utilities.jumpState.containsKey(uuid)) { - utilities.arrows.remove(uuid); - - for (Entity n : utilities.remove.get(uuid)) { - if (n.isValid()) n.remove(); - } - - Slimefun.runSync(() -> { - utilities.damage.remove(uuid); - utilities.jumpState.remove(uuid); - utilities.remove.remove(uuid); - }, 20L); - } - }, despawnTicks); + ItemStack item = e.getItem(); + + if (p.getInventory().getItemInOffHand().getType() == Material.BOW) { + // Cancel, to fix dupe #740 + return; } - return true; + + utilities.jumpState.put(uuid, p.getInventory().getItemInMainHand().getType() != Material.SHEARS); + + if (item.getType() == Material.LEAD) { + item.setAmount(item.getAmount() - 1); + } + + Vector direction = p.getEyeLocation().getDirection().multiply(2.0); + Arrow arrow = p.getWorld().spawn(p.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), Arrow.class); + arrow.setShooter(p); + arrow.setVelocity(direction); + + Bat b = (Bat) p.getWorld().spawnEntity(p.getLocation(), EntityType.BAT); + b.setCanPickupItems(false); + b.setAI(false); + b.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 100000, 100000)); + b.setLeashHolder(arrow); + + utilities.damage.add(uuid); + utilities.remove.put(uuid, new Entity[]{b, arrow}); + + // To fix issue #253 + Slimefun.runSync(() -> { + if (utilities.jumpState.containsKey(uuid)) { + utilities.arrows.remove(uuid); + + for (Entity n : utilities.remove.get(uuid)) { + if (n.isValid()) n.remove(); + } + + Slimefun.runSync(() -> { + utilities.damage.remove(uuid); + utilities.jumpState.remove(uuid); + utilities.remove.remove(uuid); + }, 20L); + } + }, despawnTicks); } - else return false; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java index 0c6542163..505d24e97 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java @@ -9,6 +9,7 @@ import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; +import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class HerculesPickaxe extends SimpleSlimefunItem { @@ -26,6 +27,8 @@ public class HerculesPickaxe extends SimpleSlimefunItem { public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { if (isItem(item) && e.getBlock().getType().toString().endsWith("_ORE")) { + if (!Slimefun.hasUnlocked(e.getPlayer(), this, true)) return true; + if (e.getBlock().getType() == Material.IRON_ORE) { drops.add(new CustomItem(SlimefunItems.IRON_DUST, 2)); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java index 3ab500cff..9a396e7f3 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java @@ -1,5 +1,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; +import java.util.Optional; + import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Material; @@ -11,22 +13,24 @@ import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class InfernalBonemeal extends SimpleSlimefunItem { +public class InfernalBonemeal extends SimpleSlimefunItem { public InfernalBonemeal(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { super(category, item, recipeType, recipe, recipeOutput); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - Block b = e.getClickedBlock(); + public ItemUseHandler getItemHandler() { + return e -> { + Optional block = e.getClickedBlock(); + + if (block.isPresent()) { + Block b = block.get(); - if (b != null && b.getType() == Material.NETHER_WART) { + if (b.getType() == Material.NETHER_WART) { Ageable ageable = (Ageable) b.getBlockData(); if (ageable.getAge() < ageable.getMaximumAge()) { @@ -34,14 +38,12 @@ public class InfernalBonemeal extends SimpleSlimefunItem b.setBlockData(ageable); b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.REDSTONE_BLOCK); - if (p.getGameMode() != GameMode.CREATIVE) { - ItemUtils.consumeItem(item, false); + if (e.getPlayer().getGameMode() != GameMode.CREATIVE) { + ItemUtils.consumeItem(e.getItem(), false); } } } - return true; } - return false; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeFlask.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeFlask.java index 0a973efea..b5f7aebe1 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeFlask.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeFlask.java @@ -3,37 +3,36 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Container; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class KnowledgeFlask extends SimpleSlimefunItem { +public class KnowledgeFlask extends SimpleSlimefunItem { public KnowledgeFlask(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { super(category, item, recipeType, recipe, recipeOutput); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item) && p.getLevel() >= 1) { - if (e.getClickedBlock() == null || !(e.getClickedBlock().getState() instanceof Container)) { - p.setLevel(p.getLevel() - 1); - e.setCancelled(true); - p.getInventory().addItem(new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge")); + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + if (p.getLevel() >= 1 && (!e.getClickedBlock().isPresent() || !(e.getClickedBlock().get().getState() instanceof Container))) { + p.setLevel(p.getLevel() - 1); + p.getInventory().addItem(new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge")); - p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1F, 0.5F); + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1F, 0.5F); - item.setAmount(item.getAmount() - 1); - } - return true; + ItemStack item = e.getItem(); + item.setAmount(item.getAmount() - 1); + e.cancel(); } - else return false; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java index 3228550d5..e80f8f860 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java @@ -7,54 +7,59 @@ import java.util.UUID; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Sound; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class KnowledgeTome extends SimpleSlimefunItem { +public class KnowledgeTome extends SimpleSlimefunItem { public KnowledgeTome(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - ItemMeta im = item.getItemMeta(); - List lore = im.getLore(); + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + ItemStack item = e.getItem(); + + ItemMeta im = item.getItemMeta(); + List lore = im.getLore(); + + if (lore.get(1).isEmpty()) { + lore.set(0, ChatColor.translateAlternateColorCodes('&', "&7Owner: &b" + p.getName())); + lore.set(1, ChatColor.BLACK + "" + p.getUniqueId()); + im.setLore(lore); + item.setItemMeta(im); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1F, 1F); + } + else { + UUID uuid = UUID.fromString(ChatColor.stripColor(item.getItemMeta().getLore().get(1))); - if (lore.get(1).isEmpty()) { - lore.set(0, ChatColor.translateAlternateColorCodes('&', "&7Owner: &b" + p.getName())); - lore.set(1, ChatColor.BLACK + "" + p.getUniqueId()); - im.setLore(lore); - item.setItemMeta(im); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1F, 1F); - } - else { - UUID uuid = UUID.fromString(ChatColor.stripColor(item.getItemMeta().getLore().get(1))); - - if (p.getUniqueId().equals(uuid)) - return true; - - PlayerProfile.get(p, profile -> PlayerProfile.fromUUID(uuid, owner -> { - Set researches = owner.getResearches(); - researches.forEach(research -> research.unlock(p, true)); - })); - - if (p.getGameMode() != GameMode.CREATIVE) - item.setAmount(item.getAmount() - 1); + if (p.getUniqueId().equals(uuid)) { + SlimefunPlugin.getLocal().sendMessage(p, "messages.no-tome-yourself"); + return; + } + + PlayerProfile.get(p, profile -> PlayerProfile.fromUUID(uuid, owner -> { + Set researches = owner.getResearches(); + researches.forEach(research -> research.unlock(p, true)); + })); + + if (p.getGameMode() != GameMode.CREATIVE) { + ItemUtils.consumeItem(item, false); } - return true; } - else return false; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java index 6e09ca947..49a798259 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java @@ -16,6 +16,7 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; +import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class LumberAxe extends SimpleSlimefunItem implements NotPlaceable { @@ -33,6 +34,8 @@ public class LumberAxe extends SimpleSlimefunItem implements public BlockBreakHandler getItemHandler() { return (e, item, fortune, drops) -> { if (isItem(item)) { + if (!Slimefun.hasUnlocked(e.getPlayer(), this, true)) return true; + if (MaterialCollections.getAllLogs().contains(e.getBlock().getType())) { List logs = Vein.find(e.getBlock(), 100, b -> MaterialCollections.getAllLogs().contains(b.getType())); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicEyeOfEnder.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicEyeOfEnder.java index 3997c7024..ebdac8aa6 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicEyeOfEnder.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicEyeOfEnder.java @@ -2,40 +2,39 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; import org.bukkit.Sound; import org.bukkit.entity.EnderPearl; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class MagicEyeOfEnder extends SimpleSlimefunItem { +public class MagicEyeOfEnder extends SimpleSlimefunItem { public MagicEyeOfEnder(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - e.setCancelled(true); - - if ( - SlimefunManager.isItemSimilar(p.getInventory().getHelmet(), SlimefunItems.ENDER_HELMET, true) && - SlimefunManager.isItemSimilar(p.getInventory().getChestplate(), SlimefunItems.ENDER_CHESTPLATE, true) && - SlimefunManager.isItemSimilar(p.getInventory().getLeggings(), SlimefunItems.ENDER_LEGGINGS, true) && - SlimefunManager.isItemSimilar(p.getInventory().getBoots(), SlimefunItems.ENDER_BOOTS, true) - ) { - p.launchProjectile(EnderPearl.class); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 1, 1); - } - return true; + public ItemUseHandler getItemHandler() { + return e -> { + e.cancel(); + + Player p = e.getPlayer(); + + if ( + SlimefunManager.isItemSimilar(p.getInventory().getHelmet(), SlimefunItems.ENDER_HELMET, true) && + SlimefunManager.isItemSimilar(p.getInventory().getChestplate(), SlimefunItems.ENDER_CHESTPLATE, true) && + SlimefunManager.isItemSimilar(p.getInventory().getLeggings(), SlimefunItems.ENDER_LEGGINGS, true) && + SlimefunManager.isItemSimilar(p.getInventory().getBoots(), SlimefunItems.ENDER_BOOTS, true) + ) { + p.launchProjectile(EnderPearl.class); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 1, 1); } - else return false; }; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java index ee1d850e4..277700b95 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java @@ -3,6 +3,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -11,38 +12,34 @@ import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class MagicSugar extends SimpleSlimefunItem { +public class MagicSugar extends SimpleSlimefunItem { public MagicSugar(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - //Check if it is being placed into an ancient altar. - if (e.getClickedBlock() != null) { - Material block = e.getClickedBlock().getType(); - - if (block == Material.DISPENSER || block == Material.ENCHANTING_TABLE) { - return true; - } - } - - if (p.getGameMode() != GameMode.CREATIVE) { - ItemUtils.consumeItem(item, false); - } + public ItemUseHandler getItemHandler() { + return e -> { + //Check if it is being placed into an ancient altar. + if (e.getClickedBlock().isPresent()) { + Material block = e.getClickedBlock().get().getType(); + + if (block == Material.DISPENSER || block == Material.ENCHANTING_TABLE) { + return; + } + } - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); - p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 600, 3)); - return true; - } - - return false; + Player p = e.getPlayer(); + if (p.getGameMode() != GameMode.CREATIVE) { + ItemUtils.consumeItem(e.getItem(), false); + } + + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); + p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 600, 3)); }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MeatJerky.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MeatJerky.java index c80335713..e059f58d1 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MeatJerky.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MeatJerky.java @@ -24,13 +24,7 @@ public class MeatJerky extends SimpleSlimefunItem { @Override public ItemConsumptionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - p.setSaturation(saturation); - return true; - } - return false; - }; + return (e, p, item) -> p.setSaturation(saturation); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Medicine.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Medicine.java new file mode 100644 index 000000000..9afdd8e0e --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Medicine.java @@ -0,0 +1,33 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffectType; + +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class Medicine extends SimpleSlimefunItem { + + public Medicine(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); + } + + @Override + public ItemConsumptionHandler getItemHandler() { + return (e, p, item) -> { + if (p.hasPotionEffect(PotionEffectType.POISON)) p.removePotionEffect(PotionEffectType.POISON); + if (p.hasPotionEffect(PotionEffectType.WITHER)) p.removePotionEffect(PotionEffectType.WITHER); + if (p.hasPotionEffect(PotionEffectType.SLOW)) p.removePotionEffect(PotionEffectType.SLOW); + if (p.hasPotionEffect(PotionEffectType.SLOW_DIGGING)) p.removePotionEffect(PotionEffectType.SLOW_DIGGING); + if (p.hasPotionEffect(PotionEffectType.WEAKNESS)) p.removePotionEffect(PotionEffectType.WEAKNESS); + if (p.hasPotionEffect(PotionEffectType.CONFUSION)) p.removePotionEffect(PotionEffectType.CONFUSION); + if (p.hasPotionEffect(PotionEffectType.BLINDNESS)) p.removePotionEffect(PotionEffectType.BLINDNESS); + + p.setFireTicks(0); + }; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java index 5337f8f6d..02953ab54 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java @@ -20,19 +20,13 @@ public class MonsterJerky extends SimpleSlimefunItem { @Override public ItemConsumptionHandler getItemHandler() { return (e, p, item) -> { - if (isItem(item)) { - Slimefun.runSync(() -> { - if (p.hasPotionEffect(PotionEffectType.HUNGER)) { - p.removePotionEffect(PotionEffectType.HUNGER); - } - - p.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, 5, 0)); - }, 1L); - return true; - } - else { - return false; - } + Slimefun.runSync(() -> { + if (p.hasPotionEffect(PotionEffectType.HUNGER)) { + p.removePotionEffect(PotionEffectType.HUNGER); + } + + p.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, 5, 0)); + }, 1L); }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Multimeter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Multimeter.java index 7e81db195..ec79c952a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Multimeter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Multimeter.java @@ -1,6 +1,9 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; +import java.util.Optional; + import org.bukkit.block.Block; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; @@ -8,32 +11,33 @@ import io.github.thebusybiscuit.cscorelib2.math.DoubleHandler; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; -public class Multimeter extends SimpleSlimefunItem { +public class Multimeter extends SimpleSlimefunItem { public Multimeter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - Block b = e.getClickedBlock(); - - if (b != null && ChargableBlock.isChargable(b)) { - e.setCancelled(true); - p.sendMessage(""); - p.sendMessage(ChatColors.color("&bStored Energy: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getCharge(b)) + " J")); - p.sendMessage(ChatColors.color("&bCapacity: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getMaxCharge(b)) + " J")); - p.sendMessage(""); - } - return true; - } - else return false; + public ItemUseHandler getItemHandler() { + return e -> { + Optional block = e.getClickedBlock(); + + if (block.isPresent()) { + Block b = block.get(); + if (ChargableBlock.isChargable(b)) { + e.cancel(); + + Player p = e.getPlayer(); + p.sendMessage(""); + p.sendMessage(ChatColors.color("&bStored Energy: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getCharge(b)) + " J")); + p.sendMessage(ChatColors.color("&bCapacity: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getMaxCharge(b)) + " J")); + p.sendMessage(""); + } + } }; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/NetherGoldPan.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/NetherGoldPan.java index 5cf48fe5b..e006d5c90 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/NetherGoldPan.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/NetherGoldPan.java @@ -2,6 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; import java.util.Arrays; import java.util.List; +import java.util.Optional; import org.bukkit.Effect; import org.bukkit.Material; @@ -15,11 +16,11 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class NetherGoldPan extends SimpleSlimefunItem implements RecipeDisplayItem { +public class NetherGoldPan extends SimpleSlimefunItem implements RecipeDisplayItem { private final List recipes; private final RandomizedSet randomizer = new RandomizedSet<>(); @@ -61,12 +62,14 @@ public class NetherGoldPan extends SimpleSlimefunItem im } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - Block b = e.getClickedBlock(); + public ItemUseHandler getItemHandler() { + return e -> { + Optional block = e.getClickedBlock(); + + if (block.isPresent()) { + Block b = block.get(); - if (b != null && b.getType() == Material.SOUL_SAND && SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.BREAK_BLOCK)) { + if (b.getType() == Material.SOUL_SAND && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), ProtectableAction.BREAK_BLOCK)) { ItemStack output = randomizer.getRandom(); b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); @@ -76,10 +79,8 @@ public class NetherGoldPan extends SimpleSlimefunItem im b.getWorld().dropItemNaturally(b.getLocation(), output.clone()); } } - e.setCancelled(true); - return true; } - else return false; + e.cancel(); }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java index 31fd12558..042a3a646 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java @@ -2,6 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; import org.bukkit.Location; import org.bukkit.block.Block; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.materials.MaterialCollections; @@ -10,53 +11,50 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class PickaxeOfTheSeeker extends SimpleSlimefunItem implements DamageableItem { +public class PickaxeOfTheSeeker extends SimpleSlimefunItem implements DamageableItem { public PickaxeOfTheSeeker(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - Block closest = null; + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + Block closest = null; - for (int x = -4; x <= 4; x++) { - for (int y = -4; y <= 4; y++) { - for (int z = -4; z <= 4; z++) { - if (MaterialCollections.getAllOres().contains(p.getLocation().getBlock().getRelative(x, y, z).getType()) && (closest == null || p.getLocation().distanceSquared(closest.getLocation()) > p.getLocation().distanceSquared(p.getLocation().getBlock().getRelative(x, y, z).getLocation()))) { - closest = p.getLocation().getBlock().getRelative(x, y, z); - } + for (int x = -4; x <= 4; x++) { + for (int y = -4; y <= 4; y++) { + for (int z = -4; z <= 4; z++) { + if (MaterialCollections.getAllOres().contains(p.getLocation().getBlock().getRelative(x, y, z).getType()) && (closest == null || p.getLocation().distanceSquared(closest.getLocation()) > p.getLocation().distanceSquared(p.getLocation().getBlock().getRelative(x, y, z).getLocation()))) { + closest = p.getLocation().getBlock().getRelative(x, y, z); } } } - - if (closest == null) { - SlimefunPlugin.getLocal().sendMessage(p, "miner.no-ores", true); - } - else { - double l = closest.getX() + 0.5 - p.getLocation().getX(); - double w = closest.getZ() + 0.5 - p.getLocation().getZ(); - float yaw; - float pitch; - double c = Math.sqrt(l * l + w * w); - double alpha1 = -Math.asin(l / c) / Math.PI * 180; - double alpha2 = Math.acos(w / c) / Math.PI * 180; - if (alpha2 > 90) yaw = (float) (180 - alpha1); - else yaw = (float) alpha1; - pitch = (float) ((-Math.atan((closest.getY() - 0.5 - p.getLocation().getY()) / Math.sqrt(l * l + w * w))) * 180F / Math.PI); - - p.teleport(new Location(p.getWorld(), p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), yaw, pitch)); - } - - damageItem(p, item); - return true; } - else return false; + + if (closest == null) { + SlimefunPlugin.getLocal().sendMessage(p, "miner.no-ores"); + } + else { + double l = closest.getX() + 0.5 - p.getLocation().getX(); + double w = closest.getZ() + 0.5 - p.getLocation().getZ(); + float yaw; + float pitch; + double c = Math.sqrt(l * l + w * w); + double alpha1 = -Math.asin(l / c) / Math.PI * 180; + double alpha2 = Math.acos(w / c) / Math.PI * 180; + if (alpha2 > 90) yaw = (float) (180 - alpha1); + else yaw = (float) alpha1; + pitch = (float) ((-Math.atan((closest.getY() - 0.5 - p.getLocation().getY()) / Math.sqrt(l * l + w * w))) * 180F / Math.PI); + + p.teleport(new Location(p.getWorld(), p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), yaw, pitch)); + } + + damageItem(p, e.getItem()); }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableCrafter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableCrafter.java index 4735ecf79..df926132b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableCrafter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableCrafter.java @@ -1,29 +1,27 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; import org.bukkit.Sound; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class PortableCrafter extends SimpleSlimefunItem { +public class PortableCrafter extends SimpleSlimefunItem { public PortableCrafter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - p.openWorkbench(p.getLocation(), true); - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_WOODEN_BUTTON_CLICK_ON, 1, 1); - return true; - } - else return false; + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + p.openWorkbench(p.getLocation(), true); + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_WOODEN_BUTTON_CLICK_ON, 1, 1); }; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableDustbin.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableDustbin.java index ad46e16df..27612eb99 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableDustbin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableDustbin.java @@ -3,30 +3,29 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Sound; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class PortableDustbin extends SimpleSlimefunItem { +public class PortableDustbin extends SimpleSlimefunItem { public PortableDustbin(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - e.setCancelled(true); - p.openInventory(Bukkit.createInventory(null, 9 * 3, ChatColor.DARK_RED + "Delete Items")); - p.playSound(p.getLocation(), Sound.BLOCK_ANVIL_LAND, 1, 1); - return true; - } - else return false; + public ItemUseHandler getItemHandler() { + return e -> { + e.cancel(); + + Player p = e.getPlayer(); + p.openInventory(Bukkit.createInventory(null, 9 * 3, ChatColor.DARK_RED + "Delete Items")); + p.playSound(p.getLocation(), Sound.BLOCK_ANVIL_LAND, 1, 1); }; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java index 3880c7f45..85b8a17fc 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PortableGEOScanner.java @@ -1,29 +1,27 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.GEO.GEOScanner; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class PortableGEOScanner extends SimpleSlimefunItem { +public class PortableGEOScanner extends SimpleSlimefunItem { public PortableGEOScanner(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - e.setCancelled(true); - GEOScanner.scanChunk(p, p.getLocation().getChunk()); - return true; - } - return false; + public ItemUseHandler getItemHandler() { + return e -> { + e.cancel(); + Player p = e.getPlayer(); + GEOScanner.scanChunk(p, p.getLocation().getChunk()); }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Rag.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Rag.java new file mode 100644 index 000000000..698d2db25 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Rag.java @@ -0,0 +1,41 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class Rag extends SimpleSlimefunItem { + + public Rag(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); + } + + @Override + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + + if (p.getGameMode() != GameMode.CREATIVE) { + ItemUtils.consumeItem(e.getItem(), false); + } + + p.getWorld().playEffect(p.getLocation(), Effect.STEP_SOUND, Material.WHITE_WOOL); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 0)); + p.setFireTicks(0); + + e.cancel(); + }; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java index 0a12b0638..27e426a57 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java @@ -11,6 +11,7 @@ import org.bukkit.block.BlockFace; import org.bukkit.entity.Entity; import org.bukkit.entity.FallingBlock; import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.inventory.ItemStack; @@ -22,64 +23,62 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class SeismicAxe extends SimpleSlimefunItem implements NotPlaceable, DamageableItem { +public class SeismicAxe extends SimpleSlimefunItem implements NotPlaceable, DamageableItem { public SeismicAxe(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - List blocks = p.getLineOfSight(null, 10); - for (int i = 0; i < blocks.size(); i++) { - Block b = blocks.get(i); - Location ground = b.getLocation(); - - if (b.getType() == null || b.getType() == Material.AIR) { - for (int y = ground.getBlockY(); y > 0; y--) { - if (b.getWorld().getBlockAt(b.getX(), y, b.getZ()) != null && b.getWorld().getBlockAt(b.getX(), y, b.getZ()).getType() != null && b.getWorld().getBlockAt(b.getX(), y, b.getZ()).getType() != Material.AIR) { - ground = new Location(b.getWorld(), b.getX(), y, b.getZ()); - break; - } + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + List blocks = p.getLineOfSight(null, 10); + + for (int i = 0; i < blocks.size(); i++) { + Block b = blocks.get(i); + Location ground = b.getLocation(); + + if (b.getType() == null || b.getType() == Material.AIR) { + for (int y = ground.getBlockY(); y > 0; y--) { + if (b.getWorld().getBlockAt(b.getX(), y, b.getZ()) != null && b.getWorld().getBlockAt(b.getX(), y, b.getZ()).getType() != null && b.getWorld().getBlockAt(b.getX(), y, b.getZ()).getType() != Material.AIR) { + ground = new Location(b.getWorld(), b.getX(), y, b.getZ()); + break; } } - - b.getWorld().playEffect(ground, Effect.STEP_SOUND, ground.getBlock().getType()); - - if (ground.getBlock().getRelative(BlockFace.UP).getType() == null || ground.getBlock().getRelative(BlockFace.UP).getType() == Material.AIR) { - Location loc = ground.getBlock().getRelative(BlockFace.UP).getLocation().add(0.5, 0.0, 0.5); - FallingBlock block = ground.getWorld().spawnFallingBlock(loc, ground.getBlock().getBlockData()); - block.setDropItem(false); - block.setVelocity(new Vector(0, 0.4 + i * 0.01, 0)); - SlimefunPlugin.getUtilities().blocks.add(block.getUniqueId()); - } - for (Entity n: ground.getChunk().getEntities()) { - if (n instanceof LivingEntity && n.getLocation().distance(ground) <= 2.0D && !n.getUniqueId().equals(p.getUniqueId())) { - Vector vector = n.getLocation().toVector().subtract(p.getLocation().toVector()).normalize().multiply(1.4); - vector.setY(0.9); - n.setVelocity(vector); - - if (p.getWorld().getPVP()) { - EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(p, n, DamageCause.ENTITY_ATTACK, 6D); - Bukkit.getPluginManager().callEvent(event); - if (!event.isCancelled()) ((LivingEntity) n).damage(6D); - } - } - } - } - - for (int i = 0; i < 4; i++) { - damageItem(p, item); } - return true; + b.getWorld().playEffect(ground, Effect.STEP_SOUND, ground.getBlock().getType()); + + if (ground.getBlock().getRelative(BlockFace.UP).getType() == null || ground.getBlock().getRelative(BlockFace.UP).getType() == Material.AIR) { + Location loc = ground.getBlock().getRelative(BlockFace.UP).getLocation().add(0.5, 0.0, 0.5); + FallingBlock block = ground.getWorld().spawnFallingBlock(loc, ground.getBlock().getBlockData()); + block.setDropItem(false); + block.setVelocity(new Vector(0, 0.4 + i * 0.01, 0)); + SlimefunPlugin.getUtilities().blocks.add(block.getUniqueId()); + } + + for (Entity n : ground.getChunk().getEntities()) { + if (n instanceof LivingEntity && n.getLocation().distance(ground) <= 2.0D && !n.getUniqueId().equals(p.getUniqueId())) { + Vector vector = n.getLocation().toVector().subtract(p.getLocation().toVector()).normalize().multiply(1.4); + vector.setY(0.9); + n.setVelocity(vector); + + if (p.getWorld().getPVP()) { + EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(p, n, DamageCause.ENTITY_ATTACK, 6D); + Bukkit.getPluginManager().callEvent(event); + if (!event.isCancelled()) ((LivingEntity) n).damage(6D); + } + } + } + } + + for (int i = 0; i < 4; i++) { + damageItem(p, e.getItem()); } - else return false; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java index ae9717fca..0c70e69ba 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java @@ -15,6 +15,7 @@ import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; public class SmeltersPickaxe extends SimpleSlimefunItem { @@ -34,6 +35,7 @@ public class SmeltersPickaxe extends SimpleSlimefunItem { if (isItem(item)) { if (BlockStorage.hasBlockInfo(e.getBlock())) return true; if (e.getBlock().getType() == Material.PLAYER_HEAD) return true; + if (!Slimefun.hasUnlocked(e.getPlayer(), this, true)) return true; Collection blockDrops = e.getBlock().getDrops(getItem()); for (ItemStack drop : blockDrops) { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Splint.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Splint.java new file mode 100644 index 000000000..78a26eb5f --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Splint.java @@ -0,0 +1,39 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import org.bukkit.GameMode; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class Splint extends SimpleSlimefunItem { + + public Splint(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { + super(category, item, recipeType, recipe, recipeOutput); + } + + @Override + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + + if (p.getGameMode() != GameMode.CREATIVE) { + ItemUtils.consumeItem(e.getItem(), false); + } + + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_SKELETON_HURT, 1, 1); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 0)); + + e.cancel(); + }; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java index 726cfde18..905c10038 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java @@ -9,6 +9,7 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.Sound; +import org.bukkit.entity.Player; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -20,10 +21,10 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class StormStaff extends SimpleSlimefunItem { +public class StormStaff extends SimpleSlimefunItem { public static final int MAX_USES = 8; @@ -46,65 +47,66 @@ public class StormStaff extends SimpleSlimefunItem { } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - if (!item.hasItemMeta()) return false; - ItemMeta itemMeta = item.getItemMeta(); - if (!itemMeta.hasLore()) return false; - List itemLore = itemMeta.getLore(); + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + ItemStack item = e.getItem(); + + if (!item.hasItemMeta()) return; + ItemMeta itemMeta = item.getItemMeta(); + if (!itemMeta.hasLore()) return; + List itemLore = itemMeta.getLore(); - ItemStack sfItem = getItem(); - ItemMeta sfItemMeta = sfItem.getItemMeta(); - List sfItemLore = sfItemMeta.getLore(); + ItemStack sfItem = getItem(); + ItemMeta sfItemMeta = sfItem.getItemMeta(); + List sfItemLore = sfItemMeta.getLore(); - // Index 1 and 3 in SlimefunItems.STAFF_STORM has lores with words and stuff so we check for them. - if (itemLore.size() < 6 && itemLore.get(1).equals(sfItemLore.get(1)) && itemLore.get(3).equals(sfItemLore.get(3))) { - if (p.getFoodLevel() >= 4 || p.getGameMode() == GameMode.CREATIVE) { - // Get a target block with max. 30 blocks of distance - Location loc = p.getTargetBlock(null, 30).getLocation(); + // Index 1 and 3 in SlimefunItems.STAFF_STORM has lores with words and stuff so we check for them. + if (itemLore.size() < 6 && itemLore.get(1).equals(sfItemLore.get(1)) && itemLore.get(3).equals(sfItemLore.get(3))) { + if (p.getFoodLevel() >= 4 || p.getGameMode() == GameMode.CREATIVE) { + // Get a target block with max. 30 blocks of distance + Location loc = p.getTargetBlock(null, 30).getLocation(); - if (loc.getWorld() != null && loc.getChunk().isLoaded()) { - if (loc.getWorld().getPVP() && SlimefunPlugin.getProtectionManager().hasPermission(p, loc, ProtectableAction.PVP)) { - loc.getWorld().strikeLightning(loc); + if (loc.getWorld() != null && loc.getChunk().isLoaded()) { + if (loc.getWorld().getPVP() && SlimefunPlugin.getProtectionManager().hasPermission(p, loc, ProtectableAction.PVP)) { + loc.getWorld().strikeLightning(loc); - if (p.getInventory().getItemInMainHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) { - FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 4); - Bukkit.getPluginManager().callEvent(event); - p.setFoodLevel(event.getFoodLevel()); - } - - int currentUses = itemMeta.getPersistentDataContainer() - .getOrDefault(usageKey, PersistentDataType.INTEGER, MAX_USES); - - e.setCancelled(true); - if (currentUses == 1) { - p.playSound(p.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); - item.setAmount(0); - } - else { - itemMeta.getPersistentDataContainer().set( - usageKey, PersistentDataType.INTEGER, --currentUses - ); - itemLore.set(4, ChatColor.translateAlternateColorCodes('&', - "&e" + currentUses + ' ' + (currentUses > 1 ? "Uses": "Use") + " &7left")); - itemMeta.setLore(itemLore); - item.setItemMeta(itemMeta); - } - return true; + if (p.getInventory().getItemInMainHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) { + FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 4); + Bukkit.getPluginManager().callEvent(event); + p.setFoodLevel(event.getFoodLevel()); } + + int currentUses = itemMeta.getPersistentDataContainer() + .getOrDefault(usageKey, PersistentDataType.INTEGER, MAX_USES); + + e.cancel(); + if (currentUses == 1) { + p.playSound(p.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); + item.setAmount(0); + } else { - SlimefunPlugin.getLocal().sendMessage(p, "messages.no-pvp", true); + itemMeta.getPersistentDataContainer().set( + usageKey, PersistentDataType.INTEGER, --currentUses + ); + itemLore.set(4, ChatColor.translateAlternateColorCodes('&', + "&e" + currentUses + ' ' + (currentUses > 1 ? "Uses": "Use") + " &7left")); + itemMeta.setLore(itemLore); + item.setItemMeta(itemMeta); } + return; + } + else { + SlimefunPlugin.getLocal().sendMessage(p, "messages.no-pvp", true); } } - else { - SlimefunPlugin.getLocal().sendMessage(p, "messages.hungry", true); - } - return true; } + else { + SlimefunPlugin.getLocal().sendMessage(p, "messages.hungry", true); + } + + return; } - return false; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/TelepositionScroll.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/TelepositionScroll.java index 4e328375e..ef28f8b7a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/TelepositionScroll.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/TelepositionScroll.java @@ -9,30 +9,26 @@ import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class TelepositionScroll extends SimpleSlimefunItem { +public class TelepositionScroll extends SimpleSlimefunItem { public TelepositionScroll(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - for (Entity n : p.getNearbyEntities(10.0, 10.0, 10.0)) { - if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !n.getUniqueId().equals(p.getUniqueId())) { - float yaw = n.getLocation().getYaw() + 180.0F; - if (yaw > 360.0F) yaw = yaw - 360.0F; - - n.teleport(new Location(n.getWorld(), n.getLocation().getX(), n.getLocation().getY(), n.getLocation().getZ(), yaw, n.getLocation().getPitch())); - } + public ItemUseHandler getItemHandler() { + return e -> { + for (Entity n : e.getPlayer().getNearbyEntities(10.0, 10.0, 10.0)) { + if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !n.getUniqueId().equals(e.getPlayer().getUniqueId())) { + float yaw = n.getLocation().getYaw() + 180.0F; + if (yaw > 360.0F) yaw = yaw - 360.0F; + + n.teleport(new Location(n.getWorld(), n.getLocation().getX(), n.getLocation().getY(), n.getLocation().getZ(), yaw, n.getLocation().getPitch())); } - return true; } - else return false; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Vitamins.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Vitamins.java new file mode 100644 index 000000000..384601f97 --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/Vitamins.java @@ -0,0 +1,49 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import org.bukkit.GameMode; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class Vitamins extends SimpleSlimefunItem { + + public Vitamins(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); + } + + @Override + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + + if (p.getGameMode() != GameMode.CREATIVE) { + ItemUtils.consumeItem(e.getItem(), false); + } + + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); + + if (p.hasPotionEffect(PotionEffectType.POISON)) p.removePotionEffect(PotionEffectType.POISON); + if (p.hasPotionEffect(PotionEffectType.WITHER)) p.removePotionEffect(PotionEffectType.WITHER); + if (p.hasPotionEffect(PotionEffectType.SLOW)) p.removePotionEffect(PotionEffectType.SLOW); + if (p.hasPotionEffect(PotionEffectType.SLOW_DIGGING)) p.removePotionEffect(PotionEffectType.SLOW_DIGGING); + if (p.hasPotionEffect(PotionEffectType.WEAKNESS)) p.removePotionEffect(PotionEffectType.WEAKNESS); + if (p.hasPotionEffect(PotionEffectType.CONFUSION)) p.removePotionEffect(PotionEffectType.CONFUSION); + if (p.hasPotionEffect(PotionEffectType.BLINDNESS)) p.removePotionEffect(PotionEffectType.BLINDNESS); + + p.setFireTicks(0); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 2)); + + e.cancel(); + }; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/WaterStaff.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/WaterStaff.java new file mode 100644 index 000000000..63fccbf2d --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/WaterStaff.java @@ -0,0 +1,29 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items; + +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class WaterStaff extends SimpleSlimefunItem { + + public WaterStaff(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); + } + + @Override + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + + p.setFireTicks(0); + SlimefunPlugin.getLocal().sendMessage(p, "messages.fire-extinguish", true); + }; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/WindStaff.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/WindStaff.java index d3a1e1406..1666bce36 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/WindStaff.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/WindStaff.java @@ -5,6 +5,7 @@ import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; +import org.bukkit.entity.Player; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.inventory.ItemStack; @@ -12,36 +13,35 @@ import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class WindStaff extends SimpleSlimefunItem { +public class WindStaff extends SimpleSlimefunItem { public WindStaff(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - if (isItem(item)) { - if (p.getFoodLevel() >= 2) { - if (p.getInventory().getItemInMainHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) { - FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 2); - Bukkit.getPluginManager().callEvent(event); - p.setFoodLevel(event.getFoodLevel()); - } - p.setVelocity(p.getEyeLocation().getDirection().multiply(4)); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); - p.getWorld().playEffect(p.getLocation(), Effect.SMOKE, 1); - p.setFallDistance(0F); + public ItemUseHandler getItemHandler() { + return e -> { + Player p = e.getPlayer(); + + if (p.getFoodLevel() >= 2) { + if (p.getInventory().getItemInMainHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) { + FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 2); + Bukkit.getPluginManager().callEvent(event); + p.setFoodLevel(event.getFoodLevel()); } - else { - SlimefunPlugin.getLocal().sendMessage(p, "messages.hungry", true); - } - return true; + + p.setVelocity(p.getEyeLocation().getDirection().multiply(4)); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + p.getWorld().playEffect(p.getLocation(), Effect.SMOKE, 1); + p.setFallDistance(0F); + } + else { + SlimefunPlugin.getLocal().sendMessage(p, "messages.hungry", true); } - else return false; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java index 5fe5bf974..60eaa717a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java @@ -2,6 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import org.bukkit.Effect; import org.bukkit.Material; @@ -13,15 +14,12 @@ import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.materials.MaterialCollections; import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; -import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; 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.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +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; @@ -58,50 +56,41 @@ public class Composter extends SlimefunGadget { @Override public void preRegister() { - addItemHandler(new ItemInteractionHandler() { + addItemHandler((BlockUseHandler) e -> { + Optional block = e.getClickedBlock(); + + if (block.isPresent()) { + 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)) { + 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); - @Override - public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) { - if (e.getClickedBlock() != null) { - String id = BlockStorage.checkID(e.getClickedBlock()); - if (id != null && id.equals(getID())) { - if (p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, e.getClickedBlock().getLocation(), ProtectableAction.ACCESS_INVENTORIES)) { - ItemStack input = p.getInventory().getItemInMainHand(); - Block b = e.getClickedBlock(); - SlimefunItem machine = SlimefunItem.getByID(id); - - for (ItemStack convert : RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimilar(input, convert, true)) { - ItemStack removing = input.clone(); - removing.setAmount(convert.getAmount()); - p.getInventory().removeItem(removing); - ItemStack adding = RecipeType.getRecipeOutput(machine, convert); - - for (int i = 1; i < 12; i++) { - int j = i; - - Slimefun.runSync(() -> { - if (j < 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); + for (int i = 1; i < 12; i++) { + int j = i; + + Slimefun.runSync(() -> { + if (j < 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); } - - return true; - } + }, i * 30L); } - - SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true); - return true; } - return true; } + + SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true); } - return false; } }); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java index f5fb4dcb8..44f265e2a 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java @@ -2,6 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import org.bukkit.Material; import org.bukkit.Sound; @@ -10,6 +11,7 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.data.Levelled; import org.bukkit.block.data.Waterlogged; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import io.github.thebusybiscuit.cscorelib2.materials.MaterialCollections; @@ -18,8 +20,7 @@ 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.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +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; @@ -61,87 +62,83 @@ public class Crucible extends SlimefunGadget { @Override public void preRegister() { - addItemHandler((ItemInteractionHandler) (e, p, item) -> { - if (e.getClickedBlock() != null) { - String id = BlockStorage.checkID(e.getClickedBlock()); + addItemHandler((BlockUseHandler) e -> { + Optional optional = e.getClickedBlock(); + + if (optional.isPresent()) { + Player p = e.getPlayer(); + Block b = optional.get(); - if (id != null && id.equals("CRUCIBLE")) { - if (p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, e.getClickedBlock().getLocation(), ProtectableAction.ACCESS_INVENTORIES)) { - ItemStack input = p.getInventory().getItemInMainHand(); - Block block = e.getClickedBlock().getRelative(BlockFace.UP); - SlimefunItem machine = SlimefunItem.getByID(id); + if (p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), ProtectableAction.ACCESS_INVENTORIES)) { + ItemStack input = e.getItem(); + Block block = b.getRelative(BlockFace.UP); - for (ItemStack convert : RecipeType.getRecipeInputs(machine)) { - if (SlimefunManager.isItemSimilar(input, convert, true)) { - e.setCancelled(true); + for (ItemStack convert : RecipeType.getRecipeInputs(Crucible.this)) { + if (SlimefunManager.isItemSimilar(input, convert, true)) { + e.cancel(); - ItemStack removing = input.clone(); - removing.setAmount(convert.getAmount()); - p.getInventory().removeItem(removing); + ItemStack removing = input.clone(); + removing.setAmount(convert.getAmount()); + p.getInventory().removeItem(removing); - boolean water = Tag.LEAVES.isTagged(input.getType()); + boolean water = Tag.LEAVES.isTagged(input.getType()); + + if (block.getType() == (water ? Material.WATER : Material.LAVA)) { + int level = ((Levelled) block.getBlockData()).getLevel(); - if (block.getType() == (water ? Material.WATER : Material.LAVA)) { - int level = ((Levelled) block.getBlockData()).getLevel(); - - if (level > 7) { - level -= 8; - } - - if (level == 0) { - block.getWorld().playSound(block.getLocation(), water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else { - int finalLevel = 7 - level; - Slimefun.runSync(() -> runPostTask(block, water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, finalLevel), 50L); - } - - return true; - } - else if (block.getType() == (water ? Material.LAVA : Material.WATER)) { - int level = ((Levelled) block.getBlockData()).getLevel(); - block.setType(level == 0 || level == 8 ? Material.OBSIDIAN : Material.STONE); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 1F, 1F); - return true; + if (level > 7) { + level -= 8; } + + if (level == 0) { + block.getWorld().playSound(block.getLocation(), water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else { + int finalLevel = 7 - level; + Slimefun.runSync(() -> runPostTask(block, water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, finalLevel), 50L); + } + + return; + } + else if (block.getType() == (water ? Material.LAVA : Material.WATER)) { + int level = ((Levelled) block.getBlockData()).getLevel(); + block.setType(level == 0 || level == 8 ? Material.OBSIDIAN : Material.STONE); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 1F, 1F); + return; + } - Slimefun.runSync(() -> { - if (block.getType() == Material.AIR || block.getType() == Material.CAVE_AIR || block.getType() == Material.VOID_AIR) { - if (water) { - if (block.getBlockData() instanceof Waterlogged) { - Waterlogged wl = (Waterlogged) block.getBlockData(); - wl.setWaterlogged(true); - block.setBlockData(wl, false); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - return; - } - - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_METAL_BREAK, 1F, 1F); + Slimefun.runSync(() -> { + if (block.getType() == Material.AIR || block.getType() == Material.CAVE_AIR || block.getType() == Material.VOID_AIR) { + if (water) { + if (block.getBlockData() instanceof Waterlogged) { + Waterlogged wl = (Waterlogged) block.getBlockData(); + wl.setWaterlogged(true); + block.setBlockData(wl, false); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); return; } - if (BlockStorage.hasBlockInfo(block)) { - BlockStorage.clearBlockInfo(block); - } - - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 1F, 1F); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_METAL_BREAK, 1F, 1F); + return; } - block.setType(water ? Material.WATER : Material.LAVA); - runPostTask(block, water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, 1); - }, 50L); - - return true; - } + if (BlockStorage.hasBlockInfo(block)) { + BlockStorage.clearBlockInfo(block); + } + + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_EXTINGUISH, 1F, 1F); + } + + block.setType(water ? Material.WATER : Material.LAVA); + runPostTask(block, water ? Sound.ENTITY_PLAYER_SPLASH : Sound.BLOCK_LAVA_POP, 1); + + }, 50L); } - - SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true); - return true; } - return true; + + SlimefunPlugin.getLocal().sendMessage(p, "machines.wrong-item", true); } } - return false; }); } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java index 0ef1fa29a..d4b9cf648 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java @@ -20,11 +20,11 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class HologramProjector extends SimpleSlimefunItem { +public class HologramProjector extends SimpleSlimefunItem { public HologramProjector(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) { super(category, item, recipeType, recipe, recipeOutput); @@ -54,22 +54,16 @@ public class HologramProjector extends SimpleSlimefunItem { - if (e.getClickedBlock() == null) return false; + public BlockUseHandler getItemHandler() { + return e -> { + e.cancel(); - String id = BlockStorage.checkID(e.getClickedBlock()); - if (id != null && id.equals(getID())) { - e.setCancelled(true); - - if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "owner").equals(p.getUniqueId().toString())) { - openEditor(p, e.getClickedBlock()); - } - - return true; + Player p = e.getPlayer(); + Block b = e.getClickedBlock().get(); + + if (BlockStorage.getLocationInfo(b.getLocation(), "owner").equals(p.getUniqueId().toString())) { + openEditor(p, b); } - - return false; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java index 70c039030..381f73c26 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java @@ -7,11 +7,10 @@ import me.mrCookieSlime.Slimefun.GEO.GEOScanner; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; -import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class GEOScannerBlock extends SimpleSlimefunItem { +public class GEOScannerBlock extends SimpleSlimefunItem { public GEOScannerBlock(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(category, item, recipeType, recipe); @@ -23,17 +22,12 @@ public class GEOScannerBlock extends SimpleSlimefunItem } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, stack) -> { - Block b = e.getClickedBlock(); + public BlockUseHandler getItemHandler() { + return e -> { + Block b = e.getClickedBlock().get(); - if (b == null) return false; - String item = BlockStorage.checkID(b); - if (item == null || !item.equals(getID())) return false; - e.setCancelled(true); - - GEOScanner.scanChunk(p, b.getChunk()); - return true; + e.cancel(); + GEOScanner.scanChunk(e.getPlayer(), b.getChunk()); }; } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/ElevatorPlate.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/ElevatorPlate.java index bf62d70b8..6cdd398fe 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/ElevatorPlate.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/ElevatorPlate.java @@ -28,11 +28,11 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -public class ElevatorPlate extends SimpleSlimefunItem { +public class ElevatorPlate extends SimpleSlimefunItem { private final Set users = new HashSet<>(); @@ -64,19 +64,13 @@ public class ElevatorPlate extends SimpleSlimefunItem { } @Override - public ItemInteractionHandler getItemHandler() { - return (e, p, item) -> { - Block b = e.getClickedBlock(); - if (b == null) return false; - - String id = BlockStorage.checkID(b); - if (id == null || !id.equals(getID())) return false; + public BlockUseHandler getItemHandler() { + return e -> { + Block b = e.getClickedBlock().get(); - if (BlockStorage.getLocationInfo(b.getLocation(), "owner").equals(p.getUniqueId().toString())) { - openEditor(p, b); + if (BlockStorage.getLocationInfo(b.getLocation(), "owner").equals(e.getPlayer().getUniqueId().toString())) { + openEditor(e.getPlayer(), b); } - - return true; }; } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSControlPanel.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSControlPanel.java new file mode 100644 index 000000000..2f3a7afdf --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSControlPanel.java @@ -0,0 +1,22 @@ +package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps; + +import org.bukkit.inventory.ItemStack; + +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Objects.Category; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.BlockUseHandler; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class GPSControlPanel extends SimpleSlimefunItem { + + public GPSControlPanel(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); + } + + @Override + public BlockUseHandler getItemHandler() { + return e -> SlimefunPlugin.getGPSNetwork().openTransmitterControlPanel(e.getPlayer()); + } +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java index 4230a2fa8..ff434d6a6 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/gps/GPSTransmitter.java @@ -7,6 +7,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.GPS.NetworkStatus; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; @@ -17,12 +18,13 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; public abstract class GPSTransmitter extends SimpleSlimefunItem { - public GPSTransmitter(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { - super(category, item, id, recipeType, recipe); + public GPSTransmitter(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(category, item, recipeType, recipe); SlimefunItem.registerBlockHandler(getID(), new SlimefunBlockHandler() { @@ -49,12 +51,13 @@ public abstract class GPSTransmitter extends SimpleSlimefunItem { @Override public void tick(Block b, SlimefunItem item, Config data) { int charge = ChargableBlock.getCharge(b); + if (charge >= getEnergyConsumption()) { - Slimefun.getGPSNetwork().updateTransmitter(b.getLocation(), UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), NetworkStatus.ONLINE); + SlimefunPlugin.getGPSNetwork().updateTransmitter(b.getLocation(), UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), NetworkStatus.ONLINE); ChargableBlock.setCharge(b.getLocation(), charge - getEnergyConsumption()); } else { - Slimefun.getGPSNetwork().updateTransmitter(b.getLocation(), UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), NetworkStatus.OFFLINE); + SlimefunPlugin.getGPSNetwork().updateTransmitter(b.getLocation(), UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), NetworkStatus.OFFLINE); } } diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/BlockUseHandler.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/BlockUseHandler.java new file mode 100644 index 000000000..494c7f70a --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/BlockUseHandler.java @@ -0,0 +1,15 @@ +package me.mrCookieSlime.Slimefun.Objects.handlers; + +import io.github.thebusybiscuit.slimefun4.api.events.ItemUseEvent; + +@FunctionalInterface +public interface BlockUseHandler extends ItemHandler { + + void onRightClick(ItemUseEvent e); + + @Override + default Class getIdentifier() { + return BlockUseHandler.class; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemConsumptionHandler.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemConsumptionHandler.java index 0299c65f3..11e1741f8 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemConsumptionHandler.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemConsumptionHandler.java @@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack; @FunctionalInterface public interface ItemConsumptionHandler extends ItemHandler { - boolean onConsume(PlayerItemConsumeEvent e, Player p, ItemStack item); + void onConsume(PlayerItemConsumeEvent e, Player p, ItemStack item); @Override default Class getIdentifier() { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemInteractionHandler.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemInteractionHandler.java index 4aab11165..2a830053e 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemInteractionHandler.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemInteractionHandler.java @@ -1,10 +1,16 @@ package me.mrCookieSlime.Slimefun.Objects.handlers; -import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; - import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; + +/** + * + * @deprecated Please use {@link ItemUseHandler} and {@link BlockUseHandler} now. + * + */ +@Deprecated @FunctionalInterface public interface ItemInteractionHandler extends ItemHandler { diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemUseHandler.java b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemUseHandler.java new file mode 100644 index 000000000..35b32f05d --- /dev/null +++ b/src/main/java/me/mrCookieSlime/Slimefun/Objects/handlers/ItemUseHandler.java @@ -0,0 +1,15 @@ +package me.mrCookieSlime.Slimefun.Objects.handlers; + +import io.github.thebusybiscuit.slimefun4.api.events.ItemUseEvent; + +@FunctionalInterface +public interface ItemUseHandler extends ItemHandler { + + void onRightClick(ItemUseEvent e); + + @Override + default Class getIdentifier() { + return ItemUseHandler.class; + } + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java index 64f98f717..1a93d35ed 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java @@ -218,10 +218,19 @@ public final class MiscSetup { handler.run(pre, init, post); } - sender.sendMessage(ChatColor.GREEN + "###################### - Slimefun - ######################"); + sender.sendMessage(""); + sender.sendMessage(ChatColor.GREEN + "######################### - Slimefun v" + SlimefunPlugin.getVersion() + " - #########################"); + sender.sendMessage(""); sender.sendMessage(ChatColor.GREEN + "Successfully loaded " + SlimefunItem.list().size() + " Items (" + Research.list().size() + " Researches)"); - sender.sendMessage(ChatColor.GREEN + "( " + SlimefunPlugin.getUtilities().vanillaItems + " Items from Slimefun, " + (SlimefunItem.list().size() - SlimefunPlugin.getUtilities().vanillaItems) + " Items from Addons )"); - sender.sendMessage(ChatColor.GREEN + "##########################################################"); + sender.sendMessage(ChatColor.GREEN + "( " + SlimefunPlugin.getUtilities().vanillaItems + " Items from Slimefun, " + (SlimefunItem.list().size() - SlimefunPlugin.getUtilities().vanillaItems) + " Items from " + Slimefun.getInstalledAddons().size() + " Addons )"); + sender.sendMessage(""); + sender.sendMessage(ChatColor.GREEN + "Slimefun is an Open-Source project that is maintained by community developers!"); + sender.sendMessage(""); + sender.sendMessage(ChatColor.GREEN + " -- Source Code: https://github.com/TheBusyBiscuit/Slimefun4"); + sender.sendMessage(ChatColor.GREEN + " -- Wiki: https://github.com/TheBusyBiscuit/Slimefun4/wiki"); + sender.sendMessage(ChatColor.GREEN + " -- Bug Reports: https://github.com/TheBusyBiscuit/Slimefun4/issues"); + sender.sendMessage(ChatColor.GREEN + " -- Discord: https://discord.gg/fsD4Bkh"); + sender.sendMessage(""); SlimefunPlugin.getItemCfg().save(); SlimefunPlugin.getResearchCfg().save(); diff --git a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 036a1f65c..4a1fb3110 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1,6 +1,7 @@ package me.mrCookieSlime.Slimefun.Setup; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors; @@ -20,22 +21,20 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; -import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; import io.github.thebusybiscuit.cscorelib2.inventory.InvUtils; import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.cscorelib2.materials.MaterialCollections; import io.github.thebusybiscuit.cscorelib2.skull.SkullItem; +import io.github.thebusybiscuit.slimefun4.api.events.ItemUseEvent; import io.github.thebusybiscuit.slimefun4.utils.FireworkUtils; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; -import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Lists.Categories; import me.mrCookieSlime.Slimefun.Lists.RecipeType; @@ -62,9 +61,11 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.AdvancedCargoOutputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoConnector; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoInputNode; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoManagerBlock; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo.CargoOutputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Bandage; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.DietCookie; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.EnderBackpack; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.ExplosivePickaxe; @@ -81,6 +82,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.LumberAxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MagicEyeOfEnder; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MagicSugar; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MeatJerky; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Medicine; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.MonsterJerky; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Multimeter; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.NetherGoldPan; @@ -90,13 +92,17 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PickaxeOfVeinMining; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PortableCrafter; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PortableDustbin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.PortableGEOScanner; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Rag; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SeismicAxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SmeltersPickaxe; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SolarHelmet; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SoulboundRune; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Splint; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.StormStaff; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.SwordOfBeheading; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.TelepositionScroll; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.Vitamins; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.WaterStaff; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items.WindStaff; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AncientPedestal; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.BlockPlacer; @@ -145,6 +151,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.GEOM import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.GEOScannerBlock; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.geo.OilPump; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.ElevatorPlate; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.GPSControlPanel; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.GPSTransmitter; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.gps.Teleporter; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric.reactors.NetherStarReactor; @@ -163,8 +170,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.Smeltery; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.TableSaw; import me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.BowShootHandler; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler; -import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler; import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker; import me.mrCookieSlime.Slimefun.androids.AndroidType; @@ -172,7 +178,6 @@ import me.mrCookieSlime.Slimefun.androids.ProgrammableAndroid; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; -import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; public final class SlimefunSetup { @@ -610,20 +615,9 @@ public final class SlimefunSetup { new ItemStack[] {null, new ItemStack(Material.FEATHER), SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.STAFF_ELEMENTAL, new ItemStack(Material.FEATHER), SlimefunItems.STAFF_ELEMENTAL, null, null}) .register(true); - new SlimefunItem(Categories.MAGIC, (SlimefunItemStack) SlimefunItems.STAFF_WATER, RecipeType.MAGIC_WORKBENCH, + new WaterStaff(Categories.MAGIC, (SlimefunItemStack) SlimefunItems.STAFF_WATER, RecipeType.MAGIC_WORKBENCH, new ItemStack[] {null, new ItemStack(Material.LILY_PAD), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.STAFF_ELEMENTAL, new ItemStack(Material.LILY_PAD), SlimefunItems.STAFF_ELEMENTAL, null, null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimilar(item, SlimefunItems.STAFF_WATER, true)) { - p.setFireTicks(0); - SlimefunPlugin.getLocal().sendMessage(p, "messages.fire-extinguish", true); - return true; - } - else return false; - } - }); + .register(true); String[] multiToolItems = new String[] {"PORTABLE_CRAFTER", "MAGIC_EYE_OF_ENDER", "STAFF_ELEMENTAL_WIND", "GRAPPLING_HOOK"}; @@ -896,109 +890,32 @@ public final class SlimefunSetup { new ItemStack[] {new ItemStack(Material.WHITE_WOOL), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CLOTH, 8)) .register(true); - new SlimefunItem(Categories.PORTABLE, (SlimefunItemStack) SlimefunItems.RAG, RecipeType.ENHANCED_CRAFTING_TABLE, + new Rag(Categories.PORTABLE, (SlimefunItemStack) SlimefunItems.RAG, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, new ItemStack(Material.STRING), null, new ItemStack(Material.STRING), SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) - .register(true, new ItemInteractionHandler() { + .register(true); - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimilar(item, SlimefunItems.RAG, true)) { - if (p.getGameMode() != GameMode.CREATIVE) ItemUtils.consumeItem(item, false); - p.getWorld().playEffect(p.getLocation(), Effect.STEP_SOUND, Material.WHITE_WOOL); - p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 0)); - p.setFireTicks(0); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.PORTABLE, (SlimefunItemStack) SlimefunItems.BANDAGE, RecipeType.ENHANCED_CRAFTING_TABLE, + new Bandage(Categories.PORTABLE, (SlimefunItemStack) SlimefunItems.BANDAGE, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.RAG, new ItemStack(Material.STRING), SlimefunItems.RAG, null, null, null, null, null, null}, new CustomItem(SlimefunItems.BANDAGE, 4)) - .register(true, new ItemInteractionHandler() { + .register(true); - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimilar(item, SlimefunItems.BANDAGE, true)) { - if (p.getGameMode() != GameMode.CREATIVE) ItemUtils.consumeItem(item, false); - p.getWorld().playEffect(p.getLocation(), Effect.STEP_SOUND, Material.WHITE_WOOL); - p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 1)); - p.setFireTicks(0); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.PORTABLE, (SlimefunItemStack) SlimefunItems.SPLINT, RecipeType.ENHANCED_CRAFTING_TABLE, + new Splint(Categories.PORTABLE, (SlimefunItemStack) SlimefunItems.SPLINT, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.STICK), new ItemStack(Material.STICK), new ItemStack(Material.STICK), null, new ItemStack(Material.IRON_INGOT), null}, new CustomItem(SlimefunItems.SPLINT, 4)) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimilar(item, SlimefunItems.SPLINT, true)) { - if (p.getGameMode() != GameMode.CREATIVE) ItemUtils.consumeItem(item, false); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_SKELETON_HURT, 1, 1); - p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 0)); - return true; - } - else return false; - } - }); + .register(true); new SlimefunItem(Categories.MISC, (SlimefunItemStack) SlimefunItems.CAN, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, null, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT}, new CustomItem(SlimefunItems.CAN, 4)) .register(true); - new SlimefunItem(Categories.PORTABLE, (SlimefunItemStack) SlimefunItems.VITAMINS, RecipeType.ENHANCED_CRAFTING_TABLE, + new Vitamins(Categories.PORTABLE, (SlimefunItemStack) SlimefunItems.VITAMINS, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.APPLE), new ItemStack(Material.RED_MUSHROOM), new ItemStack(Material.SUGAR), null, null, null, null, null}) - .register(true, new ItemInteractionHandler() { + .register(true); - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimilar(item, SlimefunItems.VITAMINS, true)) { - if (p.getGameMode() != GameMode.CREATIVE) ItemUtils.consumeItem(item, false); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); - if (p.hasPotionEffect(PotionEffectType.POISON)) p.removePotionEffect(PotionEffectType.POISON); - if (p.hasPotionEffect(PotionEffectType.WITHER)) p.removePotionEffect(PotionEffectType.WITHER); - if (p.hasPotionEffect(PotionEffectType.SLOW)) p.removePotionEffect(PotionEffectType.SLOW); - if (p.hasPotionEffect(PotionEffectType.SLOW_DIGGING)) p.removePotionEffect(PotionEffectType.SLOW_DIGGING); - if (p.hasPotionEffect(PotionEffectType.WEAKNESS)) p.removePotionEffect(PotionEffectType.WEAKNESS); - if (p.hasPotionEffect(PotionEffectType.CONFUSION)) p.removePotionEffect(PotionEffectType.CONFUSION); - if (p.hasPotionEffect(PotionEffectType.BLINDNESS)) p.removePotionEffect(PotionEffectType.BLINDNESS); - p.setFireTicks(0); - p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 2)); - e.setCancelled(true); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.PORTABLE, (SlimefunItemStack) SlimefunItems.MEDICINE, RecipeType.ENHANCED_CRAFTING_TABLE, + new Medicine(Categories.PORTABLE, (SlimefunItemStack) SlimefunItems.MEDICINE, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.VITAMINS, new ItemStack(Material.GLASS_BOTTLE), SlimefunItems.HEAVY_CREAM, null, null, null, null, null, null}) - .register(true, new ItemConsumptionHandler() { - - @Override - public boolean onConsume(PlayerItemConsumeEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimilar(item, SlimefunItems.MEDICINE, true)) { - if (p.hasPotionEffect(PotionEffectType.POISON)) p.removePotionEffect(PotionEffectType.POISON); - if (p.hasPotionEffect(PotionEffectType.WITHER)) p.removePotionEffect(PotionEffectType.WITHER); - if (p.hasPotionEffect(PotionEffectType.SLOW)) p.removePotionEffect(PotionEffectType.SLOW); - if (p.hasPotionEffect(PotionEffectType.SLOW_DIGGING)) p.removePotionEffect(PotionEffectType.SLOW_DIGGING); - if (p.hasPotionEffect(PotionEffectType.WEAKNESS)) p.removePotionEffect(PotionEffectType.WEAKNESS); - if (p.hasPotionEffect(PotionEffectType.CONFUSION)) p.removePotionEffect(PotionEffectType.CONFUSION); - if (p.hasPotionEffect(PotionEffectType.BLINDNESS)) p.removePotionEffect(PotionEffectType.BLINDNESS); - - p.setFireTicks(0); - return true; - } - else return false; - } - }); + .register(true); new SlimefunArmorPiece(Categories.TECH, (SlimefunItemStack) SlimefunItems.NIGHT_VISION_GOGGLES, RecipeType.ARMOR_FORGE, new ItemStack[] {new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.LIME_STAINED_GLASS_PANE), new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.LIME_STAINED_GLASS_PANE), new ItemStack(Material.COAL_BLOCK), null, new ItemStack(Material.COAL_BLOCK)}, @@ -1604,27 +1521,30 @@ public final class SlimefunSetup { new SlimefunItem(Categories.EASTER, (SlimefunItemStack) SlimefunItems.EASTER_EGG, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, null, null, new ItemStack(Material.LIME_DYE), new ItemStack(Material.EGG), new ItemStack(Material.PURPLE_DYE), null, null, null}, new CustomItem(SlimefunItems.EASTER_EGG, 2)) - .register(true, new ItemInteractionHandler() { + .register(true, new ItemUseHandler() { + + private final List gifts = Arrays.asList( + new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 4), + new CustomItem(SlimefunItems.CARROT_JUICE, 1), + new ItemStack(Material.EMERALD), + new ItemStack(Material.CAKE), + new ItemStack(Material.RABBIT_FOOT), + new ItemStack(Material.GOLDEN_CARROT, 4) + ); @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimilar(item, SlimefunItems.EASTER_EGG, true)) { - e.setCancelled(true); - if (p.getGameMode() != GameMode.CREATIVE) ItemUtils.consumeItem(item, false); - FireworkUtils.launchRandom(e.getPlayer(), 2); - - List gifts = new ArrayList<>(); - gifts.add(new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 4)); - gifts.add(new CustomItem(SlimefunItems.CARROT_JUICE, 1)); - gifts.add(new ItemStack(Material.EMERALD)); - gifts.add(new ItemStack(Material.CAKE)); - gifts.add(new ItemStack(Material.RABBIT_FOOT)); - gifts.add(new ItemStack(Material.GOLDEN_CARROT, 4)); - - p.getWorld().dropItemNaturally(p.getLocation(), gifts.get(ThreadLocalRandom.current().nextInt(gifts.size()))); - return true; + public void onRightClick(ItemUseEvent e) { + e.cancel(); + + Player p = e.getPlayer(); + + if (p.getGameMode() != GameMode.CREATIVE) { + ItemUtils.consumeItem(e.getItem(), false); } - else return false; + + FireworkUtils.launchRandom(p, 2); + + p.getWorld().dropItemNaturally(p.getLocation(), gifts.get(ThreadLocalRandom.current().nextInt(gifts.size()))); } }); @@ -2156,7 +2076,7 @@ public final class SlimefunSetup { new ItemStack[] {SlimefunItems.BRASS_INGOT, new ItemStack(Material.ORANGE_STAINED_GLASS), SlimefunItems.BRASS_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.TIN_DUST, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BRASS_INGOT, new ItemStack(Material.ORANGE_STAINED_GLASS), SlimefunItems.BRASS_INGOT}) .register(true); - new GPSTransmitter(Categories.GPS, SlimefunItems.GPS_TRANSMITTER, "GPS_TRANSMITTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new GPSTransmitter(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_TRANSMITTER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.STEEL_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT}) { @Override @@ -2172,7 +2092,7 @@ public final class SlimefunSetup { } .registerChargeableBlock(true, 16); - new GPSTransmitter(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_2, "GPS_TRANSMITTER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new GPSTransmitter(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_TRANSMITTER_2, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.CARBON, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER}) { @Override @@ -2187,7 +2107,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 64); - new GPSTransmitter(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_3, "GPS_TRANSMITTER_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new GPSTransmitter(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_TRANSMITTER_3, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.CARBONADO, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2}) { @Override @@ -2202,7 +2122,7 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 256); - new GPSTransmitter(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_4, "GPS_TRANSMITTER_4", RecipeType.ENHANCED_CRAFTING_TABLE, + new GPSTransmitter(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_TRANSMITTER_4, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.NICKEL_INGOT, SlimefunItems.CARBONADO, SlimefunItems.NICKEL_INGOT, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3}) { @Override @@ -2217,27 +2137,15 @@ public final class SlimefunSetup { }.registerChargeableBlock(true, 1024); - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_CONTROL_PANEL, "GPS_CONTROL_PANEL", RecipeType.ENHANCED_CRAFTING_TABLE, + new GPSControlPanel(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_CONTROL_PANEL, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COBALT_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.COBALT_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT}) - .register(true, new ItemInteractionHandler() { + .register(true); - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { - if (e.getClickedBlock() == null) return false; - String item = BlockStorage.checkID(e.getClickedBlock()); - if (item == null || !item.equals("GPS_CONTROL_PANEL")) return false; - e.setCancelled(true); - - Slimefun.getGPSNetwork().openTransmitterControlPanel(p); - return true; - } - }); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_MARKER_TOOL, "GPS_MARKER_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_MARKER_TOOL, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, new ItemStack(Material.LAPIS_LAZULI), SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.LAPIS_LAZULI), new ItemStack(Material.REDSTONE), SlimefunItems.REDSTONE_ALLOY, new ItemStack(Material.REDSTONE)}) .register(true); - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_EMERGENCY_TRANSMITTER, "GPS_EMERGENCY_TRANSMITTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.GPS, (SlimefunItemStack) SlimefunItems.GPS_EMERGENCY_TRANSMITTER, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, null, SlimefunItems.GPS_TRANSMITTER, null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); @@ -3080,26 +2988,10 @@ public final class SlimefunSetup { new ItemStack[] {null, SlimefunItems.HOLOGRAM_PROJECTOR, null, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CARGO_MOTOR, SlimefunItems.REINFORCED_PLATE, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.ALUMINUM_BRONZE_INGOT}) .register(true); - new SlimefunItem(Categories.CARGO, (SlimefunItemStack) SlimefunItems.CARGO_NODE, RecipeType.ENHANCED_CRAFTING_TABLE, + new CargoConnector(Categories.CARGO, (SlimefunItemStack) SlimefunItems.CARGO_NODE, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT}, new CustomItem(SlimefunItems.CARGO_NODE, 4)) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { - if (e.getClickedBlock() == null) return false; - String id = BlockStorage.checkID(e.getClickedBlock()); - if (id == null || !id.equals("CARGO_NODE")) return false; - - if (CargoNet.getNetworkFromLocation(e.getClickedBlock().getLocation()) != null) { - p.sendMessage(ChatColors.color("&7Connected: " + "&2\u2714")); - } - else { - p.sendMessage(ChatColors.color("&7Connected: " + "&4\u2718")); - } - return true; - } - }); + .register(true); new CargoInputNode(Categories.CARGO, SlimefunItems.CARGO_INPUT, "CARGO_NODE_INPUT", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.HOPPER), null, SlimefunItems.BILLON_INGOT, SlimefunItems.CARGO_NODE, SlimefunItems.BILLON_INGOT, null, new ItemStack(Material.HOPPER), null}, diff --git a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java index e4527e4da..d4373798b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/SlimefunPlugin.java @@ -245,7 +245,7 @@ public final class SlimefunPlugin extends JavaPlugin { if (config.getBoolean("items.soulbound")) new SoulboundListener(this); // Handle Slimefun Guide being given on Join - if (config.getBoolean("options.give-guide-on-first-join")) new SlimefunGuideListener(this); + new SlimefunGuideListener(this, config.getBoolean("options.give-guide-on-first-join")); // Load/Unload Worlds in Slimefun new WorldListener(this); diff --git a/src/main/resources/languages/messages_en.yml b/src/main/resources/languages/messages_en.yml index 937602aa9..d4f861806 100644 --- a/src/main/resources/languages/messages_en.yml +++ b/src/main/resources/languages/messages_en.yml @@ -48,6 +48,7 @@ messages: mode-change: '&b%device% mode changed to: &9%mode%' disabled-in-world: '&4&lThis Item has been disabled in this world' disabled-item: '&4&lThis Item has been disabled! How did you even get that?' + no-tome-yourself: '&cYou cannot use the &4Tome of Knowledge &con yourself...' talisman: anvil: '&a&oYour Talisman saved your tool from breaking'