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:
parent
7e0eb29040
commit
20e3f2b9ce
8
pom.xml
8
pom.xml
@ -20,6 +20,10 @@
|
||||
<id>spigot-repo</id>
|
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>worldedit-worldguard-repo</id>
|
||||
<url>https://maven.sk89q.com/repo/</url>
|
||||
@ -28,10 +32,6 @@
|
||||
<id>coreprotect-repo</id>
|
||||
<url>https://maven.playpro.com/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>CodeMC</id>
|
||||
<url>https://repo.codemc.org/repository/maven-public</url>
|
||||
|
@ -33,6 +33,11 @@ public abstract class SimpleSlimefunItem<T extends ItemHandler> extends Slimefun
|
||||
super(category, item, recipeType, recipe, keys, values);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean areItemHandlersPrivate() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preRegister() {
|
||||
addItemHandler(getItemHandler());
|
||||
|
@ -5,6 +5,7 @@ import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
@ -142,7 +143,6 @@ public class SlimefunItem {
|
||||
*/
|
||||
public String getPermission() { return permission; }
|
||||
public List<String> getNoPermissionTooltip() { return noPermissionTooltip; }
|
||||
public Set<ItemHandler> getHandlers() { return itemhandlers; }
|
||||
public boolean isTicking() { return ticking; }
|
||||
|
||||
/**
|
||||
@ -210,9 +210,12 @@ public class SlimefunItem {
|
||||
|
||||
create();
|
||||
|
||||
for (ItemHandler handler: itemhandlers) {
|
||||
for (ItemHandler handler : itemhandlers) {
|
||||
if (areItemHandlersPrivate()) continue;
|
||||
|
||||
Set<ItemHandler> handlerset = getHandlers(handler.toCodename());
|
||||
handlerset.add(handler);
|
||||
|
||||
SlimefunPlugin.getUtilities().itemHandlers.put(handler.toCodename(), handlerset);
|
||||
}
|
||||
|
||||
@ -544,6 +547,18 @@ public class SlimefunItem {
|
||||
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
|
||||
public String toString() {
|
||||
return "SlimefunItem: " + id + " (" + state + ", vanilla=" + !addon + ")";
|
||||
|
@ -30,6 +30,11 @@ public class BlockPlacer extends SimpleSlimefunItem<AutonomousMachineHandler> {
|
||||
super(category, item, recipeType, recipe, keys, values);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean areItemHandlersPrivate() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AutonomousMachineHandler getItemHandler() {
|
||||
return (e, dispenser, d, block, chest, machine) -> {
|
||||
|
@ -24,8 +24,8 @@ public class HologramProjector extends SimpleSlimefunItem<ItemInteractionHandler
|
||||
|
||||
@Override
|
||||
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, "offset", "-0.5");
|
||||
BlockStorage.addBlockInfo(b, "text", "Edit me via the Projector");
|
||||
BlockStorage.addBlockInfo(b, "offset", "0.5");
|
||||
BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString());
|
||||
|
||||
HologramProjectorHologram.getArmorStand(b, true);
|
||||
@ -39,6 +39,11 @@ public class HologramProjector extends SimpleSlimefunItem<ItemInteractionHandler
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean areItemHandlersPrivate() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemInteractionHandler getItemHandler() {
|
||||
return (e, p, item) -> {
|
||||
|
@ -23,6 +23,11 @@ public class InfusedHopper extends SimpleSlimefunItem<BlockTicker> {
|
||||
super(category, item, id, recipeType, recipe);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean areItemHandlersPrivate() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockTicker getItemHandler() {
|
||||
return new BlockTicker() {
|
||||
|
@ -34,6 +34,11 @@ public class ElevatorPlate extends SimpleSlimefunItem<ItemInteractionHandler> {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean areItemHandlersPrivate() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemInteractionHandler getItemHandler() {
|
||||
return (e, p, item) -> {
|
||||
|
@ -15,6 +15,11 @@ public class GEOScannerBlock extends SimpleSlimefunItem<ItemInteractionHandler>
|
||||
super(category, item, id, recipeType, recipe);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean areItemHandlersPrivate() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemInteractionHandler getItemHandler() {
|
||||
return (e, p, stack) -> {
|
||||
|
@ -4,4 +4,8 @@ package me.mrCookieSlime.Slimefun.Objects.handlers;
|
||||
public interface ItemHandler {
|
||||
|
||||
String toCodename();
|
||||
|
||||
default boolean isPrivate() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -738,7 +738,7 @@ public final class SlimefunGuide {
|
||||
|
||||
menu.setEmptySlotsClickable(false);
|
||||
fillInv(menu, cheat);
|
||||
addBackButton(menu, player, false, cheat);
|
||||
addBackButton(menu, 1, player, false, cheat);
|
||||
|
||||
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<>());
|
||||
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", "",
|
||||
"&rLeft Click: &7Go back to previous Page",
|
||||
"&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);
|
||||
else {
|
||||
Object last = getLastEntry(pl, true);
|
||||
@ -822,7 +822,7 @@ public final class SlimefunGuide {
|
||||
}
|
||||
else {
|
||||
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);
|
||||
return false;
|
||||
});
|
||||
@ -916,7 +916,7 @@ public final class SlimefunGuide {
|
||||
|
||||
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());
|
||||
|
||||
|
@ -211,7 +211,6 @@ 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);
|
||||
@ -228,47 +227,57 @@ public class ItemListener implements Listener {
|
||||
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.DEBUG_FISH, true)) {
|
||||
// Ignore the debug fish in here
|
||||
}
|
||||
else if (slimefunItem != null) {
|
||||
if (Slimefun.hasUnlocked(p, slimefunItem, true)) {
|
||||
else {
|
||||
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")) {
|
||||
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())) {
|
||||
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)) {
|
||||
|
Loading…
Reference in New Issue
Block a user