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>
|
<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>
|
||||||
|
@ -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());
|
||||||
|
@ -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 + ")";
|
||||||
|
@ -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) -> {
|
||||||
|
@ -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) -> {
|
||||||
|
@ -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() {
|
||||||
|
@ -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) -> {
|
||||||
|
@ -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) -> {
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
|
|
||||||
|
@ -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)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user