9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-26 02:19:23 +00:00

Merge pull request #511 from jhqwqmc/dev

dev
This commit is contained in:
XiaoMoMi
2025-12-22 16:34:34 +08:00
committed by GitHub
12 changed files with 51 additions and 75 deletions

View File

@@ -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();
// 完成加载

View File

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

View File

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

View File

@@ -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]));
}

View File

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

View File

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

View File

@@ -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;
}

View File

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

View File

@@ -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++;
}

View File

@@ -94,7 +94,7 @@ public class VersionHelper {
COMPONENT_RELEASE = v1_20_5;
mojmap = checkMojMap();
mojmap = checkMojMap() || v26_1;
folia = checkFolia();
paper = checkPaper();
leaves = checkLeaves();

View File

@@ -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";
}
}

View File

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