1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

Some more bug fixes and optimizations

This commit is contained in:
TheBusyBiscuit 2019-10-14 20:50:57 +02:00
parent 7e0eb29040
commit 20e3f2b9ce
11 changed files with 108 additions and 50 deletions

View File

@ -20,6 +20,10 @@
<id>spigot-repo</id> <id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository> </repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<repository> <repository>
<id>worldedit-worldguard-repo</id> <id>worldedit-worldguard-repo</id>
<url>https://maven.sk89q.com/repo/</url> <url>https://maven.sk89q.com/repo/</url>
@ -28,10 +32,6 @@
<id>coreprotect-repo</id> <id>coreprotect-repo</id>
<url>https://maven.playpro.com/</url> <url>https://maven.playpro.com/</url>
</repository> </repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<repository> <repository>
<id>CodeMC</id> <id>CodeMC</id>
<url>https://repo.codemc.org/repository/maven-public</url> <url>https://repo.codemc.org/repository/maven-public</url>

View File

@ -33,6 +33,11 @@ public abstract class SimpleSlimefunItem<T extends ItemHandler> extends Slimefun
super(category, item, recipeType, recipe, keys, values); super(category, item, recipeType, recipe, keys, values);
} }
@Override
protected boolean areItemHandlersPrivate() {
return true;
}
@Override @Override
public void preRegister() { public void preRegister() {
addItemHandler(getItemHandler()); addItemHandler(getItemHandler());

View File

@ -5,6 +5,7 @@ import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer;
import java.util.logging.Level; import java.util.logging.Level;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -142,7 +143,6 @@ public class SlimefunItem {
*/ */
public String getPermission() { return permission; } public String getPermission() { return permission; }
public List<String> getNoPermissionTooltip() { return noPermissionTooltip; } public List<String> getNoPermissionTooltip() { return noPermissionTooltip; }
public Set<ItemHandler> getHandlers() { return itemhandlers; }
public boolean isTicking() { return ticking; } public boolean isTicking() { return ticking; }
/** /**
@ -210,9 +210,12 @@ public class SlimefunItem {
create(); create();
for (ItemHandler handler: itemhandlers) { for (ItemHandler handler : itemhandlers) {
if (areItemHandlersPrivate()) continue;
Set<ItemHandler> handlerset = getHandlers(handler.toCodename()); Set<ItemHandler> handlerset = getHandlers(handler.toCodename());
handlerset.add(handler); handlerset.add(handler);
SlimefunPlugin.getUtilities().itemHandlers.put(handler.toCodename(), handlerset); SlimefunPlugin.getUtilities().itemHandlers.put(handler.toCodename(), handlerset);
} }
@ -544,6 +547,18 @@ public class SlimefunItem {
return ItemUtils.getItemName(item); return ItemUtils.getItemName(item);
} }
public Set<ItemHandler> getHandlers() {
return itemhandlers;
}
protected boolean areItemHandlersPrivate() {
return false;
}
public <T extends ItemHandler> void callItemHandler(Class<T> c, Consumer<T> callable) {
itemhandlers.stream().filter(c::isInstance).map(c::cast).forEach(callable);
}
@Override @Override
public String toString() { public String toString() {
return "SlimefunItem: " + id + " (" + state + ", vanilla=" + !addon + ")"; return "SlimefunItem: " + id + " (" + state + ", vanilla=" + !addon + ")";

View File

@ -30,6 +30,11 @@ public class BlockPlacer extends SimpleSlimefunItem<AutonomousMachineHandler> {
super(category, item, recipeType, recipe, keys, values); super(category, item, recipeType, recipe, keys, values);
} }
@Override
protected boolean areItemHandlersPrivate() {
return false;
}
@Override @Override
public AutonomousMachineHandler getItemHandler() { public AutonomousMachineHandler getItemHandler() {
return (e, dispenser, d, block, chest, machine) -> { return (e, dispenser, d, block, chest, machine) -> {

View File

@ -24,8 +24,8 @@ public class HologramProjector extends SimpleSlimefunItem<ItemInteractionHandler
@Override @Override
public void onPlace(Player p, Block b, SlimefunItem item) { public void onPlace(Player p, Block b, SlimefunItem item) {
BlockStorage.addBlockInfo(b, "text", "&bHi, I am a Hologram, &3configure me using the Projector"); BlockStorage.addBlockInfo(b, "text", "Edit me via the Projector");
BlockStorage.addBlockInfo(b, "offset", "-0.5"); BlockStorage.addBlockInfo(b, "offset", "0.5");
BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString());
HologramProjectorHologram.getArmorStand(b, true); HologramProjectorHologram.getArmorStand(b, true);
@ -39,6 +39,11 @@ public class HologramProjector extends SimpleSlimefunItem<ItemInteractionHandler
}); });
} }
@Override
protected boolean areItemHandlersPrivate() {
return false;
}
@Override @Override
public ItemInteractionHandler getItemHandler() { public ItemInteractionHandler getItemHandler() {
return (e, p, item) -> { return (e, p, item) -> {

View File

@ -23,6 +23,11 @@ public class InfusedHopper extends SimpleSlimefunItem<BlockTicker> {
super(category, item, id, recipeType, recipe); super(category, item, id, recipeType, recipe);
} }
@Override
protected boolean areItemHandlersPrivate() {
return false;
}
@Override @Override
public BlockTicker getItemHandler() { public BlockTicker getItemHandler() {
return new BlockTicker() { return new BlockTicker() {

View File

@ -34,6 +34,11 @@ public class ElevatorPlate extends SimpleSlimefunItem<ItemInteractionHandler> {
}); });
} }
@Override
protected boolean areItemHandlersPrivate() {
return false;
}
@Override @Override
public ItemInteractionHandler getItemHandler() { public ItemInteractionHandler getItemHandler() {
return (e, p, item) -> { return (e, p, item) -> {

View File

@ -15,6 +15,11 @@ public class GEOScannerBlock extends SimpleSlimefunItem<ItemInteractionHandler>
super(category, item, id, recipeType, recipe); super(category, item, id, recipeType, recipe);
} }
@Override
protected boolean areItemHandlersPrivate() {
return false;
}
@Override @Override
public ItemInteractionHandler getItemHandler() { public ItemInteractionHandler getItemHandler() {
return (e, p, stack) -> { return (e, p, stack) -> {

View File

@ -4,4 +4,8 @@ package me.mrCookieSlime.Slimefun.Objects.handlers;
public interface ItemHandler { public interface ItemHandler {
String toCodename(); String toCodename();
default boolean isPrivate() {
return false;
}
} }

View File

@ -738,7 +738,7 @@ public final class SlimefunGuide {
menu.setEmptySlotsClickable(false); menu.setEmptySlotsClickable(false);
fillInv(menu, cheat); fillInv(menu, cheat);
addBackButton(menu, player, false, cheat); addBackButton(menu, 1, player, false, cheat);
searchTerm = searchTerm.toLowerCase(); searchTerm = searchTerm.toLowerCase();
@ -800,17 +800,17 @@ public final class SlimefunGuide {
} }
} }
private static void addBackButton(ChestMenu menu, Player player, boolean book, boolean cheat) { private static void addBackButton(ChestMenu menu, int slot, Player player, boolean book, boolean cheat) {
List<Object> playerHistory = getHistory().getOrDefault(player.getUniqueId(), new LinkedList<>()); List<Object> playerHistory = getHistory().getOrDefault(player.getUniqueId(), new LinkedList<>());
if (playerHistory != null && playerHistory.size() > 1) { if (playerHistory != null && playerHistory.size() > 1) {
menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), menu.addItem(slot, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK),
"&7\u21E6 Back", "", "&7\u21E6 Back", "",
"&rLeft Click: &7Go back to previous Page", "&rLeft Click: &7Go back to previous Page",
"&rShift + left Click: &7Go back to Main Menu") "&rShift + left Click: &7Go back to Main Menu")
); );
menu.addMenuClickHandler(0, (pl, slot, item118, action) -> { menu.addMenuClickHandler(0, (pl, s, is, action) -> {
if (action.isShiftClicked()) openMainMenuAsync(pl, true, false, 1); if (action.isShiftClicked()) openMainMenuAsync(pl, true, false, 1);
else { else {
Object last = getLastEntry(pl, true); Object last = getLastEntry(pl, true);
@ -822,7 +822,7 @@ public final class SlimefunGuide {
} }
else { else {
menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu")); menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu"));
menu.addMenuClickHandler(0, (pl, slot, item, action) -> { menu.addMenuClickHandler(0, (pl, s, is, action) -> {
openMainMenuAsync(pl, true, book, 1); openMainMenuAsync(pl, true, book, 1);
return false; return false;
}); });
@ -916,7 +916,7 @@ public final class SlimefunGuide {
if (addToHistory) addToHistory(p, sfItem != null ? sfItem: item); if (addToHistory) addToHistory(p, sfItem != null ? sfItem: item);
addBackButton(menu, p, book, false); addBackButton(menu, 0, p, book, false);
LinkedList<Object> history = getHistory().get(p.getUniqueId()); LinkedList<Object> history = getHistory().get(p.getUniqueId());

View File

@ -211,7 +211,6 @@ public class ItemListener implements Listener {
final Player p = e.getPlayer(); final Player p = e.getPlayer();
ItemStack item = e.getItem(); ItemStack item = e.getItem();
SlimefunItem slimefunItem = SlimefunItem.getByItem(item);
if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true)) { if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true)) {
if (p.isSneaking()) SlimefunGuide.openSettings(p, item); if (p.isSneaking()) SlimefunGuide.openSettings(p, item);
@ -228,47 +227,57 @@ public class ItemListener implements Listener {
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.DEBUG_FISH, true)) { else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.DEBUG_FISH, true)) {
// Ignore the debug fish in here // Ignore the debug fish in here
} }
else if (slimefunItem != null) { else {
if (Slimefun.hasUnlocked(p, slimefunItem, true)) { SlimefunItem slimefunItem = SlimefunItem.getByItem(item);
if (slimefunItem != null) {
if (Slimefun.hasUnlocked(p, slimefunItem, true)) {
slimefunItem.callItemHandler(ItemInteractionHandler.class, handler ->
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) {
e.setCancelled(true);
List<Integer> modes = ((MultiTool) slimefunItem).getModes();
int index = utilities.mode.getOrDefault(p.getUniqueId(), 0);
if (!p.isSneaking()) {
float charge = ItemEnergy.getStoredEnergy(item);
float cost = 0.3F;
if (charge >= cost) {
p.getEquipment().setItemInMainHand(ItemEnergy.chargeItem(item, -cost));
Bukkit.getPluginManager().callEvent(new ItemUseEvent(e.getParentEvent(), SlimefunItem.getByID((String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(index) + ".item")).getItem(), e.getClickedBlock()));
}
}
else {
index++;
if (index == modes.size()) index = 0;
final int finalIndex = index;
SlimefunPlugin.getLocal().sendMessage(p, "messages.mode-change", true, msg -> msg.replace("%device%", "Multi Tool").replace("%mode%", (String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(finalIndex) + ".name")));
utilities.mode.put(p.getUniqueId(), index);
}
}
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.HEAVY_CREAM, true)) e.setCancelled(true);
}
else {
e.setCancelled(true);
}
}
else {
for (ItemHandler handler : SlimefunItem.getHandlers("ItemInteractionHandler")) { for (ItemHandler handler : SlimefunItem.getHandlers("ItemInteractionHandler")) {
if (((ItemInteractionHandler) handler).onRightClick(e, p, item)) return; if (((ItemInteractionHandler) handler).onRightClick(e, p, item)) return;
} }
// Open the Backpack (also includes Coolers)
if (slimefunItem instanceof SlimefunBackpack) {
e.setCancelled(true);
BackpackListener.openBackpack(p, item, (SlimefunBackpack) slimefunItem);
}
else if (slimefunItem instanceof MultiTool) {
e.setCancelled(true);
List<Integer> modes = ((MultiTool) slimefunItem).getModes();
int index = utilities.mode.getOrDefault(p.getUniqueId(), 0);
if (!p.isSneaking()) {
float charge = ItemEnergy.getStoredEnergy(item);
float cost = 0.3F;
if (charge >= cost) {
p.getEquipment().setItemInMainHand(ItemEnergy.chargeItem(item, -cost));
Bukkit.getPluginManager().callEvent(new ItemUseEvent(e.getParentEvent(), SlimefunItem.getByID((String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(index) + ".item")).getItem(), e.getClickedBlock()));
}
}
else {
index++;
if (index == modes.size()) index = 0;
final int finalIndex = index;
SlimefunPlugin.getLocal().sendMessage(p, "messages.mode-change", true, msg -> msg.replace("%device%", "Multi Tool").replace("%mode%", (String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(finalIndex) + ".name")));
utilities.mode.put(p.getUniqueId(), index);
}
}
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.HEAVY_CREAM, true)) e.setCancelled(true);
}
else {
e.setCancelled(true);
} }
} }
if (e.getClickedBlock() != null && BlockStorage.hasBlockInfo(e.getClickedBlock())) { if (e.getClickedBlock() != null && BlockStorage.hasBlockInfo(e.getClickedBlock())) {
String id = BlockStorage.checkID(e.getClickedBlock()); String id = BlockStorage.checkID(e.getClickedBlock());
if (BlockMenuPreset.isInventory(id) && !canPlaceCargoNodes(p, item, e.getClickedBlock().getRelative(e.getParentEvent().getBlockFace())) && (!p.isSneaking() || item == null || item.getType() == Material.AIR)) { if (BlockMenuPreset.isInventory(id) && !canPlaceCargoNodes(p, item, e.getClickedBlock().getRelative(e.getParentEvent().getBlockFace())) && (!p.isSneaking() || item == null || item.getType() == Material.AIR)) {