Compare commits

...
14 Commits
Author SHA1 Message Date
YoyoNow 917a1b1c7c Rework chat into Velocity-managed channels
Deploy / Build (push) Successful in 2m17s
Deploy / Deploy (push) Successful in 9s
- Subservers no longer receive chat; arenas get a record-only ChatRecordPacket so replays keep their chat
2026-10-19 09:37:24 +02:00
YoyoNow cab5ab8cc8 Merge pull request 'Backport CommonCore changes from #506 to version/legacy' (#507) from backport/commoncore/pr-506-to-version-legacy into version/legacy
Deploy / Build (push) Successful in 2m33s
Deploy / Deploy (push) Successful in 12s
Reviewed-on: #507
2026-10-19 09:33:34 +02:00
YoyoNow a98c10813d Merge pull request 'Fix 1.19 material in 1.15 laufbau' (#487) from Hut512/SteamWar:version/legacy into version/legacy
Deploy / Build (push) Successful in 2m47s
Deploy / Deploy (push) Successful in 8s
Reviewed-on: #487
2026-10-18 19:39:44 +02:00
YoyoNow 1ef562ea43 Fix: #461
Deploy / Build (push) Successful in 2m39s
Deploy / Deploy (push) Failing after 5s
2026-10-18 19:38:19 +02:00
SteamWar Backport Bot d1c8c7ef2e Backport CommonCore changes from #506
Pull Request Build / Build (pull_request) Failing after 2m47s
Chat channels
2026-10-16 07:20:04 +00:00
Hut512 f8fbe4c39b Fix deploy with temporary directory
Pull Request Build / Build (pull_request) Failing after 11m38s
2026-09-21 22:48:51 +02:00
fiercehut fbdf2c888f Fix Laufbau MUD SWItem
Pull Request Build / Build (pull_request) Failing after 4m51s
2026-09-11 14:09:01 +02:00
fiercehut 564a1ceaab Fix 1.19 material in 1.15 laufbau
Pull Request Build / Build (pull_request) Failing after 1m28s
2026-09-07 15:50:49 +02:00
YoyoNow fa6e6d3dc9 Fix GameModeConfig
Deploy / Build (push) Successful in 2m17s
Deploy / Deploy (push) Failing after 7s
2026-08-27 11:08:14 +02:00
YoyoNow c146391646 Fix GameModeConfig
Deploy / Build (push) Failing after 2m2s
Deploy / Deploy (push) Skipped
2026-08-27 11:05:17 +02:00
YoyoNow 32611fd1d6 Fix GameModeConfig
Deploy / Build (push) Failing after 1m21s
Deploy / Deploy (push) Skipped
2026-08-27 11:01:36 +02:00
Chaoscaot 56fd93a474 Merge branch 'main' into version/legacy
Deploy / Build (push) Successful in 1m24s
Deploy / Deploy (push) Failing after 8s
2026-05-15 16:02:51 +02:00
steamwar-ci-bot c27789daa8 Merge pull request 'Backport CommonCore changes from #354 to version/legacy' (#355) from backport/commoncore/pr-354-to-version-legacy into version/legacy
Deploy / Build (push) Successful in 1m23s
Deploy / Deploy (push) Successful in 7s
Reviewed-on: #355
2026-05-15 15:22:33 +02:00
SteamWar Backport Bot 56a7344d67 Backport CommonCore changes from #354
Pull Request Build / Build (pull_request) Failing after 1m11s
Test Backporting
2026-05-15 13:09:59 +00:00
11 changed files with 92 additions and 51 deletions
+6 -4
View File
@@ -63,9 +63,6 @@ jobs:
cp "SpigotCore/build/libs/SpigotCore-all.jar" "deploy/SpigotCore.jar"
cp "Teamserver/build/libs/Teamserver.jar" "deploy/Builder.jar"
cp "TowerRun/build/libs/TowerRun.jar" "deploy/TowerRun.jar"
cp "VelocityCore/Persistent/build/libs/Persistent.jar" "deploy/PersistentVelocityCore.jar"
cp "VelocityCore/Dependencies/build/libs/Dependencies-all.jar" "deploy/DependenciesVelocityCore.jar"
cp "VelocityCore/build/libs/VelocityCore-all.jar" "deploy/VelocityCore.jar"
cp "WebsiteBackend/build/libs/WebsiteBackend-all.jar" "deploy/website-api.jar"
cp "CLI/build/distributions/sw.zip" "deploy/sw.zip"
@@ -130,7 +127,12 @@ jobs:
ssh-keyscan -p "$port" "$DEPLOY_HOST" >> ~/.ssh/known_hosts
ssh -i ~/.ssh/deploy_key -p "$port" "${DEPLOY_USER}@${DEPLOY_HOST}" "mkdir -p '$DEPLOY_PATH'"
scp -i ~/.ssh/deploy_key -P "$port" deploy/* "${DEPLOY_USER}@${DEPLOY_HOST}:$DEPLOY_PATH/"
ssh -i ~/.ssh/deploy_key -p "$port" "${DEPLOY_USER}@${DEPLOY_HOST}" "mkdir -p '$DEPLOY_PATH/upload'"
scp -i ~/.ssh/deploy_key -P "$port" deploy/* "${DEPLOY_USER}@${DEPLOY_HOST}:$DEPLOY_PATH/upload"
ssh -i ~/.ssh/deploy_key -p "$port" "${DEPLOY_USER}@${DEPLOY_HOST}" "rm -f '$DEPLOY_PATH'/*.jar '$DEPLOY_PATH'/*.zip"
ssh -i ~/.ssh/deploy_key -p "$port" "${DEPLOY_USER}@${DEPLOY_HOST}" "mv '$DEPLOY_PATH'/upload/* '$DEPLOY_PATH'"
ssh -i ~/.ssh/deploy_key -p "$port" "${DEPLOY_USER}@${DEPLOY_HOST}" "rm -r '$DEPLOY_PATH/upload'"
ssh -i ~/.ssh/deploy_key -p "$port" "${DEPLOY_USER}@${DEPLOY_HOST}" "chmod o-w '$DEPLOY_PATH'/*"
- name: Restart Services
shell: bash
env:
@@ -864,6 +864,7 @@ LAUFBAU_SETTINGS_ADVANCED=§eLeft-Click §8-§7 Advanced settings
LAUFBAU_BLOCK_COBWEB=§eCobweb
LAUFBAU_BLOCK_GRASS_PATH=§eGrass Path
LAUFBAU_BLOCK_SOUL_SAND=§eSoul Sand
LAUFBAU_BLOCK_MUD=§eMud
LAUFBAU_BLOCK_COCOA=§eCocoa
LAUFBAU_BLOCK_TURTLE_EGG=§eTurtle Eggs
LAUFBAU_BLOCK_CHEST=§eChest
@@ -802,6 +802,7 @@ LAUFBAU_SETTINGS_ADVANCED=§eLinks-Click §8-§7 Erweiterte Einstellung
LAUFBAU_BLOCK_COBWEB=§eCobweb
LAUFBAU_BLOCK_GRASS_PATH=§eGrass Path
LAUFBAU_BLOCK_SOUL_SAND=§eSoul Sand
LAUFBAU_BLOCK_MUD=§eMud
LAUFBAU_BLOCK_COCOA=§eCocoa
LAUFBAU_BLOCK_TURTLE_EGG=§eTurtle Eggs
LAUFBAU_BLOCK_CHEST=§eChest
@@ -101,7 +101,11 @@ public class BlockBoundingBox {
addPixel(Material.END_STONE.createBlockData(), 0, 0, 0, 16, 16, 16, null);
addPixel(NMSWrapper.impl.pathMaterial().createBlockData(), 0, 0, 0, 16, 15, 16, createItem("LAUFBAU_BLOCK_GRASS_PATH", NMSWrapper.impl.pathMaterial()));
addPixel(Material.MUD.createBlockData(), 0, 0, 0, 16, 14, 16, createItem("LAUFBAU_BLOCK_SOUL_SAND", Material.SOUL_SAND));
addPixel(Material.SOUL_SAND.createBlockData(), 0, 0, 0, 16, 14, 16, createItem("LAUFBAU_BLOCK_SOUL_SAND", Material.SOUL_SAND));
if (Core.getVersion() >= 19) {
addPixel(Material.MUD.createBlockData(), 0, 0, 0, 16, 14, 16, createItem("LAUFBAU_BLOCK_MUD", Material.MUD));
}
Cocoa cocoaNorth = (Cocoa) Material.COCOA.createBlockData();
cocoaNorth.setAge(2);
@@ -25,14 +25,12 @@ import de.steamwar.bausystem.shared.Pair;
import de.steamwar.bausystem.utils.WorldEditUtils;
import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.MinVersion;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@Linked
@MinVersion(19)
public class LaufbauCommand extends SWCommand {
public LaufbauCommand() {
@@ -0,0 +1,40 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2026 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.network.packets.server;
import de.steamwar.network.packets.NetworkPacket;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* A chat message written on an arena. The arena only records it for the replay and never displays it.
*/
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Getter
public class ChatRecordPacket extends NetworkPacket {
private static final long serialVersionUID = -4718360932583127458L;
private int playerId;
private String message;
}
@@ -30,6 +30,7 @@ import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ToString
public final class GameModeConfig<M, W> {
@@ -710,13 +711,26 @@ public final class GameModeConfig<M, W> {
Map<Set<M>, Integer> Limited = new HashMap<>();
for (Map<?, ?> entry : loader.getMapList("Limited")) {
int amount = (Integer) entry.get("Amount");
Set<String> materials = new HashSet<>((List<String>) entry.get("Materials"));
Set<M> materials = Stream.of((List<String>) entry.get("Materials"))
.filter(Objects::nonNull)
.flatMap(List::stream)
.map(String::toUpperCase)
.map(material -> {
try {
return loader.materialMapper.apply(material);
} catch (Exception e) {
return null;
}
})
.filter(Objects::nonNull)
.collect(Collectors.toSet());
if (amount == 0) {
materials.forEach(material -> {
Limited.put(Collections.singleton(loader.materialMapper.apply(material.toUpperCase())), 0);
Limited.put(Collections.singleton(material), 0);
});
} else {
Limited.put(Collections.unmodifiableSet(materials.stream().map(String::toUpperCase).map(loader.materialMapper).collect(Collectors.toSet())), amount);
Limited.put(materials, amount);
}
}
SQLWrapper.impl.getMaterialWithGreaterBlastResistance(MaxBlastResistance).forEach(material -> {
@@ -243,10 +243,6 @@ public class FightTeam {
broadcast(player -> FightSystem.getMessage().send(message, player, params));
}
public void broadcastChat(Player sender, String message) {
broadcast(player -> FightSystem.getMessage().sendPrefixless("TEAM_CHAT", player, ChatMessageType.CHAT, prefix, sender.getName(), message));
}
private void broadcast(Consumer<Player> f) {
players.forEach((uuid, fightPlayer) -> {
Player player = Bukkit.getPlayer(uuid);
@@ -19,50 +19,41 @@
package de.steamwar.fightsystem.listener;
import de.steamwar.fightsystem.ArenaMode;
import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.FightSystem;
import de.steamwar.fightsystem.fight.Fight;
import de.steamwar.fightsystem.fight.FightTeam;
import de.steamwar.fightsystem.record.GlobalRecorder;
import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentListener;
import de.steamwar.linkage.Linked;
import de.steamwar.network.packets.PacketHandler;
import de.steamwar.network.packets.server.ChatRecordPacket;
import de.steamwar.sql.SteamwarUser;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import java.util.logging.Level;
/**
* Chat is handled by Velocity. Messages written on this server are only sent here to be recorded for the replay.
*/
@Linked
public class Chat implements Listener {
public class Chat extends PacketHandler {
public Chat(){
new StateDependentListener(ArenaMode.All, FightState.All, this);
}
@Handler
public void handleChatRecord(ChatRecordPacket packet) {
SteamwarUser user = SteamwarUser.byId(packet.getPlayerId());
String message = packet.getMessage();
FightSystem.getPlugin().getLogger().log(Level.INFO, user.getUserName() + "» " + message);
@EventHandler
public void handlePlayerChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
String message = event.getMessage();
FightSystem.getPlugin().getLogger().log(Level.INFO, player.getName() + "» " + message);
FightTeam fightTeam = Fight.getPlayerTeam(player);
if(fightTeam != null) {
String teamName = fightTeam.getColoredName();
if(message.startsWith(Config.GameModeConfig.TeamChatPrefix)) {
fightTeam.broadcastChat(player, message.substring(1));
} else {
broadcastChat("PARTICIPANT_CHAT", teamName, player.getName(), message);
}
}else if(Config.isReferee(player)){
broadcastChat("FIGHTLEADER_CHAT", player.getName(), message);
}else{
broadcastChat("SPECTATOR_CHAT", player.getName(), message);
Player player = Bukkit.getPlayer(user.getUUID());
FightTeam fightTeam = player != null ? Fight.getPlayerTeam(player) : null;
if (fightTeam != null) {
GlobalRecorder.getInstance().chat("PARTICIPANT_CHAT", fightTeam.getColoredName(), user.getUserName(), message);
} else if (player != null && Config.isReferee(player)) {
GlobalRecorder.getInstance().chat("FIGHTLEADER_CHAT", user.getUserName(), message);
} else {
GlobalRecorder.getInstance().chat("SPECTATOR_CHAT", user.getUserName(), message);
}
event.setCancelled(true);
}
public static void broadcastChat(String message, Object... params) {
@@ -36,7 +36,7 @@ public class REntity {
private static final Object entityStatusWatcher = BountifulWrapper.impl.getDataWatcherObject(0, Byte.class);
private static final Object sneakingDataWatcher = BountifulWrapper.impl.getDataWatcherObject(Core.getVersion() > 12 ? 6 : 0, FlatteningWrapper.impl.getPose(FlatteningWrapper.EntityPose.NORMAL).getClass());
private static final Object bowDrawnWatcher = Core.getVersion() >= 21 ? BountifulWrapper.impl.getDataWatcherObject(6, FlatteningWrapper.impl.getPose(FlatteningWrapper.EntityPose.NORMAL).getClass()) : BountifulWrapper.impl.getDataWatcherObject(Core.getVersion() > 12 ? 7 : 6, Byte.class);
private static final Object bowDrawnWatcher = Core.getVersion() >= 21 ? BountifulWrapper.impl.getDataWatcherObject(6, FlatteningWrapper.impl.getPose(FlatteningWrapper.EntityPose.NORMAL).getClass()) : BountifulWrapper.impl.getDataWatcherObject(Core.getVersion() >= 17 ? 8 : (Core.getVersion() > 12 ? 7 : 6), Byte.class);
private static final Object nameWatcher = BountifulWrapper.impl.getDataWatcherObject(2, Core.getVersion() > 12 ? Optional.class : String.class); // Optional<IChatBaseComponent>
private static final Object nameVisibleWatcher = BountifulWrapper.impl.getDataWatcherObject(3, Boolean.class);
-6
View File
@@ -251,11 +251,5 @@ include("TowerRun")
include("TutorialSystem")
include(
"VelocityCore",
"VelocityCore:Dependencies",
"VelocityCore:Persistent"
)
include("TNTLeague")
include("WebsiteBackend")