Compare commits

...
38 Commits
Author SHA1 Message Date
Lixfel 32c85b9bd5 Merge pull request 'Add error handling and logging to Techhider and TinyProtocol' (#55) from techhider-debug-nachrichten into main
SteamWarCI Build successful
Reviewed-on: #55
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-04-29 18:13:00 +02:00
Chaoscaot 15bb92fbba Improve error handling and logging in Techhider and TinyProtocol
SteamWarCI Build successful
Refined logging messages for clarity by replacing "Techhider" with "PacketInterceptor" where appropriate. Adjusted error handling in `TechhiderbugCommand` by removing redundant `flush` calls and properly logging exceptions during bug report generation. These changes aim to enhance maintainability and debugging.
2025-04-29 18:04:58 +02:00
Chaoscaot d6a5caf95d Add error handling and logging to Techhider and TinyProtocol
SteamWarCI Build successful
2025-04-29 17:59:22 +02:00
Chaoscaot 66d18e316b Hotfix: Schematic Download geht für nicht Supervisor Player
SteamWarCI Build successful
2025-04-28 16:47:43 +02:00
Chaoscaot 5cdad8c2f4 Add Dev 1.21.5
SteamWarCI Build successful
2025-04-27 02:28:39 +02:00
YoyoNow 87a7120a6a Merge remote-tracking branch 'origin/main'
SteamWarCI Build successful
2025-04-26 23:57:03 +02:00
YoyoNow b5a9564808 Allow next next location in JumpAndRun 2025-04-26 23:56:59 +02:00
Chaoscaot f93362a023 LobbySystem/src/de/steamwar/lobby/jumpandrun/JumpAndRun.java aktualisiert
SteamWarCI Build successful
2025-04-26 23:48:33 +02:00
Chaoscaot b1bef4ced5 Add ErrorLogging for Bugged Schematics
SteamWarCI Build successful
2025-04-26 22:27:53 +02:00
Chaoscaot e7e1e2d968 Merge remote-tracking branch 'origin/main'
SteamWarCI Build successful
2025-04-26 22:17:50 +02:00
Chaoscaot 713275ba11 Add ErrorLogging for Bugged Schematics 2025-04-26 22:17:43 +02:00
Chaoscaot e72ae3cf94 LobbySystem/src/de/steamwar/lobby/jumpandrun/JumpAndRun.java aktualisiert
SteamWarCI Build successful
2025-04-26 22:13:31 +02:00
YoyoNow d36753dec1 Merge pull request 'Fixed meterstock' (#54) from BauSystem/fix-meterstock into main
SteamWarCI Build successful
Reviewed-on: #54
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-04-26 13:37:33 +02:00
D4rkr34lm 84cc292df4 Fixed meterstock
SteamWarCI Build successful
2025-04-26 13:08:13 +02:00
YoyoNow f89c4e88f9 Fix HotbarKit
SteamWarCI Build successful
Fix steamwar.devserver.gradle
Add WarGear20 to build.gradle.kts
2025-04-25 18:07:14 +02:00
YoyoNow a38f9222dd Merge remote-tracking branch 'origin/main'
SteamWarCI Build successful
2025-04-23 20:55:30 +02:00
YoyoNow 5ee9d3e167 Hotfix HotbarKit 2025-04-23 20:55:26 +02:00
YoyoNow 98321de46c Merge pull request 'Replace Jukeboxes with Lodestone in panzer sklave' (#50) from BauSystem/fix-panzersklave into main
SteamWarCI Build successful
Reviewed-on: #50
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-04-23 19:14:53 +02:00
D4rkr34lm 239ba3f213 made more readable
SteamWarCI Build successful
2025-04-23 19:14:44 +02:00
D4rkr34lm 3d7dedd3ad Fix jukeboxes in panzer sklave
SteamWarCI Build successful
2025-04-23 19:13:07 +02:00
YoyoNow ef66b8c1f1 Fix HotbarKit.onInventoryClick not resetting the cursor item
SteamWarCI Build successful
2025-04-23 18:28:58 +02:00
YoyoNow 1201b16ee4 Merge pull request 'Improve Server starter 'steamwar.devserver.gradle'' (#41) from ImprovedServerStarter into main
SteamWarCI Build successful
Reviewed-on: #41
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-04-23 18:16:39 +02:00
YoyoNow 4ddd88f540 Merge pull request 'Enable clicking 'Ready' in inventory' (#42) from FightSystem/HotbarKitInInv into main
SteamWarCI Build successful
Reviewed-on: #42
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-04-23 18:12:40 +02:00
YoyoNow ca35ab9234 Remove code Duplication HotbarKit
SteamWarCI Build successful
2025-04-20 20:41:47 +02:00
YoyoNow 3df84a7dad Update from PR
SteamWarCI Build successful
2025-04-20 20:40:19 +02:00
YoyoNow 83c20729fa Fix RAM usage on multiple usages
SteamWarCI Build successful
2025-04-20 08:27:56 +02:00
YoyoNow 925901e40e Fix steamwar.devserver.gradle 2025-04-20 08:27:56 +02:00
YoyoNow 059dd314d1 Fix building of DevServer 2025-04-20 08:27:56 +02:00
YoyoNow 86ff619548 Add FightServer to configure those 2025-04-20 08:27:56 +02:00
YoyoNow 76e00b07db Add plugins option to DevServer Task 2025-04-20 08:27:56 +02:00
YoyoNow 4edfd32ff5 Add a check if the template exists in the user.home directory 2025-04-20 08:27:56 +02:00
YoyoNow 5669725f9b Fix dev.py path 2025-04-20 08:27:56 +02:00
YoyoNow 335649fa87 Fix steamwar.devserver.gradle 2025-04-20 08:27:56 +02:00
YoyoNow 9001e83321 Add steamwar.properties 'worldName' and 'host'
Remove some options
2025-04-20 08:27:56 +02:00
YoyoNow 32703c6659 Enable Velocity, prio Setup needed for that 2025-04-20 08:27:56 +02:00
YoyoNow e393aad25f Add all parameters that dev.py has 2025-04-20 08:27:56 +02:00
YoyoNow 50543ddd4e Improve Server starter 'steamwar.devserver.gradle'
See build.gradle.kts of BauSystem
2025-04-20 08:27:56 +02:00
YoyoNow ae7d394ae2 Enable clicking 'Ready' in inventory
SteamWarCI Build successful
2025-04-17 15:45:25 +02:00
13 changed files with 347 additions and 24 deletions
@@ -226,7 +226,7 @@ public class FreezeListener implements Listener, ScoreboardElement {
}
}
@EventHandler(priority = EventPriority.MONITOR)
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent e) {
if (Core.getVersion() < 19) return;
if (e.getPlayer().getInventory().getItemInMainHand().getType() == Material.DEBUG_STICK) return;
@@ -25,6 +25,7 @@ import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockTypes;
import de.steamwar.bausystem.utils.WorldEditUtils;
import de.steamwar.core.Core;
import lombok.Getter;
import lombok.SneakyThrows;
import org.bukkit.Location;
@@ -56,7 +57,7 @@ public class Panzern {
private BaseBlock blockType;
private BaseBlock slabType;
private static final BaseBlock jukeboxType = BlockTypes.JUKEBOX.getDefaultState().toBaseBlock();
private static final BaseBlock jukeboxType = (Core.getVersion() > 19 ? BlockTypes.get("lodestone"): BlockTypes.get("jukebox")).getDefaultState().toBaseBlock();
private static final BaseBlock cobwebType = BlockTypes.COBWEB.getDefaultState().toBaseBlock();
private static final BaseBlock airType = BlockTypes.AIR.getDefaultState().toBaseBlock();
@@ -179,7 +179,12 @@ public class SpectatorListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
if (event.getMessage().startsWith("/schem save") || event.getMessage().startsWith("//schem save") || event.getMessage().startsWith("/schematic save") || event.getMessage().startsWith("//schematic save")) {
if (event.getMessage().startsWith("/schem save") ||
event.getMessage().startsWith("//schem save") ||
event.getMessage().startsWith("/schematic save") ||
event.getMessage().startsWith("//schematic save") ||
event.getMessage().startsWith("/download") ||
event.getMessage().startsWith("//download")) {
if (!Permission.SUPERVISOR.hasPermission(event.getPlayer())) {
event.setCancelled(true);
event.setMessage("/");
+16
View File
@@ -34,3 +34,19 @@ dependencies {
implementation(project(":BauSystem:BauSystem_20"))
implementation(project(":BauSystem:BauSystem_21"))
}
tasks.register<DevServer>("DevBau20") {
group = "run"
description = "Run a 1.20 Dev Bau"
dependsOn(":SpigotCore:shadowJar")
dependsOn(":BauSystem:shadowJar")
template = "Bau20"
}
tasks.register<DevServer>("DevBau21") {
group = "run"
description = "Run a 1.21 Dev Bau"
dependsOn(":SpigotCore:shadowJar")
dependsOn(":BauSystem:shadowJar")
template = "Bau21"
}
@@ -34,6 +34,7 @@ import org.bukkit.command.CommandSender;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.logging.Level;
public class TechhiderbugCommand implements CommandExecutor {
@@ -45,25 +46,33 @@ public class TechhiderbugCommand implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command cmd, String alias, String[] args) {
StringWriter writer = new StringWriter();
writer.append("ArenaMode: ").append(Config.mode.name()).append('\n');
writer.append("FightState: ").append(FightState.getFightState().name()).append('\n');
writer.append("TechHider enabled: ").append(FightState.getStateDependentFeatures().get(FightSystem.getTechHider()).toString()).append('\n');
try {
writer.append("ArenaMode: ").append(Config.mode.name()).append('\n');
writer.append("FightState: ").append(FightState.getFightState().name()).append('\n');
writer.append("TechHider enabled: ").append(FightState.getStateDependentFeatures().get(FightSystem.getTechHider()).toString()).append('\n');
writer.append("Arena region: ").append(Config.ArenaRegion.toString()).append('\n');
writer.append("Team regions: ");
Fight.teams().forEach(t -> writer.append(t.getName()).append(':').append(t.getExtendRegion().toString()).append(' '));
writer.append('\n');
writer.append("Arena region: ").append(Config.ArenaRegion.toString()).append('\n');
writer.append("Team regions: ");
Fight.teams().forEach(t -> writer.append(t.getName()).append(':').append(t.getExtendRegion().toString()).append(' '));
writer.append('\n');
writer.append("HullHider regions: ");
FightSystem.getHullHider().getHullMap().forEach((t, h) -> writer.append(t.getName()).append(':').append(h.getRegion().toString()).append(' '));
writer.append('\n');
writer.append("HullHider regions: ");
FightSystem.getHullHider().getHullMap().forEach((t, h) -> writer.append(t.getName()).append(':').append(h.getRegion().toString()).append(' '));
writer.append('\n');
writer.append("Hidden regions: ");
FightSystem.getTechHider().getHiddenRegion().forEach((p, r) -> writer.append(p.getName()).append(':').append(r.toString()).append(' '));
writer.append('\n');
writer.append("Hidden regions: ");
FightSystem.getTechHider().getHiddenRegion().forEach((p, r) -> writer.append(p.getName()).append(':').append(r.toString()).append(' '));
writer.append('\n');
writer.append('\n').append("Netty pipelines:\n");
Bukkit.getOnlinePlayers().forEach(p -> writer.append(p.getName()).append(": ").append(String.join(" ", TinyProtocol.instance.getPlayerInterceptors().get(p).getChannel().pipeline().names())).append('\n'));
writer.append("TinyProtocol: ");
writer.append(TinyProtocol.instance.toString()).append('\n');
writer.append('\n').append("Netty pipelines:\n");
Bukkit.getOnlinePlayers().forEach(p -> writer.append(p.getName()).append(": ").append(String.join(" ", TinyProtocol.instance.getPlayerInterceptors().get(p).getChannel().pipeline().names())).append('\n'));
} catch (Exception e) {
writer.append("Error while generating bug report: ").append(e.getMessage()).append('\n');
Bukkit.getLogger().log(Level.SEVERE, "Error while generating bug report", e);
}
SWException.log("Techhider-Bug reported by " + sender.getName() + ": " + Arrays.toString(args), writer.toString());
return false;
@@ -29,11 +29,15 @@ import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentListener;
import de.steamwar.fightsystem.states.StateDependentTask;
import de.steamwar.fightsystem.utils.ItemBuilder;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
@@ -107,6 +111,19 @@ public class HotbarKit extends Kit {
Player player = event.getPlayer();
int slot = player.getInventory().getHeldItemSlot();
click(player, slot, event);
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
int slot = event.getSlot();
if (slot < 0 || slot >= HOTBAR_SIZE) return;
Player player = (Player) event.getWhoClicked();
click(player, slot, event);
}
private void click(Player player, int slot, Cancellable event) {
Kit activeKit = activeKits.get(player);
if(!(activeKit instanceof HotbarKit) || PersonalKitCreator.inKitCreator(player) || activeKit.getInventory()[slot] == null)
return;
+10
View File
@@ -39,3 +39,13 @@ dependencies {
implementation(project(":FightSystem:FightSystem_20"))
implementation(project(":FightSystem:FightSystem_21"))
}
tasks.register<FightServer>("WarGear20") {
group = "run"
description = "Run a WarGear 1.20 Fight Server"
dependsOn(":SpigotCore:shadowJar")
dependsOn(":FightSystem:shadowJar")
template = "WarGear20"
worldName = "arenas/Pentraki"
config = "WarGear20.yml"
}
@@ -67,7 +67,7 @@ public class JumpAndRun extends BasicListener {
int count = CLICKED_COUNT.getOrDefault(player, -1);
if (count >= 0) {
if (count > 60) {
if (count > 20) {
toReset.add(player);
return;
}
@@ -104,12 +104,18 @@ public class JumpAndRun extends BasicListener {
return;
}
Vector point = points.get(index);
if (location.getY() < point.getY()) {
return;
}
if (location.toVector().distanceSquared(point) >= 12.25) {
if (location.getY() < point.getY()) index = -2;
if (location.toVector().distanceSquared(point) >= 17) index = -2;
if (index > 0 && index < points.size() - 1) {
Vector nextPoint = points.get(index + 1);
if (location.getY() >= nextPoint.getY() && location.toVector().distanceSquared(nextPoint) < 17) {
index = index + 1;
}
}
if (index == -2) {
return;
}
CURRENT_POS.put(event.getPlayer(), index);
event.getPlayer().playSound(event.getPlayer().getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 0.4F, 1);
if (index < points.size() - 1) {
@@ -71,6 +71,17 @@ public class TinyProtocol implements Listener {
@Getter
private final Map<Player, PacketInterceptor> playerInterceptors = new HashMap<>();
@Override
public String toString() {
return "TinyProtocol{" +
"plugin=" + plugin +
", connections=" + connections +
", closed=" + closed +
", packetFilters=" + packetFilters +
", playerInterceptors=" + playerInterceptors +
'}';
}
private TinyProtocol(final Plugin plugin) {
this.plugin = plugin;
this.connections = networkManagers.get(getServerConnection(plugin));
@@ -84,6 +95,7 @@ public class TinyProtocol implements Listener {
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerLogin(PlayerLoginEvent e) {
plugin.getLogger().info("Creating PacketInterceptor for: " + e.getPlayer().getName() + " (" + closed + ")");
if(closed)
return;
new PacketInterceptor(e.getPlayer());
@@ -118,6 +130,8 @@ public class TinyProtocol implements Listener {
}
public final void close() {
plugin.getLogger().log(Level.INFO, "Closing PacketInterceptor", new Exception("Stacktrace"));
if(closed)
return;
closed = true;
@@ -157,6 +171,7 @@ public class TinyProtocol implements Listener {
synchronized (playerInterceptors) {
playerInterceptors.put(player, this);
}
plugin.getLogger().info("Adding Techhider for: " + player.getName());
try {
channel.pipeline().addBefore("packet_handler", HANDLER_NAME, this);
+9 -1
View File
@@ -66,4 +66,12 @@ dependencies {
implementation(libs.apolloprotos)
implementation(libs.nbt)
}
}
tasks.register<DevServer>("DevVelocity") {
group = "run"
description = "Run a Dev Velocity"
dependsOn(":VelocityCore:shadowJar")
dependsOn(":VelocityCore:Persistent:jar")
template = "DevVelocity"
}
@@ -44,6 +44,7 @@ public enum ServerVersion {
PAPER_18("paper-1.18.2.jar", 15, ProtocolVersion.MINECRAFT_1_18_2),
PAPER_19("paper-1.19.3.jar", 19, ProtocolVersion.MINECRAFT_1_19_3),
PAPER_20("paper-1.20.1.jar", 20, ProtocolVersion.MINECRAFT_1_20),
DEVEL_21("paper-1.21.5.jar", 21, ProtocolVersion.MINECRAFT_1_21_5),
PAPER_21("paper-1.21.3.jar", 21, ProtocolVersion.MINECRAFT_1_21_2);
private static final Map<String, ServerVersion> chatMap = new HashMap<>();
@@ -94,6 +95,10 @@ public enum ServerVersion {
}
public static ServerVersion get(int version) {
if (version == 21) {
return DEVEL_21;
}
return versionMap.get(version);
}
@@ -149,6 +149,23 @@ fun Route.configureSchematic() {
return@let SchematicFormat.SPONGE_V2
}
if (version == SchematicFormat.SPONGE_V3) {
try {
val fawe = schem.getCompound("Metadata")
.getCompound("WorldEdit")
.getString("Version")
.value
if (fawe.equals("2.12.3-SNAPSHOT")) {
SWException.log("Schematic with Bugged Version Uploaded", """
Schematic=$schemName
User=${user.userName}
Id=${user.id}
""".trimIndent())
}
} catch (_: Exception) {}
}
val data = NodeData(node.id, version)
data.saveFromStream(content.inputStream(), version)
+214
View File
@@ -0,0 +1,214 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2020 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/>.
*/
plugins {
}
class DevServer extends DefaultTask {
@Input
@Optional
String worldName = null
@Input
String template = null
@Input
@Optional
String plugins = null
@Input
@Optional
Integer port = null
@Input
@Optional
String jar = null
@Input
@Optional
Map<String, String> dParams = new HashMap<>()
DevServer() {
super()
doFirst {
List<Project> projects = []
projects.add(project)
while (projects.first.parent != null) {
projects.add(0, projects.first.parent)
}
def properties = new Properties()
projects.forEach {
def file = new File(it.projectDir, "steamwar.properties")
if (file.exists()) {
properties.load(new FileInputStream(file))
}
}
if (worldName == null) worldName = properties.get("worldName")
host = properties.get("host")
if (host == null) {
throw new GradleException("Please supply the 'host' in a 'steamwar.properties' files either in this project dir or any parent project!")
}
}
doLast {
checkHasTemplate()
uploadDependencies()
startDevServer()
}
finalizedBy(new Finalizer())
}
@Internal
BufferedWriter processInput
@Internal
String host
@Internal
Boolean running = true
class Finalizer extends DefaultTask {
Finalizer() {
super()
doLast {
running = false
if (processInput != null) {
processInput.write(template.endsWith("Velocity") ? "end\n" : "stop\n")
processInput.flush()
}
}
}
}
void checkHasTemplate() {
def process = new ProcessBuilder("ssh", host, "-T", "ls $template").start()
process.waitFor()
if (new BufferedReader(new InputStreamReader(process.inputStream)).lines().count() < 4) {
throw new GradleException("Used template is not in your user.home directory of the given host $host")
}
}
void uploadDependencies() {
def base = plugins == null ? "$template/plugins" : plugins
println("Uploading to ~/$base")
this.dependsOn.forEach {
Project resolved
AbstractArchiveTask archiveTask
if (it instanceof String) {
resolved = project.findProject(it.substring(0, it.lastIndexOf(':')))
archiveTask = (AbstractArchiveTask) resolved.tasks.findByName(it.substring(it.lastIndexOf(':') + 1))
} else {
throw new GradleException("Illegal argument for uploading dependencies")
}
def archive = archiveTask.archiveFile.get().asFile
println("Uploading $archive")
new ProcessBuilder("ssh", host, "-T", "rm $base/${archive.name.replace("-all", "")}").start().waitFor()
new ProcessBuilder("scp", archive.absolutePath, "$host:~/$base/${archive.name.replace("-all", "")}").start().waitFor()
println("Uploaded $archive")
}
}
void startDevServer() {
def devPy = new StringBuilder().append("dev.py")
if (port != null) devPy.append(" --port $port")
if (worldName != null) devPy.append(" -w $template/$worldName")
if (plugins != null) devPy.append(" -p $plugins")
if (jar != null) devPy.append(" --jar $jar")
for (Map.Entry<String, String> dParam : dParams.entrySet()) {
devPy.append(" -D${dParam.key}=${dParam.value}")
}
devPy.append(" $template")
println("Starting $template with command ${devPy.toString()}")
def process = new ProcessBuilder("ssh", host, "-T", devPy.toString()).start()
def processOutput = new BufferedReader(new InputStreamReader(process.inputStream))
new Thread({
while (running) {
if (processOutput.ready()) {
println(processOutput.readLine())
}
}
}).start()
processInput = new BufferedWriter(new OutputStreamWriter(process.outputStream))
def input = new BufferedReader(new InputStreamReader(System.in))
new Thread({
while (running) {
def text = input.readLine()
if (text == null) break
processInput.write(text)
processInput.newLine()
processInput.flush()
}
}).start()
process.waitFor()
processInput = null
running = false
}
}
class FightServer extends DevServer {
@Input
@Optional
Integer checkSchemID = 0
@Input
@Optional
Integer prepareSchemID = 0
@Input
@Optional
Integer replay = 0
@Input
@Optional
String config = null
@Input
@Optional
// Property: fightID
Integer eventKampfID = 0
@Input
@Optional
UUID blueLeader = null
@Input
@Optional
UUID redLeader = null
FightServer() {
super()
doFirst {
if (checkSchemID != 0) dParams.put("checkSchemID", "$checkSchemID")
if (prepareSchemID != 0) dParams.put("prepareSchemID", "$prepareSchemID")
if (replay != 0) dParams.put("replay", "$replay")
if (eventKampfID != 0) dParams.put("fightID", "$eventKampfID")
if (blueLeader != null) dParams.put("blueLeader", blueLeader.toString())
if (redLeader != null) dParams.put("redLeader", redLeader.toString())
if (config != null) dParams.put("config", config)
}
}
}