add WindChargeInteractFlag

This commit is contained in:
2026-11-01 10:28:16 +01:00
parent bfbf98c1d6
commit 1c2f9b922f
10 changed files with 190 additions and 6 deletions
@@ -52,6 +52,7 @@ FLAG_ITEMS = Items
FLAG_NO_GRAVITY = No Gravity
FLAG_TESTBLOCK = Testblock
FLAG_CHANGED = Changed
FLAG_WINDCHARGE = Windcharge
FLAG_WATER_DESTROY = Water Destroy
FLAG_WATER_DESTROY_ALLOW = §coff
FLAG_WATER_DESTROY_DENY = §aon
@@ -92,6 +93,9 @@ FLAG_TESTBLOCK_NORTH = §eNorth
FLAG_TESTBLOCK_SOUTH = §eSouth
FLAG_CHANGED_NO_CHANGE = §cNo
FLAG_CHANGED_HAS_CHANGE = §aYes
FLAG_WINDCHARGE_ALLOW = §aon
FLAG_WINDCHARGE_DENY = §coff
FLAG_WINDCHARGE_NO_INTERACT = §7no §8windcharge interact
# Region
REGION_TYPE_NORMAL = Normal
REGION_TYPE_BUILD = Build area
@@ -827,6 +831,8 @@ REGION_TNT_OFF = §cTNT-Damage deactivated
REGION_TNT_TB = §aTNT-Damage activated outside the building area
REGION_TNT_BUILD_DESTROY = §cAn explosion would have destroyed blocks in the building area
REGION_TNT_TB_DESTROY = §cAn explosion would have destroyed blocks in the testblock area
REGION_WINDCHARGE_HELP = §8/§ewindcharge §8[§7Mode§8] §8- §7Set WindCharge behaviour to a given mode
AFK_KICK_MESSAGE = §cNothing happened on this server for 15 minutes.
AFK_WARNING_MESSAGE = §cThis server will stop in one minute if you remain inactive
SKIN_HELP = §8/§eskin §8[§7Shortform§8] §8[§7Creator§8|§epublic§8] §8[§7Name...§8] §8- §7Creates the skin schematic. Use 'public' as creator to have no creator, then copy the message to YoyoNow by clicking
@@ -0,0 +1,23 @@
/*
* 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.bausystem.features.region;
public class ProjectieleStopperListener {
}
@@ -28,6 +28,7 @@ import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.linkage.Linked;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@@ -55,6 +56,7 @@ public class ProtectListener implements Listener, ScoreboardElement {
@EventHandler
public void onExplode(EntityExplodeEvent event) {
if (event.getEntityType() == EntityType.WIND_CHARGE) return;
explode(event.blockList(), event.getLocation());
}
@@ -0,0 +1,44 @@
/*
* 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.bausystem.features.region;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.WindChargeInteractMode;
import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player;
@Linked
public class WindChargeInteractModeCommand extends SWCommand {
public WindChargeInteractModeCommand() {
super("windcharge");
}
@Register(description = "REGION_WINDCHARGE_HELP")
public void toggleCommand(@Validator Player p) {
Region region = Region.getRegion(p.getLocation());
if (region.getRegionData().get(Flag.WIND_CHARGE_INTERACT).get() == WindChargeInteractMode.DENY) {
region.getRegionData().set(Flag.WIND_CHARGE_INTERACT, WindChargeInteractMode.ALLOW);
} else {
region.getRegionData().set(Flag.WIND_CHARGE_INTERACT, WindChargeInteractMode.DENY);
}
}
}
@@ -0,0 +1,57 @@
/*
* 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.bausystem.features.region;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.WindChargeInteractMode;
import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityExplodeEvent;
@Linked
public class WindChargeInteractModeListener implements Listener, ScoreboardElement {
@EventHandler
public void onExplode(EntityExplodeEvent event) {
if (event.getEntityType() != EntityType.WIND_CHARGE) return;
Region region = Region.getRegion(event.getLocation());
if (region.getRegionData().get(Flag.WIND_CHARGE_INTERACT).getWithDefault() != WindChargeInteractMode.DENY) event.blockList().clear();
}
@Override
public ScoreboardGroup getGroup() {
return ScoreboardGroup.REGION;
}
@Override
public int order() {
return 2;
}
@Override
public String get(Region region, Player p) {
//if (region.getRegionData().get(Flag.WIND_CHARGE).is(WindChargeMode.ALLOW)) return null;
return "§e" + BauSystem.MESSAGE.parse(Flag.WIND_CHARGE_INTERACT.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.getRegionData().get(Flag.WIND_CHARGE_INTERACT).getWithDefault().getChatValue(), p);
}
}
@@ -44,6 +44,7 @@ public final class Flag<T extends Enum<T> & Flag.Value<T>> implements EnumDispla
public static final Flag<TestblockMode> TESTBLOCK = new Flag<>("TESTBLOCK", "FLAG_TESTBLOCK", TestblockMode.class, TestblockMode.NO_VALUE);
public static final Flag<ChangedMode> CHANGED = new Flag<>("CHANGED", "FLAG_CHANGED", ChangedMode.class, ChangedMode.NO_CHANGE);
public static final Flag<WaterDestroyMode> WATER_DESTROY = new Flag<>("WATER_DESTROY", "FLAG_WATER_DESTROY", WaterDestroyMode.class, WaterDestroyMode.ALLOW);
public static final Flag<WindChargeInteractMode> WIND_CHARGE_INTERACT = new Flag<>("WINDCHARGE_INTERACT", "FLAG_WINDCHARGE_INTERACT", WindChargeInteractMode.class, WindChargeInteractMode.ALLOW);
private String name;
private int ordinal;
@@ -0,0 +1,53 @@
/*
* 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.bausystem.region.flags;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum WindChargeInteractMode implements Flag.Value<WindChargeInteractMode> {
ALLOW("FLAG_WINDCHARGE_ALLOW"),
DENY("FLAG_WINDCHARGE_DENY");
private static WindChargeInteractMode[] values;
private final String chatValue;
@Override
public WindChargeInteractMode[] getValues() {
return WindChargeInteractMode.values();
}
@Override
public WindChargeInteractMode getValue() {
return this;
}
@Override
public WindChargeInteractMode getValueOf(final String name) {
try {
return WindChargeInteractMode.valueOf(name.toUpperCase());
} catch (IllegalArgumentException e) {
return WindChargeInteractMode.ALLOW;
}
}
}
@@ -21,10 +21,7 @@ package de.steamwar.bausystem.region.fixed;
import de.steamwar.bausystem.region.RegionData;
import de.steamwar.bausystem.region.RegionFlagPolicy;
import de.steamwar.bausystem.region.flags.ColorMode;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.ProtectMode;
import de.steamwar.bausystem.region.flags.TNTMode;
import de.steamwar.bausystem.region.flags.*;
import de.steamwar.bausystem.worlddata.WorldData;
import lombok.NonNull;
@@ -39,6 +36,7 @@ public class FixedGlobalRegionData extends RegionData {
flagMap.put(Flag.TNT, TNTMode.DENY);
flagMap.put(Flag.COLOR, ColorMode.YELLOW);
flagMap.put(Flag.PROTECT, ProtectMode.INACTIVE);
flagMap.put(Flag.WIND_CHARGE_INTERACT, WindChargeInteractMode.ALLOW);
}
@Override
@@ -33,7 +33,7 @@ public class FixedRegionData extends RegionData {
@Override
public @NonNull <T extends Enum<T> & Flag.Value<T>> RegionFlagPolicy has(@NonNull Flag<T> flag) {
if (flag.oneOf(Flag.COLOR, Flag.TNT, Flag.FIRE, Flag.FREEZE, Flag.PROTECT, Flag.NO_GRAVITY, Flag.CHANGED, Flag.WATER_DESTROY)) {
if (flag.oneOf(Flag.COLOR, Flag.TNT, Flag.FIRE, Flag.FREEZE, Flag.PROTECT, Flag.NO_GRAVITY, Flag.CHANGED, Flag.WATER_DESTROY, Flag.WIND_CHARGE_INTERACT)) {
return RegionFlagPolicy.WRITABLE;
}
if (flag.oneOf(Flag.ITEMS)) {
@@ -108,7 +108,7 @@ public class WaterRemover implements Listener {
//checks for water and removes it, if present
boolean result = true;
Material type = b.getType();
if (type == Material.WATER || type == Material.LAVA) {
if (type == Material.WATER || type == Material.LAVA || type == Material.BUBBLE_COLUMN) {
b.setType(Material.AIR);
} else {
BlockData data = b.getBlockData();