mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2026-01-06 15:52:03 +00:00
修改成条件系统
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package net.momirealms.craftengine.core.plugin.gui.category;
|
||||
|
||||
import net.momirealms.craftengine.core.plugin.context.Condition;
|
||||
import net.momirealms.craftengine.core.plugin.context.Context;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -15,9 +17,9 @@ public class Category implements Comparable<Category> {
|
||||
private final List<String> members;
|
||||
private final int priority;
|
||||
private final boolean hidden;
|
||||
private final String permission;
|
||||
private final Condition<Context> condition;
|
||||
|
||||
public Category(Key id, String displayName, List<String> displayLore, Key icon, List<String> members, int priority, boolean hidden, String permission) {
|
||||
public Category(Key id, String displayName, List<String> displayLore, Key icon, List<String> members, int priority, boolean hidden, Condition<Context> condition) {
|
||||
this.id = id;
|
||||
this.displayName = displayName;
|
||||
this.members = new ArrayList<>(members);
|
||||
@@ -25,7 +27,7 @@ public class Category implements Comparable<Category> {
|
||||
this.priority = priority;
|
||||
this.displayLore = new ArrayList<>(displayLore);
|
||||
this.hidden = hidden;
|
||||
this.permission = permission;
|
||||
this.condition = condition;
|
||||
}
|
||||
|
||||
public void addMember(String member) {
|
||||
@@ -49,8 +51,8 @@ public class Category implements Comparable<Category> {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String permission() {
|
||||
return permission;
|
||||
public Condition<Context> condition() {
|
||||
return condition;
|
||||
}
|
||||
|
||||
public List<String> displayLore() {
|
||||
|
||||
@@ -13,8 +13,12 @@ import net.momirealms.craftengine.core.pack.Pack;
|
||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||
import net.momirealms.craftengine.core.plugin.config.ConfigParser;
|
||||
import net.momirealms.craftengine.core.plugin.config.IdSectionConfigParser;
|
||||
import net.momirealms.craftengine.core.plugin.context.Condition;
|
||||
import net.momirealms.craftengine.core.plugin.context.Context;
|
||||
import net.momirealms.craftengine.core.plugin.context.ContextHolder;
|
||||
import net.momirealms.craftengine.core.plugin.context.PlayerOptionalContext;
|
||||
import net.momirealms.craftengine.core.plugin.context.condition.AllOfCondition;
|
||||
import net.momirealms.craftengine.core.plugin.context.event.EventConditions;
|
||||
import net.momirealms.craftengine.core.plugin.gui.*;
|
||||
import net.momirealms.craftengine.core.plugin.gui.Ingredient;
|
||||
import net.momirealms.craftengine.core.util.*;
|
||||
@@ -117,8 +121,9 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager {
|
||||
int priority = ResourceConfigUtils.getAsInt(section.getOrDefault("priority", 0), "priority");
|
||||
List<String> lore = MiscUtils.getAsStringList(section.getOrDefault("lore", List.of()));
|
||||
boolean hidden = ResourceConfigUtils.getAsBoolean(section.getOrDefault("hidden", false), "hidden");
|
||||
String permission = ResourceConfigUtils.getAsStringOrNull(section.get("permission"));
|
||||
Category category = new Category(id, name, lore, icon, new ArrayList<>(members), priority, hidden, permission);
|
||||
List<Condition<Context>> conditionList = ResourceConfigUtils.parseConfigAsList(ResourceConfigUtils.get(section, "conditions", "condition"), EventConditions::fromMap);
|
||||
Condition<Context> conditions = conditionList.isEmpty() ? null : conditionList.size() == 1 ? conditionList.getFirst() : new AllOfCondition<>(conditionList);
|
||||
Category category = new Category(id, name, lore, icon, new ArrayList<>(members), priority, hidden, conditions);
|
||||
if (ItemBrowserManagerImpl.this.byId.containsKey(id)) {
|
||||
ItemBrowserManagerImpl.this.byId.get(id).merge(category);
|
||||
} else {
|
||||
@@ -159,7 +164,8 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager {
|
||||
);
|
||||
|
||||
List<ItemWithAction> iconList = this.categoryOnMainPage.stream().map(it -> {
|
||||
if (it.permission() != null && !player.hasPermission(it.permission())) {
|
||||
Condition<Context> condition = it.condition();
|
||||
if (condition != null && !condition.test(PlayerOptionalContext.of(player))) {
|
||||
return null;
|
||||
}
|
||||
Item<?> item = this.plugin.itemManager().createWrappedItem(it.icon(), player);
|
||||
@@ -250,9 +256,11 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager {
|
||||
if (subCategory == null) {
|
||||
item = Objects.requireNonNull(this.plugin.itemManager().createWrappedItem(ItemKeys.BARRIER, player));
|
||||
item.customNameJson(AdventureHelper.componentToJson(Component.text(subCategoryId).color(NamedTextColor.RED).decoration(TextDecoration.ITALIC, false)));
|
||||
} else if (subCategory.permission() != null && !player.hasPermission(subCategory.permission())) {
|
||||
return null;
|
||||
} else {
|
||||
Condition<Context> condition = subCategory.condition();
|
||||
if (condition != null && !condition.test(PlayerOptionalContext.of(player))) {
|
||||
return null;
|
||||
}
|
||||
item = this.plugin.itemManager().createWrappedItem(subCategory.icon(), player);
|
||||
if (ItemUtils.isEmpty(item)) {
|
||||
if (!subCategory.icon().equals(ItemKeys.AIR)) {
|
||||
|
||||
Reference in New Issue
Block a user