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

General improvements and fixes

This commit is contained in:
Daniel Walsh 2019-10-11 23:56:51 +01:00
parent 6b62a45ffa
commit 694d36afa6
6 changed files with 78 additions and 62 deletions

View File

@ -73,8 +73,8 @@ public class SlimefunLocalization extends Localization {
setDefaultMessage("messages.cannot-place" ,"&cYou cannot place that block there!");
setDefaultMessage("messages.no-pvp" ,"&cYou cannot pvp in here!");
setDefaultMessage("messages.radiation" ,"&4You have been exposed to deadly radiation! &cGet rid of the radioactive item or equip the complete hazmat suit!");
setDefaultMessage("messages.opening-guide", "&bOpening guide...");
setDefaultMessage("messages.opening-backpack", "&bOpening backpack...");
setDefaultMessage("messages.opening-guide", "&bOpening guide, this may take a few seconds...");
setDefaultMessage("messages.opening-backpack", "&bOpening backpack, this may take a few seconds...");
setDefaultMessage("machines.pattern-not-found", "&eSorry, I could not recognize this Pattern. Please place the Items in the correct Pattern into the Dispenser.");
setDefaultMessage("machines.unknown-material", "&eSorry, I could not recognize the Item in my Dispenser. Please put something in that I know.");

View File

@ -255,10 +255,8 @@ public final class SlimefunGuide {
}
private static void openMainMenuAsync(final Player player, final boolean survival, final boolean book, final int selected_page) {
if (!PlayerProfile.get(player, profile -> Slimefun.runSync(() -> openMainMenu(profile, survival, book, selected_page))))
Slimefun.getLocal().sendMessage(player, "messages.opening-guide");
PlayerProfile.get(player, profile ->
Bukkit.getScheduler().runTask(SlimefunPlugin.instance, () -> openMainMenu(profile, survival, book, selected_page))
);
}
private static void openMainMenu(final PlayerProfile profile, final boolean survival, final boolean book, final int selected_page) {
@ -735,7 +733,7 @@ public final class SlimefunGuide {
}
}
private static void openSearch(Player player, String searchTerm, boolean cheat, boolean addToHistory) {
public static void openSearch(Player player, String searchTerm, boolean cheat, boolean addToHistory) {
final ChestMenu menu = new ChestMenu("Slimefun Guide Search");
menu.setEmptySlotsClickable(false);

View File

@ -16,6 +16,7 @@ import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
@ -207,6 +208,10 @@ public final class PlayerProfile {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Total XP Levels spent: &b" + levels));
}
public Player getPlayer() {
return Bukkit.getPlayer(getUUID());
}
public static PlayerProfile fromUUID(UUID uuid) {
PlayerProfile profile = SlimefunPlugin.getUtilities().profiles.get(uuid);
@ -243,11 +248,18 @@ public final class PlayerProfile {
return profile;
}
public static void get(OfflinePlayer p, Consumer<PlayerProfile> callback) {
/**
* Get the PlayerProfile for a player asynchronously.
*
* @param p The player who's profile to retrieve
* @param callback The callback with the PlayerProfile
* @return If the player was cached or not.
*/
public static boolean get(OfflinePlayer p, Consumer<PlayerProfile> callback) {
PlayerProfile profile = SlimefunPlugin.getUtilities().profiles.get(p.getUniqueId());
if (profile != null) {
callback.accept(profile);
return;
return true;
}
Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance, () -> {
@ -255,6 +267,7 @@ public final class PlayerProfile {
SlimefunPlugin.getUtilities().profiles.put(p.getUniqueId(), pp);
callback.accept(pp);
});
return false;
}
public static boolean isLoaded(UUID uuid) {

View File

@ -5,6 +5,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@ -323,4 +324,8 @@ public final class Slimefun {
public static SlimefunLocalization getLocal() {
return SlimefunPlugin.getLocal();
}
public static void runSync(Runnable r) {
Bukkit.getScheduler().runTask(SlimefunPlugin.instance, r);
}
}

View File

@ -3,6 +3,7 @@ package me.mrCookieSlime.Slimefun.listeners;
import java.util.List;
import me.mrCookieSlime.Slimefun.Setup.SlimefunLocalization;
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Sound;
@ -82,43 +83,45 @@ public class BackpackListener implements Listener {
@EventHandler
public void onInteract(PlayerInteractEvent e) {
if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
ItemStack item = e.getItem();
Player p = e.getPlayer();
ItemStack item = e.getItem();
SlimefunItem sfItem = SlimefunItem.getByItem(item);
if (sfItem == null) return;
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_SMALL, false)) {
openBackpack(SlimefunItems.BACKPACK_SMALL, 9, e, p, item);
}
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_MEDIUM, false)) {
openBackpack(SlimefunItems.BACKPACK_MEDIUM, 18, e, p, item);
}
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_LARGE, false)) {
openBackpack(SlimefunItems.BACKPACK_LARGE, 27, e, p, item);
}
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.WOVEN_BACKPACK, false)) {
openBackpack(SlimefunItems.WOVEN_BACKPACK, 36, e, p, item);
}
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GILDED_BACKPACK, false)) {
openBackpack(SlimefunItems.GILDED_BACKPACK, 45, e, p, item);
}
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RADIANT_BACKPACK, false)) {
openBackpack(SlimefunItems.RADIANT_BACKPACK, 54, e, p, item);
}
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BOUND_BACKPACK, false)) {
openBackpack(SlimefunItems.BOUND_BACKPACK, 36, e, p, item);
}
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.COOLER, false)) {
openBackpack(SlimefunItems.COOLER, 27, e, p, item);
}
// Surely this can be even simpler?
if (sfItem.isItem(SlimefunItems.BACKPACK_SMALL))
openBackpack(SlimefunItems.BACKPACK_SMALL, 9, e, p);
else if (sfItem.isItem(SlimefunItems.BACKPACK_MEDIUM))
openBackpack(SlimefunItems.BACKPACK_MEDIUM, 18, e, p);
else if (sfItem.isItem(SlimefunItems.BACKPACK_LARGE))
openBackpack(SlimefunItems.BACKPACK_LARGE, 27, e, p);
else if (sfItem.isItem(SlimefunItems.WOVEN_BACKPACK))
openBackpack(SlimefunItems.WOVEN_BACKPACK, 36, e, p);
else if (sfItem.isItem(SlimefunItems.GILDED_BACKPACK))
openBackpack(SlimefunItems.GILDED_BACKPACK, 45, e, p);
else if (sfItem.isItem(SlimefunItems.RADIANT_BACKPACK))
openBackpack(SlimefunItems.RADIANT_BACKPACK, 54, e, p);
else if (sfItem.isItem(SlimefunItems.BOUND_BACKPACK))
openBackpack(SlimefunItems.BOUND_BACKPACK, 36, e, p);
else if (sfItem.isItem(SlimefunItems.COOLER))
openBackpack(SlimefunItems.COOLER, 27, e, p);
}
}
private void openBackpack(ItemStack sfItem, int size, PlayerInteractEvent e, Player p, ItemStack item) {
private void openBackpack(ItemStack item, int size, PlayerInteractEvent e, Player p) {
e.setCancelled(true);
if (item.getAmount() == 1) {
if (Slimefun.hasUnlocked(p, sfItem, true)) {
if (Slimefun.hasUnlocked(p, item, true)) {
if (!PlayerProfile.get(p, profile -> openBackpack(item, profile, size)))
Slimefun.getLocal().sendMessage(p, "messages.opening-backpack");
PlayerProfile.get(p, profile -> {
}
}
else SlimefunPlugin.getLocal().sendMessage(p, "backpack.no-stack", true);
}
private void openBackpack(ItemStack item, PlayerProfile profile, int size) {
Player p = profile.getPlayer();
for (int line = 0; line < item.getItemMeta().getLore().size(); line++) {
if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: <ID>"))) {
BackpackInventory backpack = profile.createBackpack(size);
@ -129,15 +132,12 @@ public class BackpackListener implements Listener {
}
if(!SlimefunPlugin.getUtilities().backpack.containsValue(item)) {
PlayerProfile.getBackpack(item).open(p);
p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F);
SlimefunPlugin.getUtilities().backpack.put(p.getUniqueId(), item);
Slimefun.runSync(() -> PlayerProfile.getBackpack(item).open(p));
}
else SlimefunPlugin.getLocal().sendMessage(p, "backpack.already-open", true);
});
}
}
else SlimefunPlugin.getLocal().sendMessage(p, "backpack.no-stack", true);
}
public static void setBackpackId(Player p, ItemStack item, int line, int id) {

View File

@ -210,6 +210,7 @@ public class ItemListener implements Listener {
final Player p = e.getPlayer();
ItemStack item = e.getItem();
SlimefunItem slimefunItem = SlimefunItem.getByItem(item);
if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true)) {
if (p.isSneaking()) SlimefunGuide.openSettings(p, item);
@ -226,7 +227,7 @@ public class ItemListener implements Listener {
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.DEBUG_FISH, true)) {
// Ignore the debug fish in here
}
else if (Slimefun.hasUnlocked(p, item, true)) {
else if (Slimefun.hasUnlocked(p, slimefunItem, true)) {
for (ItemHandler handler : SlimefunItem.getHandlers("ItemInteractionHandler")) {
if (((ItemInteractionHandler) handler).onRightClick(e, p, item)) return;
}
@ -249,8 +250,7 @@ public class ItemListener implements Listener {
if (tool != null && tool.getType() != Material.AIR) {
SlimefunItem sfItem = SlimefunItem.getByItem(tool);
List<Integer> modes = ((MultiTool) sfItem).getModes();
int index = 0;
if (utilities.mode.containsKey(p.getUniqueId())) index = utilities.mode.get(p.getUniqueId());
int index = utilities.mode.getOrDefault(p.getUniqueId(), 0);
if (!p.isSneaking()) {
float charge = ItemEnergy.getStoredEnergy(item);