From 820e7fcbb240ef21cbe445072042e7019d950bb4 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Wed, 17 Jul 2024 14:19:19 +0200 Subject: [PATCH] Add NoGravityCommand --- BauSystem_Main/src/BauSystem.properties | 6 ++ BauSystem_Main/src/BauSystem_de.properties | 3 + .../features/region/NoGravityCommand.java | 66 +++++++++++++++++++ .../features/region/NoGravityListener.java | 64 ++++++++++++++++++ .../steamwar/bausystem/region/flags/Flag.java | 1 + .../flags/flagvalues/NoGravityMode.java | 60 +++++++++++++++++ 6 files changed, 200 insertions(+) create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/region/NoGravityCommand.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/features/region/NoGravityListener.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/region/flags/flagvalues/NoGravityMode.java diff --git a/BauSystem_Main/src/BauSystem.properties b/BauSystem_Main/src/BauSystem.properties index af8e45eb..951bcb3e 100644 --- a/BauSystem_Main/src/BauSystem.properties +++ b/BauSystem_Main/src/BauSystem.properties @@ -48,6 +48,7 @@ FLAG_FIRE=Fire FLAG_FREEZE=Freeze FLAG_PROTECT=Protect FLAG_ITEMS=Items +FLAG_NO_GRAVITY = No Gravity FLAG_TESTBLOCK=Testblock FLAG_CHANGED=Changed FLAG_FIRE_ALLOW=§con @@ -56,6 +57,8 @@ FLAG_FREEZE_ACTIVE=§aon FLAG_FREEZE_INACTIVE=§coff FLAG_PROTECT_ACTIVE=§aon FLAG_PROTECT_INACTIVE=§coff +FLAG_NO_GRAVITY_ACTIVE = §aon +FLAG_NO_GRAVITY_INACTIVE = §coff FLAG_TNT_ALLOW=§aon FLAG_TNT_DENY=§coff FLAG_TNT_ONLY_TB=§7no §ebuild area @@ -747,6 +750,9 @@ REGION_PROTECT_HELP=§8/§eprotect §8- §7Protect the region REGION_PROTECT_DISABLE=§cProtection disabled REGION_PROTECT_ENABLE=§aProtection enabled REGION_PROTECT_FALSE_REGION=§cYou are not currently in a (M)WG-region +REGION_NO_GRAVITY_HELP = §8/§enogravity §8- §7Toggle NoGravity +REGION_NO_GRAVITY_ENABLED = §aNoGravity enabled in this region +REGION_NO_GRAVITY_DISABLED = §cNoGravity disabled in this region REGION_REGION_HELP_UNDO=§8/§eregion undo §8- §7undo the last 20 /testblock or /reset REGION_REGION_HELP_REDO=§8/§eregion redo §8- §7redo the last 20 §8/§7rg undo REGION_REGION_HELP_RESTORE=§8/§eregion restore §8- §7Resets the region, without removing your builds diff --git a/BauSystem_Main/src/BauSystem_de.properties b/BauSystem_Main/src/BauSystem_de.properties index c1594f58..4a8335e9 100644 --- a/BauSystem_Main/src/BauSystem_de.properties +++ b/BauSystem_Main/src/BauSystem_de.properties @@ -698,6 +698,9 @@ REGION_PROTECT_HELP=§8/§eprotect §8- §7Schütze die Region REGION_PROTECT_DISABLE=§cBoden Schutz aufgehoben REGION_PROTECT_ENABLE=§aBoden geschützt REGION_PROTECT_FALSE_REGION=§cDu befindest dich derzeit in keiner (M)WG-Region +REGION_NO_GRAVITY_HELP = §8/§enogravity §8- §7Toggle NoGravity +REGION_NO_GRAVITY_ENABLED = §aNoGravity aktiviert in dieser Region +REGION_NO_GRAVITY_DISABLED = §cNoGravity deaktiviert in dieser Region REGION_REGION_HELP_UNDO=§8/§eregion undo §8- §7Mache die letzten 20 /testblock oder /reset rückgängig REGION_REGION_HELP_REDO=§8/§eregion redo §8- §7Wiederhole die letzten 20 §8/§7rg undo REGION_REGION_HELP_RESTORE=§8/§eregion restore §8- §7Setzte die Region zurück, ohne das Gebaute zu löschen diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/region/NoGravityCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/region/NoGravityCommand.java new file mode 100644 index 00000000..aeeaf588 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/region/NoGravityCommand.java @@ -0,0 +1,66 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 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 . + */ + +package de.steamwar.bausystem.features.region; + +import de.steamwar.bausystem.region.Region; +import de.steamwar.bausystem.region.RegionUtils; +import de.steamwar.bausystem.region.flags.Flag; +import de.steamwar.bausystem.region.flags.flagvalues.NoGravityMode; +import de.steamwar.command.SWCommand; +import de.steamwar.linkage.Linked; +import org.bukkit.entity.Player; + +@Linked +public class NoGravityCommand extends SWCommand { + + public NoGravityCommand() { + super("nogravity"); + } + + @Register(description = "REGION_NO_GRAVITY_HELP") + public void toggleCommand(@Validator Player p) { + Region region = Region.getRegion(p.getLocation()); + if (toggle(region)) { + RegionUtils.actionBar(region, getEnableMessage()); + } else { + RegionUtils.actionBar(region, getDisableMessage()); + } + } + + private String getEnableMessage() { + return "REGION_NO_GRAVITY_ENABLED"; + } + + private String getDisableMessage() { + return "REGION_NO_GRAVITY_DISABLED"; + } + + private boolean toggle(Region region) { + switch (region.getPlain(Flag.NO_GRAVITY, NoGravityMode.class)) { + case ACTIVE: + region.set(Flag.NO_GRAVITY, NoGravityMode.INACTIVE); + return false; + default: + case INACTIVE: + region.set(Flag.NO_GRAVITY, NoGravityMode.ACTIVE); + return true; + } + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/region/NoGravityListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/region/NoGravityListener.java new file mode 100644 index 00000000..52e9fe91 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/region/NoGravityListener.java @@ -0,0 +1,64 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 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 . + */ + +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.flagvalues.NoGravityMode; +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.EntitySpawnEvent; + +@Linked +public class NoGravityListener implements Listener, ScoreboardElement { + + private static NoGravityMode getMode(Region region) { + return region.getPlain(Flag.NO_GRAVITY, NoGravityMode.class); + } + + @EventHandler + public void onEntitySpawn(EntitySpawnEvent event) { + if (event.getEntityType() != EntityType.PRIMED_TNT) return; + if (getMode(Region.getRegion(event.getLocation())) == NoGravityMode.ACTIVE) { + event.getEntity().setGravity(false); + } + } + + @Override + public ScoreboardGroup getGroup() { + return ScoreboardGroup.REGION; + } + + @Override + public int order() { + return 4; + } + + @Override + public String get(Region region, Player p) { + if (region.get(Flag.NO_GRAVITY) == Flag.NO_GRAVITY.getDefaultValue()) return null; + return "§e" + BauSystem.MESSAGE.parse(Flag.NO_GRAVITY.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.get(Flag.NO_GRAVITY).getChatValue(), p); + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/flags/Flag.java b/BauSystem_Main/src/de/steamwar/bausystem/region/flags/Flag.java index 32a49387..d6bdf3e6 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/flags/Flag.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/flags/Flag.java @@ -35,6 +35,7 @@ public enum Flag implements EnumDisplay { FREEZE("FLAG_FREEZE", FreezeMode.class, FreezeMode.INACTIVE), PROTECT("FLAG_PROTECT", ProtectMode.class, ProtectMode.ACTIVE), ITEMS("FLAG_ITEMS", ItemMode.class, ItemMode.INACTIVE), + NO_GRAVITY("FLAG_NO_GRAVITY", NoGravityMode.class, NoGravityMode.INACTIVE), ; @Getter diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/flags/flagvalues/NoGravityMode.java b/BauSystem_Main/src/de/steamwar/bausystem/region/flags/flagvalues/NoGravityMode.java new file mode 100644 index 00000000..33368a35 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/flags/flagvalues/NoGravityMode.java @@ -0,0 +1,60 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2021 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 . + */ + +package de.steamwar.bausystem.region.flags.flagvalues; + +import de.steamwar.bausystem.region.flags.Flag; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum NoGravityMode implements Flag.Value { + + ACTIVE("FLAG_NO_GRAVITY_ACTIVE"), + INACTIVE("FLAG_NO_GRAVITY_INACTIVE"); + + private static NoGravityMode[] values; + private final String chatValue; + + @Override + public NoGravityMode[] getValues() { + if (NoGravityMode.values == null) { + NoGravityMode.values = NoGravityMode.values(); //NOSONAR + } + return NoGravityMode.values; + } + + @Override + public NoGravityMode getValue() { + return this; + } + + @Override + public NoGravityMode getValueOf(final String name) { + try { + return NoGravityMode.valueOf(name.toUpperCase()); + } catch (IllegalArgumentException e) { + if (name.equalsIgnoreCase("false")) { + return NoGravityMode.INACTIVE; + } + return NoGravityMode.ACTIVE; + } + } +}