mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-26 02:19:23 +00:00
@@ -196,6 +196,8 @@ public class BukkitCraftEngine extends CraftEngine {
|
||||
super.furnitureManager = new BukkitFurnitureManager(this);
|
||||
// 初始化队伍管理器
|
||||
super.teamManager = new BukkitTeamManager(this);
|
||||
// 初始化虚拟队伍
|
||||
super.teamManager.init();
|
||||
// 注册默认的parser
|
||||
this.registerDefaultParsers();
|
||||
// 完成加载
|
||||
|
||||
@@ -57,6 +57,7 @@ import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||
import net.momirealms.craftengine.bukkit.plugin.user.FakeBukkitServerPlayer;
|
||||
import net.momirealms.craftengine.bukkit.util.*;
|
||||
import net.momirealms.craftengine.bukkit.world.BukkitWorldManager;
|
||||
import net.momirealms.craftengine.bukkit.world.score.BukkitTeamManager;
|
||||
import net.momirealms.craftengine.core.advancement.network.AdvancementHolder;
|
||||
import net.momirealms.craftengine.core.advancement.network.AdvancementProgress;
|
||||
import net.momirealms.craftengine.core.block.ImmutableBlockState;
|
||||
@@ -530,6 +531,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener {
|
||||
() -> {}, 1, 1);
|
||||
}
|
||||
user.sendPacket(TotemAnimationCommand.FIX_TOTEM_SOUND_PACKET, false);
|
||||
user.sendPacket(BukkitTeamManager.instance().addTeamsPacket(), false);
|
||||
Channel channel = user.nettyChannel();
|
||||
if (this.hasAntiPopup && Config.disableChatReport() && channel != null) {
|
||||
if (Locale.getDefault() == Locale.SIMPLIFIED_CHINESE) {
|
||||
@@ -3963,6 +3965,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener {
|
||||
return;
|
||||
|
||||
FurnitureBreakEvent breakEvent = new FurnitureBreakEvent(serverPlayer.platformPlayer(), furniture);
|
||||
breakEvent.setDropItems(!serverPlayer.isCreativeMode());
|
||||
if (EventUtils.fireAndCheckCancel(breakEvent))
|
||||
return;
|
||||
|
||||
@@ -3981,7 +3984,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
CraftEngineFurniture.remove(furniture, serverPlayer, !serverPlayer.isCreativeMode(), true);
|
||||
CraftEngineFurniture.remove(furniture, serverPlayer, breakEvent.dropItems(), true);
|
||||
};
|
||||
} else if (actionType == 2) {
|
||||
// INTERACT_AT
|
||||
|
||||
@@ -1,23 +1,18 @@
|
||||
package net.momirealms.craftengine.bukkit.world.score;
|
||||
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||
import net.momirealms.craftengine.bukkit.plugin.reflection.bukkit.CraftBukkitReflections;
|
||||
import net.momirealms.craftengine.core.util.LegacyChatFormatter;
|
||||
import net.momirealms.craftengine.core.world.score.TeamManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class BukkitTeamManager implements TeamManager {
|
||||
private static BukkitTeamManager instance;
|
||||
private final BukkitCraftEngine plugin;
|
||||
protected Set<LegacyChatFormatter> colorsInUse = new HashSet<>();
|
||||
private final Map<LegacyChatFormatter, Object> teamByColor = new EnumMap<>(LegacyChatFormatter.class);
|
||||
private boolean changed = false;
|
||||
private Object addTeamsPacket;
|
||||
|
||||
public BukkitTeamManager(BukkitCraftEngine plugin) {
|
||||
this.plugin = plugin;
|
||||
@@ -29,48 +24,26 @@ public class BukkitTeamManager implements TeamManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColorInUse(LegacyChatFormatter color) {
|
||||
this.colorsInUse.add(color);
|
||||
this.changed = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
this.changed = !this.colorsInUse.isEmpty();
|
||||
this.colorsInUse.clear();
|
||||
this.teamByColor.clear();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Object getTeamByColor(LegacyChatFormatter color) {
|
||||
return this.teamByColor.get(color);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void runDelayedSyncTasks() {
|
||||
if (!this.changed) {
|
||||
return;
|
||||
}
|
||||
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||
public Object addTeamsPacket() {
|
||||
return addTeamsPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
Object scoreboard = FastNMS.INSTANCE.field$MinecraftServer$scoreboard();
|
||||
List<Object> packets = new ObjectArrayList<>();
|
||||
for (LegacyChatFormatter color : LegacyChatFormatter.values()) {
|
||||
Team team = scoreboard.getTeam(TEAM_PREFIX + color.name().toLowerCase(Locale.ROOT));
|
||||
if (this.colorsInUse.contains(color)) {
|
||||
if (team == null) {
|
||||
team = scoreboard.registerNewTeam(TEAM_PREFIX + color.name().toLowerCase(Locale.ROOT));
|
||||
team.setColor(ChatColor.valueOf(color.name()));
|
||||
}
|
||||
try {
|
||||
Object nmsTeam = CraftBukkitReflections.field$CraftTeam$team.get(team);
|
||||
this.teamByColor.put(color, nmsTeam);
|
||||
} catch (ReflectiveOperationException e) {
|
||||
this.plugin.logger().warn("Could not get nms team", e);
|
||||
}
|
||||
} else {
|
||||
if (team != null) {
|
||||
team.unregister();
|
||||
}
|
||||
}
|
||||
String teamName = TeamManager.createTeamName(color);
|
||||
Object team = FastNMS.INSTANCE.constructor$PlayerTeam(scoreboard, teamName);
|
||||
FastNMS.INSTANCE.method$PlayerTeam$setColor(team, color.name());
|
||||
this.teamByColor.put(color, team);
|
||||
packets.add(FastNMS.INSTANCE.method$ClientboundSetPlayerTeamPacket$createAddOrModifyPacket(team, true));
|
||||
}
|
||||
addTeamsPacket = FastNMS.INSTANCE.constructor$ClientboundBundlePacket(packets);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -745,11 +745,6 @@ public abstract class AbstractBlockManager extends AbstractModelGenerator implem
|
||||
if (arguments == null) return Optional.empty();
|
||||
List<BlockEntityElementConfig<? extends BlockEntityElement>> blockEntityElementConfigs = ResourceConfigUtils.parseConfigAsList(arguments, BlockEntityElementConfigs::fromMap);
|
||||
if (blockEntityElementConfigs.isEmpty()) return Optional.empty();
|
||||
for (BlockEntityElementConfig<? extends BlockEntityElement> blockEntityElementConfig : blockEntityElementConfigs) {
|
||||
if (blockEntityElementConfig instanceof Glowing glowing && glowing.glowColor() != null) {
|
||||
AbstractBlockManager.this.plugin.teamManager().setColorInUse(glowing.glowColor());
|
||||
}
|
||||
}
|
||||
return Optional.of(blockEntityElementConfigs.toArray(new BlockEntityElementConfig[0]));
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import net.momirealms.craftengine.core.plugin.entityculling.CullingData;
|
||||
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
|
||||
import net.momirealms.craftengine.core.plugin.scheduler.SchedulerTask;
|
||||
import net.momirealms.craftengine.core.util.*;
|
||||
import net.momirealms.craftengine.core.world.Glowing;
|
||||
import org.incendo.cloud.suggestion.Suggestion;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
@@ -220,13 +219,6 @@ public abstract class AbstractFurnitureManager implements FurnitureManager {
|
||||
Optional<Vector3f> optionalLootSpawnOffset = Optional.ofNullable(variantArguments.get("loot-spawn-offset")).map(it -> ResourceConfigUtils.getAsVector3f(it, "loot-spawn-offset"));
|
||||
List<FurnitureElementConfig<?>> elements = ResourceConfigUtils.parseConfigAsList(variantArguments.get("elements"), FurnitureElementConfigs::fromMap);
|
||||
|
||||
// 收集颜色
|
||||
for (FurnitureElementConfig<?> element : elements) {
|
||||
if (element instanceof Glowing glowing && glowing.glowColor() != null) {
|
||||
AbstractFurnitureManager.this.plugin.teamManager().setColorInUse(glowing.glowColor());
|
||||
}
|
||||
}
|
||||
|
||||
// 外部模型
|
||||
Optional<ExternalModel> externalModel;
|
||||
if (variantArguments.containsKey("model-engine")) {
|
||||
|
||||
@@ -117,11 +117,11 @@ public abstract class Furniture implements Cullable {
|
||||
Seat<FurnitureHitBox>[] seats = hitbox.seats();
|
||||
for (int index = 0; index < seats.length; index++) {
|
||||
Map<Vector3f, Seat<FurnitureHitBox>> tempMap = seatMap.get();
|
||||
Vector3f seatPos = seats[i].config().position();
|
||||
Vector3f seatPos = seats[index].config().position();
|
||||
if (tempMap.containsKey(seatPos)) {
|
||||
seats[i] = tempMap.get(seatPos);
|
||||
seats[index] = tempMap.get(seatPos);
|
||||
} else {
|
||||
tempMap.put(seatPos, seats[i]);
|
||||
tempMap.put(seatPos, seats[index]);
|
||||
}
|
||||
}
|
||||
hitbox.collectVirtualEntityId(virtualEntityIds::addLast);
|
||||
|
||||
@@ -193,9 +193,6 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
|
||||
if (settings.destroyOnDeathChance != 0) {
|
||||
this.featureFlag$destroyOnDeathChance = true;
|
||||
}
|
||||
if (settings.glowColor != null) {
|
||||
this.plugin.teamManager().setColorInUse(settings.glowColor);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -176,7 +176,6 @@ public abstract class CraftEngine implements Plugin {
|
||||
this.projectileManager.reload();
|
||||
this.seatManager.reload();
|
||||
this.entityCullingManager.reload();
|
||||
this.teamManager.reload();
|
||||
}
|
||||
|
||||
private void runDelayTasks(boolean reloadRecipe) {
|
||||
@@ -249,8 +248,6 @@ public abstract class CraftEngine implements Plugin {
|
||||
if (reloadRecipe) {
|
||||
this.recipeManager.runDelayedSyncTasks();
|
||||
}
|
||||
// 同步修改队伍
|
||||
this.teamManager.runDelayedSyncTasks();
|
||||
long time4 = System.currentTimeMillis();
|
||||
long syncTime = time4 - time3;
|
||||
this.reloadEventDispatcher.accept(this);
|
||||
|
||||
@@ -308,9 +308,19 @@ public class TranslationManagerImpl implements TranslationManager {
|
||||
|
||||
Map<String, String> bundle = new HashMap<>();
|
||||
for (Map.Entry<String, Object> entry : section.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
bundle.put(key, entry.getValue().toString());
|
||||
TranslationManagerImpl.this.translationKeys.add(key);
|
||||
StringBuilder key = new StringBuilder(entry.getKey());
|
||||
Object value = entry.getValue();
|
||||
for (;;) {
|
||||
if (!(value instanceof Map<?,?> map)) {
|
||||
value = entry.getValue();
|
||||
break;
|
||||
}
|
||||
Map.Entry<?, ?> next = map.entrySet().iterator().next();
|
||||
key.append(".").append(next.getKey());
|
||||
value = next.getValue();
|
||||
}
|
||||
bundle.put(key.toString(), String.valueOf(value));
|
||||
TranslationManagerImpl.this.translationKeys.add(key.toString());
|
||||
this.count++;
|
||||
}
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ public class VersionHelper {
|
||||
|
||||
COMPONENT_RELEASE = v1_20_5;
|
||||
|
||||
mojmap = checkMojMap();
|
||||
mojmap = checkMojMap() || v26_1;
|
||||
folia = checkFolia();
|
||||
paper = checkPaper();
|
||||
leaves = checkLeaves();
|
||||
|
||||
@@ -3,8 +3,15 @@ package net.momirealms.craftengine.core.world.score;
|
||||
import net.momirealms.craftengine.core.plugin.Manageable;
|
||||
import net.momirealms.craftengine.core.util.LegacyChatFormatter;
|
||||
|
||||
public interface TeamManager extends Manageable {
|
||||
String TEAM_PREFIX = "ce_";
|
||||
import java.util.Locale;
|
||||
|
||||
void setColorInUse(LegacyChatFormatter color);
|
||||
public interface TeamManager extends Manageable {
|
||||
|
||||
Object getTeamByColor(LegacyChatFormatter color);
|
||||
|
||||
Object addTeamsPacket();
|
||||
|
||||
static String createTeamName(LegacyChatFormatter color) {
|
||||
return "\ufeffce_" + color.name().toLowerCase(Locale.ROOT) + "\ufeff";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ byte_buddy_version=1.18.1
|
||||
ahocorasick_version=0.6.3
|
||||
snake_yaml_version=2.5
|
||||
anti_grief_version=1.0.5
|
||||
nms_helper_version=1.0.150
|
||||
nms_helper_version=1.0.151
|
||||
evalex_version=3.5.0
|
||||
reactive_streams_version=1.0.4
|
||||
amazon_awssdk_version=2.38.7
|
||||
|
||||
Reference in New Issue
Block a user