mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2026-01-06 15:52:03 +00:00
优化落地弹射物
This commit is contained in:
@@ -365,7 +365,7 @@ public class BukkitFurniture implements Furniture {
|
|||||||
public static void injectFurnitureEntity(Object nmsEntity) {
|
public static void injectFurnitureEntity(Object nmsEntity) {
|
||||||
try {
|
try {
|
||||||
Object trackedEntity = FastNMS.INSTANCE.field$Entity$trackedEntity(nmsEntity);
|
Object trackedEntity = FastNMS.INSTANCE.field$Entity$trackedEntity(nmsEntity);
|
||||||
Object serverEntity = FastNMS.INSTANCE.filed$ChunkMap$TrackedEntity$serverEntity(trackedEntity);
|
Object serverEntity = FastNMS.INSTANCE.field$ChunkMap$TrackedEntity$serverEntity(trackedEntity);
|
||||||
CoreReflections.handle$ServerEntity$broadcastSetter.invokeExact(serverEntity, Handlers.DO_NOTHING);
|
CoreReflections.handle$ServerEntity$broadcastSetter.invokeExact(serverEntity, Handlers.DO_NOTHING);
|
||||||
CoreReflections.handle$ServerEntity$updateIntervalSetter.invokeExact(serverEntity, Integer.MAX_VALUE);
|
CoreReflections.handle$ServerEntity$updateIntervalSetter.invokeExact(serverEntity, Integer.MAX_VALUE);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
|
|||||||
@@ -11,4 +11,9 @@ public class BukkitCustomProjectile extends AbstractCustomProjectile {
|
|||||||
public BukkitCustomProjectile(ProjectileMeta meta, Projectile projectile, Item<ItemStack> projectileItem) {
|
public BukkitCustomProjectile(ProjectileMeta meta, Projectile projectile, Item<ItemStack> projectileItem) {
|
||||||
super(meta, new BukkitProjectile(projectile), projectileItem);
|
super(meta, new BukkitProjectile(projectile), projectileItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BukkitProjectile projectile() {
|
||||||
|
return (BukkitProjectile) super.projectile();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
public class BukkitProjectileManager implements Listener, ProjectileManager {
|
public class BukkitProjectileManager implements Listener, ProjectileManager {
|
||||||
private static BukkitProjectileManager instance;
|
private static BukkitProjectileManager instance;
|
||||||
private final BukkitCraftEngine plugin;
|
private final BukkitCraftEngine plugin;
|
||||||
private final Map<Integer, BukkitCustomProjectile> projectiles;
|
// 会被netty线程访问
|
||||||
|
private final Map<Integer, BukkitCustomProjectile> projectiles = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
public BukkitProjectileManager(BukkitCraftEngine plugin) {
|
public BukkitProjectileManager(BukkitCraftEngine plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.projectiles = new ConcurrentHashMap<>();
|
|
||||||
instance = this;
|
instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +114,8 @@ public class BukkitProjectileManager implements Listener, ProjectileManager {
|
|||||||
wrapped.getCustomItem().ifPresent(it -> {
|
wrapped.getCustomItem().ifPresent(it -> {
|
||||||
ProjectileMeta meta = it.settings().projectileMeta();
|
ProjectileMeta meta = it.settings().projectileMeta();
|
||||||
if (meta != null) {
|
if (meta != null) {
|
||||||
this.projectiles.put(projectile.getEntityId(), new BukkitCustomProjectile(meta, projectile, wrapped));
|
BukkitCustomProjectile customProjectile = new BukkitCustomProjectile(meta, projectile, wrapped);
|
||||||
|
this.projectiles.put(projectile.getEntityId(), customProjectile);
|
||||||
new ProjectileInjectTask(projectile);
|
new ProjectileInjectTask(projectile);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -162,9 +163,7 @@ public class BukkitProjectileManager implements Listener, ProjectileManager {
|
|||||||
private final Projectile projectile;
|
private final Projectile projectile;
|
||||||
private final SchedulerTask task;
|
private final SchedulerTask task;
|
||||||
private Object cachedServerEntity;
|
private Object cachedServerEntity;
|
||||||
private boolean injected;
|
private int lastInjectedInterval = 0;
|
||||||
private int lastInjectedInterval = -1;
|
|
||||||
private boolean wasInGround;
|
|
||||||
|
|
||||||
public ProjectileInjectTask(Projectile projectile) {
|
public ProjectileInjectTask(Projectile projectile) {
|
||||||
this.projectile = projectile;
|
this.projectile = projectile;
|
||||||
@@ -181,44 +180,35 @@ public class BukkitProjectileManager implements Listener, ProjectileManager {
|
|||||||
this.task.cancel();
|
this.task.cancel();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Object nmsEntity = FastNMS.INSTANCE.method$CraftEntity$getHandle(this.projectile);
|
Object nmsEntity = FastNMS.INSTANCE.method$CraftEntity$getHandle(this.projectile);
|
||||||
if (!this.injected) {
|
// 获取server entity
|
||||||
injectProjectile(nmsEntity, 1);
|
if (this.cachedServerEntity == null) {
|
||||||
this.injected = true;
|
Object trackedEntity = FastNMS.INSTANCE.field$Entity$trackedEntity(nmsEntity);
|
||||||
this.lastInjectedInterval = 1;
|
if (trackedEntity == null) return;
|
||||||
|
Object serverEntity = FastNMS.INSTANCE.field$ChunkMap$TrackedEntity$serverEntity(trackedEntity);
|
||||||
|
if (serverEntity == null) return;
|
||||||
|
this.cachedServerEntity = serverEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean inGround = FastNMS.INSTANCE.method$AbstractArrow$isInGround(nmsEntity);
|
boolean inGround = FastNMS.INSTANCE.method$AbstractArrow$isInGround(nmsEntity);
|
||||||
if (canSpawnParticle(nmsEntity, inGround)) {
|
if (canSpawnParticle(nmsEntity, inGround)) {
|
||||||
this.projectile.getWorld().spawnParticle(ParticleUtils.BUBBLE, this.projectile.getLocation(), 3, 0.1, 0.1, 0.1, 0);
|
this.projectile.getWorld().spawnParticle(ParticleUtils.BUBBLE, this.projectile.getLocation(), 3, 0.1, 0.1, 0.1, 0);
|
||||||
}
|
}
|
||||||
projectileByEntityId(this.projectile.getEntityId()).ifPresent(customProjectile -> {
|
if (inGround) {
|
||||||
customProjectile.setInGroundTime(inGround ? customProjectile.inGroundTime() + 1 : 0);
|
updateProjectileUpdateInterval(Integer.MAX_VALUE);
|
||||||
if (customProjectile.inGroundTime() > 5) {
|
} else {
|
||||||
if (lastInjectedInterval != Integer.MAX_VALUE) {
|
updateProjectileUpdateInterval(1);
|
||||||
injectProjectile(nmsEntity, Integer.MAX_VALUE);
|
}
|
||||||
}
|
|
||||||
} else if (!inGround && wasInGround) {
|
|
||||||
if (lastInjectedInterval != 1) {
|
|
||||||
injectProjectile(nmsEntity, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.wasInGround = inGround;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void injectProjectile(Object entity, int updateInterval) {
|
private void updateProjectileUpdateInterval(int updateInterval) {
|
||||||
if (this.cachedServerEntity == null) {
|
if (this.lastInjectedInterval == updateInterval) return;
|
||||||
Object trackedEntity = FastNMS.INSTANCE.field$Entity$trackedEntity(entity);
|
|
||||||
if (trackedEntity == null) return;
|
|
||||||
Object serverEntity = FastNMS.INSTANCE.filed$ChunkMap$TrackedEntity$serverEntity(trackedEntity);
|
|
||||||
if (serverEntity == null) return;
|
|
||||||
this.cachedServerEntity = serverEntity;
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
CoreReflections.handle$ServerEntity$updateIntervalSetter.invokeExact(this.cachedServerEntity, updateInterval);
|
CoreReflections.handle$ServerEntity$updateIntervalSetter.invokeExact(this.cachedServerEntity, updateInterval);
|
||||||
this.lastInjectedInterval = updateInterval;
|
this.lastInjectedInterval = updateInterval;
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
plugin.logger().warn("Failed to update server entity tracking interval", e);
|
BukkitProjectileManager.this.plugin.logger().warn("Failed to update server entity update interval for " + this.projectile.getType().getKey() + "[" + this.projectile.getUniqueId() + "]", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ public abstract class AbstractCustomProjectile implements CustomProjectile {
|
|||||||
protected final ProjectileMeta meta;
|
protected final ProjectileMeta meta;
|
||||||
protected final Projectile projectile;
|
protected final Projectile projectile;
|
||||||
protected final Item<?> item;
|
protected final Item<?> item;
|
||||||
private int inGroundTime;
|
|
||||||
|
|
||||||
protected AbstractCustomProjectile(ProjectileMeta meta, Projectile projectile, Item<?> item) {
|
protected AbstractCustomProjectile(ProjectileMeta meta, Projectile projectile, Item<?> item) {
|
||||||
this.meta = meta;
|
this.meta = meta;
|
||||||
@@ -28,14 +27,4 @@ public abstract class AbstractCustomProjectile implements CustomProjectile {
|
|||||||
public Item<?> item() {
|
public Item<?> item() {
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int inGroundTime() {
|
|
||||||
return inGroundTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setInGroundTime(int inGroundTime) {
|
|
||||||
this.inGroundTime = inGroundTime;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,8 +9,4 @@ public interface CustomProjectile {
|
|||||||
Projectile projectile();
|
Projectile projectile();
|
||||||
|
|
||||||
Item<?> item();
|
Item<?> item();
|
||||||
|
|
||||||
int inGroundTime();
|
|
||||||
|
|
||||||
void setInGroundTime(int inGroundTime);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,9 +68,10 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
|
|||||||
this.equipmentsToGenerate = new HashSet<>();
|
this.equipmentsToGenerate = new HashSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerDataFunction(Function<Object, ItemDataModifier<I>> function, String... alias) {
|
@Override
|
||||||
|
public void registerDataType(Function<Object, ItemDataModifier<I>> factory, String... alias) {
|
||||||
for (String a : alias) {
|
for (String a : alias) {
|
||||||
dataFunctions.put(a, function);
|
dataFunctions.put(a, factory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -432,26 +433,26 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerFunctions() {
|
private void registerFunctions() {
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
||||||
String plugin = data.get("plugin").toString();
|
String plugin = data.get("plugin").toString();
|
||||||
String id = data.get("id").toString();
|
String id = data.get("id").toString();
|
||||||
ExternalItemProvider<I> provider = AbstractItemManager.this.getExternalItemProvider(plugin);
|
ExternalItemProvider<I> provider = AbstractItemManager.this.getExternalItemProvider(plugin);
|
||||||
return new ExternalModifier<>(id, Objects.requireNonNull(provider, "Item provider " + plugin + " not found"));
|
return new ExternalModifier<>(id, Objects.requireNonNull(provider, "Item provider " + plugin + " not found"));
|
||||||
}, "external");
|
}, "external");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
String name = obj.toString();
|
String name = obj.toString();
|
||||||
return new CustomNameModifier<>(Config.nonItalic() ? "<!i>" + name : name);
|
return new CustomNameModifier<>(Config.nonItalic() ? "<!i>" + name : name);
|
||||||
}, "custom-name");
|
}, "custom-name");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
String name = obj.toString();
|
String name = obj.toString();
|
||||||
return new ItemNameModifier<>(Config.nonItalic() ? "<!i>" + name : name);
|
return new ItemNameModifier<>(Config.nonItalic() ? "<!i>" + name : name);
|
||||||
}, "item-name", "display-name");
|
}, "item-name", "display-name");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
List<String> lore = MiscUtils.getAsStringList(obj).stream().map(it -> "<!i>" + it).toList();
|
List<String> lore = MiscUtils.getAsStringList(obj).stream().map(it -> "<!i>" + it).toList();
|
||||||
return new LoreModifier<>(lore);
|
return new LoreModifier<>(lore);
|
||||||
}, "lore", "display-lore", "description");
|
}, "lore", "display-lore", "description");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
Map<String, List<String>> dynamicLore = new LinkedHashMap<>();
|
Map<String, List<String>> dynamicLore = new LinkedHashMap<>();
|
||||||
if (obj instanceof Map<?, ?> map) {
|
if (obj instanceof Map<?, ?> map) {
|
||||||
for (Map.Entry<?, ?> entry : map.entrySet()) {
|
for (Map.Entry<?, ?> entry : map.entrySet()) {
|
||||||
@@ -460,7 +461,7 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
|
|||||||
}
|
}
|
||||||
return new DynamicLoreModifier<>(dynamicLore);
|
return new DynamicLoreModifier<>(dynamicLore);
|
||||||
}, "dynamic-lore");
|
}, "dynamic-lore");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
if (obj instanceof Integer integer) {
|
if (obj instanceof Integer integer) {
|
||||||
return new DyedColorModifier<>(integer);
|
return new DyedColorModifier<>(integer);
|
||||||
} else {
|
} else {
|
||||||
@@ -468,15 +469,15 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
|
|||||||
return new DyedColorModifier<>(MCUtils.fastFloor(vector3f.x) << 16 + MCUtils.fastFloor(vector3f.y) << 8 + MCUtils.fastFloor(vector3f.z));
|
return new DyedColorModifier<>(MCUtils.fastFloor(vector3f.x) << 16 + MCUtils.fastFloor(vector3f.y) << 8 + MCUtils.fastFloor(vector3f.z));
|
||||||
}
|
}
|
||||||
}, "dyed-color");
|
}, "dyed-color");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
||||||
return new TagsModifier<>(data);
|
return new TagsModifier<>(data);
|
||||||
}, "tags", "tag", "nbt");
|
}, "tags", "tag", "nbt");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
boolean value = TypeUtils.checkType(obj, Boolean.class);
|
boolean value = TypeUtils.checkType(obj, Boolean.class);
|
||||||
return new UnbreakableModifier<>(value);
|
return new UnbreakableModifier<>(value);
|
||||||
}, "unbreakable");
|
}, "unbreakable");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
||||||
List<Enchantment> enchantments = new ArrayList<>();
|
List<Enchantment> enchantments = new ArrayList<>();
|
||||||
for (Map.Entry<String, Object> e : data.entrySet()) {
|
for (Map.Entry<String, Object> e : data.entrySet()) {
|
||||||
@@ -486,22 +487,22 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
|
|||||||
}
|
}
|
||||||
return new EnchantmentModifier<>(enchantments);
|
return new EnchantmentModifier<>(enchantments);
|
||||||
}, "enchantment", "enchantments", "enchant");
|
}, "enchantment", "enchantments", "enchant");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
||||||
String material = data.get("material").toString().toLowerCase(Locale.ENGLISH);
|
String material = data.get("material").toString().toLowerCase(Locale.ENGLISH);
|
||||||
String pattern = data.get("pattern").toString().toLowerCase(Locale.ENGLISH);
|
String pattern = data.get("pattern").toString().toLowerCase(Locale.ENGLISH);
|
||||||
return new TrimModifier<>(material, pattern);
|
return new TrimModifier<>(material, pattern);
|
||||||
}, "trim");
|
}, "trim");
|
||||||
if (VersionHelper.isOrAbove1_20_5()) {
|
if (VersionHelper.isOrAbove1_20_5()) {
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
||||||
return new ComponentModifier<>(data);
|
return new ComponentModifier<>(data);
|
||||||
}, "components", "component");
|
}, "components", "component");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
List<String> data = MiscUtils.getAsStringList(obj);
|
List<String> data = MiscUtils.getAsStringList(obj);
|
||||||
return new RemoveComponentModifier<>(data);
|
return new RemoveComponentModifier<>(data);
|
||||||
}, "remove-components", "remove-component");
|
}, "remove-components", "remove-component");
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
||||||
int nutrition = ResourceConfigUtils.getAsInt(data.get("nutrition"), "nutrition");
|
int nutrition = ResourceConfigUtils.getAsInt(data.get("nutrition"), "nutrition");
|
||||||
float saturation = ResourceConfigUtils.getAsFloat(data.get("saturation"), "saturation");
|
float saturation = ResourceConfigUtils.getAsFloat(data.get("saturation"), "saturation");
|
||||||
@@ -509,24 +510,24 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
|
|||||||
}, "food");
|
}, "food");
|
||||||
}
|
}
|
||||||
if (VersionHelper.isOrAbove1_21()) {
|
if (VersionHelper.isOrAbove1_21()) {
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
String song = obj.toString();
|
String song = obj.toString();
|
||||||
return new JukeboxSongModifier<>(new JukeboxPlayable(song, true));
|
return new JukeboxSongModifier<>(new JukeboxPlayable(song, true));
|
||||||
}, "jukebox-playable");
|
}, "jukebox-playable");
|
||||||
}
|
}
|
||||||
if (VersionHelper.isOrAbove1_21_2()) {
|
if (VersionHelper.isOrAbove1_21_2()) {
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
String id = obj.toString();
|
String id = obj.toString();
|
||||||
return new TooltipStyleModifier<>(Key.of(id));
|
return new TooltipStyleModifier<>(Key.of(id));
|
||||||
}, "tooltip-style");
|
}, "tooltip-style");
|
||||||
}
|
}
|
||||||
if (VersionHelper.isOrAbove1_21_2()) {
|
if (VersionHelper.isOrAbove1_21_2()) {
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
||||||
return new EquippableModifier<>(EquipmentData.fromMap(data));
|
return new EquippableModifier<>(EquipmentData.fromMap(data));
|
||||||
}, "equippable");
|
}, "equippable");
|
||||||
}
|
}
|
||||||
registerDataFunction((obj) -> {
|
registerDataType((obj) -> {
|
||||||
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
Map<String, Object> data = MiscUtils.castToMap(obj, false);
|
||||||
Map<String, TextProvider> arguments = new HashMap<>();
|
Map<String, TextProvider> arguments = new HashMap<>();
|
||||||
for (Map.Entry<String, Object> entry : data.entrySet()) {
|
for (Map.Entry<String, Object> entry : data.entrySet()) {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package net.momirealms.craftengine.core.item;
|
|||||||
|
|
||||||
import net.momirealms.craftengine.core.entity.player.Player;
|
import net.momirealms.craftengine.core.entity.player.Player;
|
||||||
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
|
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
|
||||||
|
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
|
||||||
import net.momirealms.craftengine.core.pack.misc.EquipmentGeneration;
|
import net.momirealms.craftengine.core.pack.misc.EquipmentGeneration;
|
||||||
import net.momirealms.craftengine.core.pack.model.ItemModel;
|
import net.momirealms.craftengine.core.pack.model.ItemModel;
|
||||||
import net.momirealms.craftengine.core.pack.model.LegacyOverridesModel;
|
import net.momirealms.craftengine.core.pack.model.LegacyOverridesModel;
|
||||||
@@ -14,9 +15,12 @@ import org.incendo.cloud.suggestion.Suggestion;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
public interface ItemManager<T> extends Manageable, ModelGenerator {
|
public interface ItemManager<T> extends Manageable, ModelGenerator {
|
||||||
|
|
||||||
|
void registerDataType(Function<Object, ItemDataModifier<T>> factory, String... alias);
|
||||||
|
|
||||||
ConfigParser parser();
|
ConfigParser parser();
|
||||||
|
|
||||||
Map<Key, TreeSet<LegacyOverridesModel>> legacyItemOverrides();
|
Map<Key, TreeSet<LegacyOverridesModel>> legacyItemOverrides();
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ byte_buddy_version=1.17.5
|
|||||||
ahocorasick_version=0.6.3
|
ahocorasick_version=0.6.3
|
||||||
snake_yaml_version=2.4
|
snake_yaml_version=2.4
|
||||||
anti_grief_version=0.17
|
anti_grief_version=0.17
|
||||||
nms_helper_version=0.67.2
|
nms_helper_version=0.67.3
|
||||||
evalex_version=3.5.0
|
evalex_version=3.5.0
|
||||||
reactive_streams_version=1.0.4
|
reactive_streams_version=1.0.4
|
||||||
amazon_awssdk_version=2.31.23
|
amazon_awssdk_version=2.31.23
|
||||||
|
|||||||
Reference in New Issue
Block a user