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>
<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>

View File

@ -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());

View File

@ -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);
}
@ -543,6 +546,18 @@ public class SlimefunItem {
public String getItemName() {
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() {

View File

@ -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) -> {

View File

@ -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);
@ -38,6 +38,11 @@ public class HologramProjector extends SimpleSlimefunItem<ItemInteractionHandler
}
});
}
@Override
protected boolean areItemHandlersPrivate() {
return false;
}
@Override
public ItemInteractionHandler getItemHandler() {

View File

@ -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() {

View File

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

View File

@ -14,6 +14,11 @@ public class GEOScannerBlock extends SimpleSlimefunItem<ItemInteractionHandler>
public GEOScannerBlock(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, id, recipeType, recipe);
}
@Override
protected boolean areItemHandlersPrivate() {
return false;
}
@Override
public ItemInteractionHandler getItemHandler() {

View File

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

View File

@ -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());

View File

@ -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)) {