diff --git a/pom.xml b/pom.xml
index f3522065..006e8c11 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,10 +7,10 @@
com.github.civclassic
civclassic-parent
- 1.0.0
+ 1.0.1
- vg.civcraft.mc.citadel
+ com.github.civclassic
Citadel
jar
4.2.0
@@ -19,27 +19,27 @@
- com.destroystokyo.paper
- paper-api
- 1.16.4-R0.1-SNAPSHOT
+ io.papermc.paper
+ paper
+ 1.17.1-R0.1-SNAPSHOT
provided
- vg.civcraft.mc.civmodcore
+ com.github.civclassic
CivModCore
- 1.8.2
+ 1.9.0
provided
- vg.civcraft.mc.namelayer
+ com.github.civclassic
NameLayer
- 2.14.1
+ 2.15.0
provided
com.gmail.filoghost.holographicdisplays
holographicdisplays-api
- 2.4.5
+ 2.4.8
provided
@@ -49,6 +49,10 @@
codemc-repo
https://repo.codemc.io/repository/maven-public/
+
+ papermc
+ https://papermc.io/repo/repository/maven-public/
+
civ-github-repo
https://raw.githubusercontent.com/CivClassic/artifacts/master/
diff --git a/src/main/java/vg/civcraft/mc/citadel/Citadel.java b/src/main/java/vg/civcraft/mc/citadel/Citadel.java
index b092dba2..78fde2dd 100644
--- a/src/main/java/vg/civcraft/mc/citadel/Citadel.java
+++ b/src/main/java/vg/civcraft/mc/citadel/Citadel.java
@@ -3,6 +3,7 @@
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.event.HandlerList;
+import vg.civcraft.mc.citadel.command.CitadelCommandManager;
import vg.civcraft.mc.citadel.listener.BlockListener;
import vg.civcraft.mc.citadel.listener.EntityListener;
import vg.civcraft.mc.citadel.listener.InventoryListener;
@@ -17,10 +18,10 @@
import vg.civcraft.mc.citadel.playerstate.PlayerStateManager;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementTypeManager;
import vg.civcraft.mc.civmodcore.ACivMod;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.api.BlockBasedChunkMetaView;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.api.ChunkMetaAPI;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableBasedDataObject;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableStorageEngine;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.api.BlockBasedChunkMetaView;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.api.ChunkMetaAPI;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedDataObject;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableStorageEngine;
public class Citadel extends ACivMod {
@@ -38,6 +39,7 @@ public static Citadel getInstance() {
private HologramManager holoManager;
private CitadelSettingManager settingManager;
private CitadelDAO dao;
+ private CitadelCommandManager commandManager;
private PlayerStateManager stateManager;
@@ -114,7 +116,7 @@ public void onEnable() {
Bukkit.shutdown();
return;
}
- BlockBasedChunkMetaView> chunkMetaData =
+ BlockBasedChunkMetaView> chunkMetaData =
ChunkMetaAPI.registerBlockBasedPlugin(this, () -> new CitadelChunkData(false, dao),dao, true);
if (chunkMetaData == null) {
logger.severe("Errors setting up chunk metadata API, shutting down");
@@ -133,6 +135,7 @@ public void onEnable() {
else {
logger.info("HolographicDisplays is not loaded, no holograms available");
}});
+ commandManager = new CitadelCommandManager(this);
CitadelPermissionHandler.setup();
registerListeners();
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java
index b64d2deb..730f6d5d 100644
--- a/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java
+++ b/src/main/java/vg/civcraft/mc/citadel/CitadelConfigManager.java
@@ -10,12 +10,13 @@
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementEffect;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType;
import vg.civcraft.mc.civmodcore.ACivMod;
-import vg.civcraft.mc.civmodcore.CoreConfigManager;
+import vg.civcraft.mc.civmodcore.config.ConfigHelper;
+import vg.civcraft.mc.civmodcore.config.ConfigParser;
+import vg.civcraft.mc.civmodcore.dao.DatabaseCredentials;
import vg.civcraft.mc.civmodcore.dao.ManagedDatasource;
-import vg.civcraft.mc.civmodcore.util.ConfigParsing;
-import vg.civcraft.mc.civmodcore.util.TextUtil;
+import vg.civcraft.mc.civmodcore.utilities.TextUtil;
-public class CitadelConfigManager extends CoreConfigManager {
+public class CitadelConfigManager extends ConfigParser {
private ManagedDatasource database;
private List reinforcementTypes;
@@ -106,7 +107,7 @@ public boolean logMessages() {
}
private void parseAcidMaterials(ConfigurationSection config) {
- acidMaterials = parseMaterialList(config, "acidblock_material");
+ acidMaterials = ConfigHelper.parseMaterialList(config, "acidblock_material");
if (acidMaterials == null) {
logger.info("No valid acid materials found in config");
acidMaterials = new LinkedList<>();
@@ -118,8 +119,8 @@ private void parseAcidMaterials(ConfigurationSection config) {
@Override
protected boolean parseInternal(ConfigurationSection config) {
- database = (ManagedDatasource) config.get("database");
- globalBlackList = parseMaterialList(config, "non_reinforceables");
+ database = ManagedDatasource.construct((ACivMod) plugin, (DatabaseCredentials) config.get("database"));
+ globalBlackList = ConfigHelper.parseMaterialList(config, "non_reinforceables");
parseAcidMaterials(config);
logHostileBreaks = config.getBoolean("logHostileBreaks", true);
logFriendlyBreaks = config.getBoolean("logFriendlyBreaks", true);
@@ -128,7 +129,7 @@ protected boolean parseInternal(ConfigurationSection config) {
logMessages = config.getBoolean("logMessages", true);
redstoneRange = config.getDouble("redstoneDistance", 3);
globalDecayMultiplier = config.getDouble("global_decay_multiplier", 2.0);
- globalDecayTimer = ConfigParsing.parseTime(config.getString("global_decay_timer", "0"));
+ globalDecayTimer = ConfigHelper.parseTime(config.getString("global_decay_timer", "0"));
parseReinforcementTypes(config.getConfigurationSection("reinforcements"));
hangersInheritReinforcements = config.getBoolean("hangers_inherit_reinforcement", false);
return true;
@@ -145,18 +146,18 @@ private ReinforcementType parseReinforcementType(ConfigurationSection config) {
ReinforcementEffect damageEffect = getReinforcementEffect(config.getConfigurationSection("damage_effect"));
ReinforcementEffect destructionEffect = getReinforcementEffect(
config.getConfigurationSection("destruction_effect"));
- long gracePeriod = ConfigParsing.parseTime(config.getString("grace_period", "0"), TimeUnit.MILLISECONDS);
- long maturationTime = ConfigParsing.parseTime(config.getString("mature_time", "0"), TimeUnit.MILLISECONDS);
- long acidTime = ConfigParsing.parseTime(config.getString("acid_time", "-1"), TimeUnit.MILLISECONDS);
+ long gracePeriod = ConfigHelper.parseTime(config.getString("grace_period", "0"), TimeUnit.MILLISECONDS);
+ long maturationTime = ConfigHelper.parseTime(config.getString("mature_time", "0"), TimeUnit.MILLISECONDS);
+ long acidTime = ConfigHelper.parseTime(config.getString("acid_time", "-1"), TimeUnit.MILLISECONDS);
int acidPriority = config.getInt("acid_priority", 0);
String name = config.getString("name");
double maturationScale = config.getInt("scale_amount", 1);
float health = (float) config.getDouble("hit_points", 100);
double returnChance = config.getDouble("return_chance", 1.0);
- List reinforceables = parseMaterialList(config, "reinforceables");
- List nonReinforceables = parseMaterialList(config, "non_reinforceables");
+ List reinforceables = ConfigHelper.parseMaterialList(config, "reinforceables");
+ List nonReinforceables = ConfigHelper.parseMaterialList(config, "non_reinforceables");
short id = (short) config.getInt("id", -1);
- long decayTimer = ConfigParsing
+ long decayTimer = ConfigHelper
.parseTime(config.getString("decay_timer", String.valueOf(globalDecayTimer / 1000L) + "s"));
double decayMultiplier = config.getDouble("decay_multiplier", globalDecayMultiplier);
double multiplerOnDeletedGroup = config.getDouble("deleted_group_multipler", 4);
@@ -169,7 +170,7 @@ private ReinforcementType parseReinforcementType(ConfigurationSection config) {
logger.warning("Reinforcement type at " + config.getCurrentPath() + " had no id, it was ignored");
return null;
}
- if (reinforceables != null && nonReinforceables != null) {
+ if (!reinforceables.isEmpty() && !nonReinforceables.isEmpty()) {
logger.warning("Both blacklist and whitelist specified for reinforcement type at " + config.getCurrentPath()
+ ". This does not make sense and the type will be ignored");
return null;
diff --git a/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java b/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java
index c5ca9440..eb25b027 100644
--- a/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java
+++ b/src/main/java/vg/civcraft/mc/citadel/CitadelUtility.java
@@ -12,7 +12,7 @@
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.model.Reinforcement;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType;
-import vg.civcraft.mc.civmodcore.itemHandling.ItemMap;
+import vg.civcraft.mc.civmodcore.inventory.items.ItemMap;
import vg.civcraft.mc.namelayer.NameAPI;
import vg.civcraft.mc.namelayer.group.Group;
@@ -43,6 +43,7 @@ public static boolean isPlant(Block plant) {
case JUNGLE_SAPLING:
case OAK_SAPLING:
case SPRUCE_SAPLING:
+ case FLOWERING_AZALEA:
case WHEAT:
case CARROTS:
case POTATOES:
@@ -65,6 +66,11 @@ public static boolean isPlant(Block plant) {
case WEEPING_VINES_PLANT:
case KELP:
case KELP_PLANT:
+ case BIG_DRIPLEAF:
+ case BIG_DRIPLEAF_STEM:
+ case CAVE_VINES:
+ case CAVE_VINES_PLANT:
+ case SMALL_DRIPLEAF:
case SWEET_BERRY_BUSH:
case BAMBOO:
case BAMBOO_SAPLING:
diff --git a/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java b/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java
index 684fc0ee..3d6e1160 100644
--- a/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java
+++ b/src/main/java/vg/civcraft/mc/citadel/ReinforcementLogic.java
@@ -6,9 +6,11 @@
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.type.AmethystCluster;
import org.bukkit.block.data.type.Bed;
import org.bukkit.block.data.type.Chest;
import org.bukkit.block.data.type.CoralWallFan;
+import org.bukkit.block.data.type.PointedDripstone;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.InventoryHolder;
@@ -172,6 +174,7 @@ public static Block getResponsibleBlock(Block block) {
case WARPED_FUNGUS:
case CRIMSON_FUNGUS:
case BAMBOO_SAPLING:
+ case FLOWERING_AZALEA:
case WHEAT:
case CARROTS:
case POTATOES:
@@ -212,21 +215,15 @@ public static Block getResponsibleBlock(Block block) {
case DEAD_FIRE_CORAL_FAN:
case DEAD_HORN_CORAL:
case DEAD_HORN_CORAL_FAN:
+ case SMALL_DRIPLEAF:
case NETHER_WART: {
return block.getRelative(BlockFace.DOWN);
}
- case TWISTING_VINES: {
- // scan downwards for first different block
- Block below = block.getRelative(BlockFace.DOWN);
- while (below.getType() == block.getType() || below.getType() == Material.TWISTING_VINES_PLANT) {
- below = below.getRelative(BlockFace.DOWN);
- }
- return below;
- }
case SUGAR_CANE:
case BAMBOO:
case ROSE_BUSH:
case TWISTING_VINES_PLANT:
+ case BIG_DRIPLEAF_STEM:
case CACTUS:
case SUNFLOWER:
case LILAC:
@@ -242,6 +239,10 @@ public static Block getResponsibleBlock(Block block) {
}
return below;
}
+ case SPORE_BLOSSOM:
+ case HANGING_ROOTS: {
+ return block.getRelative(BlockFace.UP);
+ }
case ACACIA_DOOR:
case BIRCH_DOOR:
case DARK_OAK_DOOR:
@@ -292,6 +293,12 @@ public static Block getResponsibleBlock(Block block) {
CoralWallFan cwf = (CoralWallFan) block.getBlockData();
return block.getRelative(cwf.getFacing().getOppositeFace());
}
+ case SMALL_AMETHYST_BUD:
+ case MEDIUM_AMETHYST_BUD:
+ case LARGE_AMETHYST_BUD: {
+ AmethystCluster amethyst = (AmethystCluster) block.getBlockData();
+ return block.getRelative(amethyst.getFacing().getOppositeFace());
+ }
case WEEPING_VINES: {
// scan upwards
Block above = block.getRelative(BlockFace.UP);
@@ -300,14 +307,46 @@ public static Block getResponsibleBlock(Block block) {
}
return above;
}
+ case CAVE_VINES: {
+ // scan upwards for first different block
+ Block above = block.getRelative(BlockFace.UP);
+ while (above.getType() == block.getType() || above.getType() == Material.CAVE_VINES_PLANT) {
+ above = above.getRelative(BlockFace.UP);
+ }
+ return above;
+ }
+ case CAVE_VINES_PLANT:
case WEEPING_VINES_PLANT: {
- // scan upwards
+ // scan upwards for first different block
Block above = block.getRelative(BlockFace.UP);
while (above.getType() == block.getType()) {
above = above.getRelative(BlockFace.UP);
}
return above;
}
+ case TWISTING_VINES: {
+ // scan downwards for first different block
+ Block below = block.getRelative(BlockFace.DOWN);
+ while (below.getType() == block.getType() || below.getType() == Material.TWISTING_VINES_PLANT) {
+ below = below.getRelative(BlockFace.DOWN);
+ }
+ return below;
+ }
+ case BIG_DRIPLEAF: {
+ // scan downwards for first different block
+ Block below = block.getRelative(BlockFace.DOWN);
+ while (below.getType() == block.getType() || below.getType() == Material.BIG_DRIPLEAF_STEM) {
+ below = below.getRelative(BlockFace.DOWN);
+ }
+ return below;
+ }
+ case POINTED_DRIPSTONE:
+ PointedDripstone dripstone = (PointedDripstone) block.getBlockData();
+ Block direction = block.getRelative(dripstone.getVerticalDirection().getOppositeFace());
+ while (direction.getType() == block.getType()) {
+ direction = direction.getRelative(dripstone.getVerticalDirection().getOppositeFace());
+ }
+ return direction;
default: {
return block;
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/ReinforcementManager.java b/src/main/java/vg/civcraft/mc/citadel/ReinforcementManager.java
index acc40a44..6d5e50bb 100644
--- a/src/main/java/vg/civcraft/mc/citadel/ReinforcementManager.java
+++ b/src/main/java/vg/civcraft/mc/citadel/ReinforcementManager.java
@@ -4,9 +4,9 @@
import org.bukkit.block.Block;
import vg.civcraft.mc.citadel.model.CitadelChunkData;
import vg.civcraft.mc.citadel.model.Reinforcement;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.api.BlockBasedChunkMetaView;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableBasedDataObject;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableStorageEngine;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.api.BlockBasedChunkMetaView;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedDataObject;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableStorageEngine;
public class ReinforcementManager {
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Acid.java b/src/main/java/vg/civcraft/mc/citadel/command/Acid.java
index eaf837e8..0ca7d1d6 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/Acid.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/Acid.java
@@ -1,8 +1,9 @@
package vg.civcraft.mc.citadel.command;
-import java.util.ArrayList;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.Description;
import java.util.Iterator;
-import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import org.bukkit.Bukkit;
@@ -10,7 +11,6 @@
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Container;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.BlockIterator;
@@ -21,17 +21,14 @@
import vg.civcraft.mc.citadel.events.ReinforcementAcidBlockedEvent;
import vg.civcraft.mc.citadel.model.AcidManager;
import vg.civcraft.mc.citadel.model.Reinforcement;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
import vg.civcraft.mc.civmodcore.inventory.items.MaterialUtils;
-import vg.civcraft.mc.civmodcore.util.TextUtil;
+import vg.civcraft.mc.civmodcore.utilities.TextUtil;
-@CivCommand(id = "ctacid")
-public class Acid extends StandaloneCommand {
+public class Acid extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- Player p = (Player) sender;
+ @CommandAlias("ctacid|acid")
+ @Description("Removes the block above it if used on an acid block")
+ public void execute(Player p) {
Iterator itr = new BlockIterator(p, 40); // Within 2.5 chunks
AcidManager acidMan = Citadel.getInstance().getAcidManager();
boolean foundAny = false;
@@ -44,45 +41,38 @@ public boolean execute(CommandSender sender, String[] args) {
if (!foundAny) {
CitadelUtility.sendAndLog(p, ChatColor.RED, "That block is not a valid acid block");
}
- return true;
+ return;
}
Reinforcement reinforcement = ReinforcementLogic.getReinforcementAt(block.getLocation());
if (reinforcement == null) {
CitadelUtility.sendAndLog(p, ChatColor.RED, "That block is not reinforced.");
- return true;
+ return;
}
if (!reinforcement.hasPermission(p, CitadelPermissionHandler.getAcidblock())) {
CitadelUtility.sendAndLog(p, ChatColor.RED,
"You do not have sufficient permission to use acid blocks on this group.");
- return true;
+ return;
}
long neededTime = acidMan.getRemainingAcidMaturationTime(reinforcement);
if (neededTime > 0) {
- CitadelUtility.sendAndLog(p, ChatColor.RED,
- "That acid block will be mature in "
- + TextUtil.formatDuration(neededTime, TimeUnit.MILLISECONDS),
- block.getLocation());
- return true;
+ CitadelUtility.sendAndLog(p, ChatColor.RED, "That acid block will be mature in "
+ + TextUtil.formatDuration(neededTime, TimeUnit.MILLISECONDS));
+ return;
}
Block topFace = block.getRelative(BlockFace.UP);
if (MaterialUtils.isAir(topFace.getType())) {
- CitadelUtility.sendAndLog(p, ChatColor.RED,
- "There is no block above to acid block.",
- block.getLocation());
- return true;
+ CitadelUtility.sendAndLog(p, ChatColor.RED, "There is no block above to acid block.");
+ return;
}
Reinforcement topRein = ReinforcementLogic.getReinforcementProtecting(topFace);
if (topRein == null) {
- CitadelUtility.sendAndLog(p, ChatColor.RED,
- "The block above doesn't have a reinforcement.",
- block.getLocation());
- return true;
+ CitadelUtility.sendAndLog(p, ChatColor.RED, "The block above doesn't have a reinforcement.");
+ return;
}
if (!acidMan.canAcidBlock(reinforcement.getType(), topRein.getType())) {
CitadelUtility.sendAndLog(p, ChatColor.RED,
- reinforcement.getType().getName() + " can not acid away " + topRein.getType().getName(),
- block.getLocation());
- return true;
+ reinforcement.getType().getName() + " can not acid away " + topRein.getType().getName());
+ return;
}
ReinforcementAcidBlockedEvent event = new ReinforcementAcidBlockedEvent(p, reinforcement, topRein);
Bukkit.getPluginManager().callEvent(event);
@@ -91,7 +81,7 @@ public boolean execute(CommandSender sender, String[] args) {
Citadel.getInstance().getLogger().log(Level.INFO,
"Acid block event cancelled for acid at " + reinforcement.getLocation());
}
- return true;
+ return;
}
if (Citadel.getInstance().getConfigManager().logHostileBreaks()) {
@@ -108,12 +98,6 @@ public boolean execute(CommandSender sender, String[] args) {
topFace.breakNaturally();
}
}
- return true;
- }
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- return new ArrayList<>();
}
/**
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java b/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java
index 9b348d97..2235cd93 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/AdvancedFortification.java
@@ -1,10 +1,13 @@
package vg.civcraft.mc.citadel.command;
-import java.util.ArrayList;
-import java.util.List;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.CommandCompletion;
+import co.aikar.commands.annotation.Description;
+import co.aikar.commands.annotation.Optional;
+import co.aikar.commands.annotation.Syntax;
import org.bukkit.ChatColor;
import org.bukkit.Material;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import vg.civcraft.mc.citadel.Citadel;
@@ -14,92 +17,76 @@
import vg.civcraft.mc.citadel.playerstate.AdvancedFortificationState;
import vg.civcraft.mc.citadel.playerstate.PlayerStateManager;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
import vg.civcraft.mc.namelayer.GroupManager;
import vg.civcraft.mc.namelayer.NameAPI;
-import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter;
import vg.civcraft.mc.namelayer.group.Group;
-@CivCommand(id = "cta")
-public class AdvancedFortification extends StandaloneCommand {
+public class AdvancedFortification extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- Player player = (Player) sender;
+ @CommandAlias("cta|advfort")
+ @Syntax("")
+ @Description("Enters advanced fortification mode or adds configurations to it. Advanced configuration mode allows you to place on different groups with different reinforcement types at once")
+ @CommandCompletion("@CT_Groups")
+ public void execute(Player player, @Optional String targetGroup) {
PlayerStateManager stateManager = Citadel.getInstance().getStateManager();
AbstractPlayerState currentState = stateManager.getState(player);
AdvancedFortificationState advFortState = null;
if (currentState instanceof AdvancedFortificationState) {
advFortState = (AdvancedFortificationState) currentState;
- if (args.length == 0) {
+ if (targetGroup.isEmpty()) {
stateManager.setState(player, null);
- return true;
+ return;
}
}
ItemStack mainHand = player.getInventory().getItemInMainHand();
if (mainHand.getType() == Material.AIR) {
CitadelUtility.sendAndLog(player, ChatColor.RED,
"You need to hold an item in your main hand to specify the block type to reinforce");
- return true;
+ return;
}
ItemStack offHand = player.getInventory().getItemInOffHand();
if (offHand.getType() == Material.AIR) {
CitadelUtility.sendAndLog(player, ChatColor.RED, "You need to hold a reinforcement item in your off hand");
- return true;
+ return;
}
ReinforcementType type = Citadel.getInstance().getReinforcementTypeManager().getByItemStack(offHand);
if (type == null) {
CitadelUtility.sendAndLog(player, ChatColor.RED, "You can not reinforce with the item in your off hand");
- return true;
+ return;
}
if (!type.canBeReinforced(mainHand.getType())) {
CitadelUtility.sendAndLog(player, ChatColor.AQUA,
type.getName() + ChatColor.RED + " can not reinforce " + mainHand.getType().name());
- return true;
+ return;
}
String groupName = null;
- if (args.length == 0) {
+ if (targetGroup.isEmpty()) {
groupName = NameAPI.getGroupManager().getDefaultGroup(player.getUniqueId());
if (groupName == null) {
CitadelUtility.sendAndLog(player, ChatColor.RED,
"You don't have a default group and can thus not use this command without specifying a group");
- return true;
+ return;
}
} else {
- groupName = args[0];
+ groupName = targetGroup;
}
Group group = GroupManager.getGroup(groupName);
if (group == null) {
CitadelUtility.sendAndLog(player, ChatColor.RED, "The group " + groupName + " does not exist.");
- return true;
+ return;
}
boolean hasAccess = NameAPI.getGroupManager().hasAccess(group.getName(), player.getUniqueId(),
CitadelPermissionHandler.getReinforce());
if (!hasAccess) {
- CitadelUtility.sendAndLog(player, ChatColor.RED, "You do not have permission to reinforce on " + group.getName());
- return true;
+ CitadelUtility
+ .sendAndLog(player, ChatColor.RED, "You do not have permission to reinforce on " + group.getName());
+ return;
}
if (advFortState == null) {
- advFortState = new AdvancedFortificationState(player);
+ advFortState = new AdvancedFortificationState(player);
stateManager.setState(player, advFortState);
}
advFortState.addSetup(mainHand, type, group);
- return true;
}
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- if (args.length == 0)
- return GroupTabCompleter.complete(null, CitadelPermissionHandler.getReinforce(),
- (Player) sender);
- else if (args.length == 1)
- return GroupTabCompleter.complete(args[0], CitadelPermissionHandler.getReinforce(),
- (Player) sender);
- else {
- return new ArrayList<>();
- }
- }
-
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java b/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java
index 43c7c522..dbcc9081 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/AreaReinforce.java
@@ -1,70 +1,63 @@
package vg.civcraft.mc.citadel.command;
-import java.util.ArrayList;
-import java.util.List;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.CommandCompletion;
+import co.aikar.commands.annotation.Description;
+import co.aikar.commands.annotation.Optional;
+import co.aikar.commands.annotation.Syntax;
import java.util.UUID;
import org.bukkit.ChatColor;
import org.bukkit.block.Block;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.Citadel;
import vg.civcraft.mc.citadel.CitadelUtility;
import vg.civcraft.mc.citadel.ReinforcementLogic;
import vg.civcraft.mc.citadel.model.Reinforcement;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
import vg.civcraft.mc.namelayer.GroupManager;
import vg.civcraft.mc.namelayer.NameAPI;
import vg.civcraft.mc.namelayer.group.Group;
-@CivCommand(id = "ctar")
-public class AreaReinforce extends StandaloneCommand {
+public class AreaReinforce extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- if (!(sender instanceof Player)) {
- sender.sendMessage("Must be a player to perform this command.");
- return true;
- }
- Player p = (Player) sender;
+ @CommandAlias("ctar")
+ @Syntax(" ")
+ @Description("Using the reinforcement item in your main hand, reinforces an area to your default or a target group.")
+ @CommandCompletion("@CT_Groups @nothing @nothing @nothing @nothing @nothing @nothing")
+ public void execute(Player p, @Optional String targetGroup, String minX, String minY, String minZ, String maxX, String maxY, String maxZ) {
UUID uuid = NameAPI.getUUID(p.getName());
ReinforcementType reinType = Citadel.getInstance().getReinforcementTypeManager()
.getByItemStack(p.getInventory().getItemInMainHand());
if (reinType == null) {
CitadelUtility.sendAndLog(p, ChatColor.RED, "The item you are holding is not a possible reinforcement");
- return true;
+ return;
}
String groupName = null;
- if (args.length == 6) {
+ if (targetGroup == null) {
groupName = NameAPI.getGroupManager().getDefaultGroup(uuid);
if (groupName == null) {
CitadelUtility.sendAndLog(p, ChatColor.RED, "You need to set a default group \n Use /nlsdg to do so");
- return true;
+ return;
}
} else {
- if (args.length == 0) {
- p.sendMessage(ChatColor.RED + "Please input a valid group");
- return true;
- }
- groupName = args[0];
+ groupName = targetGroup;
}
Group group = GroupManager.getGroup(groupName);
if (group == null) {
CitadelUtility.sendAndLog(p, ChatColor.RED, "That group does not exist.");
- return true;
+ return;
}
// no additional group permission check here because the player is
// admin/op anyway
int xMin, yMin, zMin, xMax, yMax, zMax;
- int offset = args.length == 7 ? 1 : 0;
try {
- int x1 = Integer.parseInt(args[offset]);
- int y1 = Integer.parseInt(args[offset + 1]);
- int z1 = Integer.parseInt(args[offset + 2]);
- int x2 = Integer.parseInt(args[offset + 3]);
- int y2 = Integer.parseInt(args[offset + 4]);
- int z2 = Integer.parseInt(args[offset + 5]);
+ int x1 = Integer.parseInt(minX);
+ int y1 = Integer.parseInt(minY);
+ int z1 = Integer.parseInt(minZ);
+ int x2 = Integer.parseInt(maxX);
+ int y2 = Integer.parseInt(maxY);
+ int z2 = Integer.parseInt(maxZ);
xMin = Math.min(x1, x2);
yMin = Math.min(y1, y2);
zMin = Math.min(z1, z2);
@@ -73,7 +66,7 @@ public boolean execute(CommandSender sender, String[] args) {
zMax = Math.max(z1, z2);
} catch (NumberFormatException e) {
CitadelUtility.sendAndLog(p, ChatColor.RED, "One of the arguments you provided was not a number");
- return false;
+ return;
}
int count = 0;
for (int x = xMin; x <= xMax; x++) {
@@ -99,12 +92,6 @@ public boolean execute(CommandSender sender, String[] args) {
}
}
- CitadelUtility.sendAndLog(p, ChatColor.GREEN, "Successfully created " + count + " reinforcements");
- return true;
- }
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- return new ArrayList<>();
+ CitadelUtility.sendAndLog(p, ChatColor.GREEN, "Successfully created " + count + "reinforcements");
}
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java b/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java
index 8e480e21..165b733e 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/Bypass.java
@@ -1,22 +1,19 @@
package vg.civcraft.mc.citadel.command;
-import java.util.ArrayList;
-import java.util.List;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.Description;
import org.bukkit.ChatColor;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.Citadel;
import vg.civcraft.mc.citadel.CitadelUtility;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
-import vg.civcraft.mc.civmodcore.playersettings.impl.BooleanSetting;
+import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting;
-@CivCommand(id = "ctb")
-public class Bypass extends StandaloneCommand {
+public class Bypass extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- Player player = (Player) sender;
+ @CommandAlias("ctb|bypass")
+ @Description("Toggles bypass state. In bypass state you can break blocks reinforced on groups you have access to in a single break")
+ public void execute(Player player) {
BooleanSetting setting = Citadel.getInstance().getSettingManager().getBypass();
boolean enabled = setting.getValue(player);
if (enabled) {
@@ -26,11 +23,5 @@ public boolean execute(CommandSender sender, String[] args) {
"Bypass mode has been enabled. You will be able to break reinforced blocks if you are on the group.");
}
setting.toggleValue(player.getUniqueId());
- return true;
- }
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- return new ArrayList<>();
}
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/CitadelCommandManager.java b/src/main/java/vg/civcraft/mc/citadel/command/CitadelCommandManager.java
new file mode 100644
index 00000000..ba4c3461
--- /dev/null
+++ b/src/main/java/vg/civcraft/mc/citadel/command/CitadelCommandManager.java
@@ -0,0 +1,39 @@
+package vg.civcraft.mc.citadel.command;
+
+import co.aikar.commands.BukkitCommandCompletionContext;
+import co.aikar.commands.CommandCompletions;
+import javax.annotation.Nonnull;
+import org.bukkit.plugin.Plugin;
+import vg.civcraft.mc.civmodcore.commands.CommandManager;
+import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter;
+
+public class CitadelCommandManager extends CommandManager {
+
+ public CitadelCommandManager(Plugin plugin) {
+ super(plugin);
+ init();
+ }
+
+ @Override
+ public void registerCommands() {
+ registerCommand(new Acid());
+ registerCommand(new AdvancedFortification());
+ registerCommand(new AreaReinforce());
+ registerCommand(new Bypass());
+ registerCommand(new EasyMode());
+ registerCommand(new Fortification());
+ registerCommand(new Information());
+ registerCommand(new Insecure());
+ registerCommand(new Off());
+ registerCommand(new PatchMode());
+ registerCommand(new Reinforce());
+ registerCommand(new ReinforcementsGUI());
+ registerCommand(new Reload());
+ }
+
+ @Override
+ public void registerCompletions(@Nonnull CommandCompletions completions) {
+ super.registerCompletions(completions);
+ completions.registerCompletion("CT_Groups", (context) -> GroupTabCompleter.complete(context.getInput(), null, context.getPlayer()));
+ }
+}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java b/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java
index da0a5bf5..becefda3 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/EasyMode.java
@@ -1,22 +1,19 @@
package vg.civcraft.mc.citadel.command;
-import java.util.ArrayList;
-import java.util.List;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.Description;
import org.bukkit.ChatColor;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.Citadel;
import vg.civcraft.mc.citadel.CitadelUtility;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
-import vg.civcraft.mc.civmodcore.playersettings.impl.BooleanSetting;
+import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting;
-@CivCommand(id = "cte")
-public class EasyMode extends StandaloneCommand {
+public class EasyMode extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- Player player = (Player) sender;
+ @CommandAlias("cte|easymode")
+ @Description("Reinforces to your default group using materials from your offhand.")
+ public void execute(Player player) {
BooleanSetting setting = Citadel.getInstance().getSettingManager().getEasyMode();
boolean enabled = setting.getValue(player);
if (enabled) {
@@ -26,11 +23,5 @@ public boolean execute(CommandSender sender, String[] args) {
"Easy reinforcing mode has been enabled. You will be able to reinforce to your default group by placing blocks while having a reinforcement material in your off hand.");
}
setting.toggleValue(player.getUniqueId());
- return true;
- }
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- return new ArrayList<>();
}
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java b/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java
index 9e9198a3..258f0323 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/Fortification.java
@@ -1,9 +1,12 @@
package vg.civcraft.mc.citadel.command;
-import java.util.ArrayList;
-import java.util.List;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.CommandCompletion;
+import co.aikar.commands.annotation.Description;
+import co.aikar.commands.annotation.Optional;
+import co.aikar.commands.annotation.Syntax;
import org.bukkit.ChatColor;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.Citadel;
import vg.civcraft.mc.citadel.CitadelPermissionHandler;
@@ -12,79 +15,63 @@
import vg.civcraft.mc.citadel.playerstate.FortificationState;
import vg.civcraft.mc.citadel.playerstate.PlayerStateManager;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
import vg.civcraft.mc.namelayer.GroupManager;
import vg.civcraft.mc.namelayer.NameAPI;
-import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter;
import vg.civcraft.mc.namelayer.group.Group;
-@CivCommand(id = "ctf")
-public class Fortification extends StandaloneCommand {
+public class Fortification extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- Player player = (Player) sender;
+ @CommandAlias("ctf|reinforce|fortify")
+ @Syntax("")
+ @Description("Enters fortification mode. All blocks placed in fortification mode will automatically be reinforced. If no group is given, your default group will be used")
+ @CommandCompletion("@CT_Groups")
+ public void execute(Player player, @Optional String targetGroup) {
PlayerStateManager stateManager = Citadel.getInstance().getStateManager();
AbstractPlayerState currentState = stateManager.getState(player);
- if (args.length == 0 && currentState instanceof FortificationState) {
+ if (targetGroup == null && currentState instanceof FortificationState) {
stateManager.setState(player, null);
- return true;
+ return;
}
ReinforcementType type = Citadel.getInstance().getReinforcementTypeManager()
.getByItemStack(player.getInventory().getItemInMainHand());
if (type == null) {
CitadelUtility.sendAndLog(player, ChatColor.RED, "You can not reinforce with this item");
stateManager.setState(player, null);
- return true;
+ return;
}
String groupName = null;
- if (args.length == 0) {
+ if (targetGroup == null) {
groupName = NameAPI.getGroupManager().getDefaultGroup(player.getUniqueId());
if (groupName == null) {
CitadelUtility.sendAndLog(player, ChatColor.RED,
"You need to fortify to a group! Try /fortify groupname. \n Or use /create groupname if you don't have a group yet.");
- return true;
+ return;
}
} else {
- groupName = args[0];
+ groupName = targetGroup;
}
Group group = GroupManager.getGroup(groupName);
if (group == null) {
CitadelUtility.sendAndLog(player, ChatColor.RED, "The group " + groupName + " does not exist.");
stateManager.setState(player, null);
- return true;
+ return;
}
boolean hasAccess = NameAPI.getGroupManager().hasAccess(group.getName(), player.getUniqueId(),
CitadelPermissionHandler.getReinforce());
if (!hasAccess) {
CitadelUtility.sendAndLog(player, ChatColor.RED, "You do not have permission to reinforce on " + group.getName());
stateManager.setState(player, null);
- return true;
+ return;
}
if (currentState instanceof FortificationState) {
FortificationState fortState = (FortificationState) currentState;
if (fortState.getGroup() == group && fortState.getType() == type) {
stateManager.setState(player, null);
- return true;
+ return;
}
}
stateManager.setState(player, new FortificationState(player, type, group));
- return true;
- }
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- if (args.length == 0)
- return GroupTabCompleter.complete(null, CitadelPermissionHandler.getReinforce(),
- (Player) sender);
- else if (args.length == 1)
- return GroupTabCompleter.complete(args[0], CitadelPermissionHandler.getReinforce(),
- (Player) sender);
- else {
- return new ArrayList<>();
- }
}
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Information.java b/src/main/java/vg/civcraft/mc/citadel/command/Information.java
index b91b8e8f..de5ee849 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/Information.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/Information.java
@@ -1,30 +1,21 @@
package vg.civcraft.mc.citadel.command;
-import java.util.ArrayList;
-import java.util.List;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.Description;
import org.bukkit.ChatColor;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.Citadel;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
-import vg.civcraft.mc.civmodcore.playersettings.impl.BooleanSetting;
+import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting;
-@CivCommand(id = "cti")
-public class Information extends StandaloneCommand {
+public class Information extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- Player player = (Player) sender;
+ @CommandAlias("cti|ctinfo|info")
+ @Description("Enters information mode. Interacting with blocks in information mode will show information on their reinforcement")
+ public void execute(Player player) {
BooleanSetting ctiSetting = Citadel.getInstance().getSettingManager().getInformationMode();
ctiSetting.toggleValue(player.getUniqueId());
player.sendMessage(ChatColor.GREEN + "Toggled reinforcement information mode " + ChatColor.YELLOW
+ (ctiSetting.getValue(player.getUniqueId()) ? "on" : "off"));
- return true;
- }
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- return new ArrayList<>();
}
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java b/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java
index cd59de0a..75d0cb3d 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/Insecure.java
@@ -1,22 +1,19 @@
package vg.civcraft.mc.citadel.command;
-import java.util.ArrayList;
-import java.util.List;
-import org.bukkit.command.CommandSender;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.Description;
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.Citadel;
import vg.civcraft.mc.citadel.playerstate.AbstractPlayerState;
import vg.civcraft.mc.citadel.playerstate.InsecureState;
import vg.civcraft.mc.citadel.playerstate.PlayerStateManager;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
-@CivCommand(id = "ctin")
-public class Insecure extends StandaloneCommand {
+public class Insecure extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- Player player = (Player) sender;
+ @CommandAlias("ctin|insecure")
+ @Description("Enters insecure mode. Interacting with containers in insecure mode will switch their insecure flag. Insecure containers can interact with hoppers reinforced on a different group. All containers are secure by default")
+ public void execute(Player player) {
PlayerStateManager stateManager = Citadel.getInstance().getStateManager();
AbstractPlayerState currentState = Citadel.getInstance().getStateManager().getState(player);
if (currentState instanceof InsecureState) {
@@ -24,12 +21,5 @@ public boolean execute(CommandSender sender, String[] args) {
} else {
stateManager.setState(player, new InsecureState(player));
}
- return true;
}
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- return new ArrayList<>();
- }
-
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Off.java b/src/main/java/vg/civcraft/mc/citadel/command/Off.java
index 78ab6924..cab93ced 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/Off.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/Off.java
@@ -1,35 +1,26 @@
package vg.civcraft.mc.citadel.command;
-import java.util.ArrayList;
-import java.util.List;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.Description;
import java.util.UUID;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.Citadel;
import vg.civcraft.mc.citadel.model.CitadelSettingManager;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
-@CivCommand(id = "cto")
-public class Off extends StandaloneCommand {
+public class Off extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- Citadel.getInstance().getStateManager().setState((Player) sender, null);
+ @CommandAlias("cto")
+ @Description("Leaves all reinforcement modes")
+ public void execute(Player sender) {
+ Citadel.getInstance().getStateManager().setState(sender, null);
CitadelSettingManager settings = Citadel.getInstance().getSettingManager();
- UUID uuid = ((Player) sender).getUniqueId();
+ UUID uuid = sender.getUniqueId();
if (settings.getInformationMode().getValue(uuid) && settings.shouldCtoDisableCti(uuid)) {
settings.getInformationMode().setValue(uuid, false);
}
if (settings.getBypass().getValue(uuid) && settings.shouldCtoDisableCtb(uuid)) {
settings.getBypass().setValue(uuid, false);
}
- return true;
}
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- return new ArrayList<>();
- }
-
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java b/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java
index b9e9ccf5..367b0715 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/PatchMode.java
@@ -1,22 +1,21 @@
package vg.civcraft.mc.citadel.command;
-import java.util.LinkedList;
-import java.util.List;
-import org.bukkit.command.CommandSender;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.CommandCompletion;
+import co.aikar.commands.annotation.Description;
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.Citadel;
import vg.civcraft.mc.citadel.playerstate.AbstractPlayerState;
import vg.civcraft.mc.citadel.playerstate.PatchState;
import vg.civcraft.mc.citadel.playerstate.PlayerStateManager;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
-@CivCommand(id = "ctp")
-public class PatchMode extends StandaloneCommand{
+public class PatchMode extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- Player player = (Player) sender;
+ @CommandAlias("ctp|patchmode|patch")
+ @Description("Enters patch mode, which allows you to repair reinforcements. Note that repairing reinforcements will also reset their maturation cycle")
+ @CommandCompletion("@CT_Groups")
+ public void execute(Player player) {
PlayerStateManager stateManager = Citadel.getInstance().getStateManager();
AbstractPlayerState currentState = Citadel.getInstance().getStateManager().getState(player);
if (currentState instanceof PatchState) {
@@ -24,12 +23,5 @@ public boolean execute(CommandSender sender, String[] args) {
} else {
stateManager.setState(player, new PatchState(player));
}
- return true;
}
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- return new LinkedList<>();
- }
-
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java b/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java
index 62fdbe62..53863f3a 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/Reinforce.java
@@ -1,10 +1,13 @@
package vg.civcraft.mc.citadel.command;
-import java.util.ArrayList;
-import java.util.List;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.CommandCompletion;
+import co.aikar.commands.annotation.Description;
+import co.aikar.commands.annotation.Optional;
+import co.aikar.commands.annotation.Syntax;
import java.util.UUID;
import org.bukkit.ChatColor;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.Citadel;
import vg.civcraft.mc.citadel.CitadelPermissionHandler;
@@ -12,70 +15,51 @@
import vg.civcraft.mc.citadel.playerstate.AbstractPlayerState;
import vg.civcraft.mc.citadel.playerstate.PlayerStateManager;
import vg.civcraft.mc.citadel.playerstate.ReinforcingState;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
import vg.civcraft.mc.namelayer.GroupManager;
import vg.civcraft.mc.namelayer.NameAPI;
-import vg.civcraft.mc.namelayer.command.TabCompleters.GroupTabCompleter;
import vg.civcraft.mc.namelayer.group.Group;
-@CivCommand(id = "ctr")
-public class Reinforce extends StandaloneCommand {
+public class Reinforce extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- Player player = (Player) sender;
+ @CommandAlias("ctr")
+ @Syntax("")
+ @Description("Enters reinforcing mode. Interacting with blocks in reinforcing mode will reinforce them or modify their reinforcement")
+ @CommandCompletion("@CT_Groups")
+ public void execute(Player player, @Optional String targetGroup) {
UUID uuid = NameAPI.getUUID(player.getName());
String groupName = null;
- if (args.length == 0) {
+ if (targetGroup == null) {
groupName = NameAPI.getGroupManager().getDefaultGroup(uuid);
if (groupName == null) {
CitadelUtility.sendAndLog(player, ChatColor.RED,
"You need to reinforce to a group! Try /reinforce groupname. \n Or use /create groupname if you don't have a group yet.");
- return true;
+ return;
}
} else {
- groupName = args[0];
+ groupName = targetGroup;
}
PlayerStateManager stateManager = Citadel.getInstance().getStateManager();
Group group = GroupManager.getGroup(groupName);
if (group == null) {
CitadelUtility.sendAndLog(player, ChatColor.RED, "The group " + groupName + " does not exist.");
stateManager.setState(player, null);
- return true;
+ return;
}
boolean hasAccess = NameAPI.getGroupManager().hasAccess(group.getName(), player.getUniqueId(),
CitadelPermissionHandler.getReinforce());
if (!hasAccess) {
CitadelUtility.sendAndLog(player, ChatColor.RED, "You do not have permission to reinforce on " + group.getName());
stateManager.setState(player, null);
- return true;
+ return;
}
AbstractPlayerState currentState = Citadel.getInstance().getStateManager().getState(player);
if (currentState instanceof ReinforcingState) {
ReinforcingState reinState = (ReinforcingState) currentState;
if (reinState.getGroup() == group) {
stateManager.setState(player, null);
- return true;
+ return;
}
}
stateManager.setState(player, new ReinforcingState(player, group));
- return true;
- }
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- if (!(sender instanceof Player))
- return null;
-
- if (args.length == 0)
- return GroupTabCompleter.complete(null, CitadelPermissionHandler.getReinforce(),
- (Player) sender);
- else if (args.length == 1)
- return GroupTabCompleter.complete(args[0], CitadelPermissionHandler.getReinforce(),
- (Player) sender);
- else {
- return new ArrayList<>();
- }
}
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java b/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java
index 38e74908..c1506bed 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/ReinforcementsGUI.java
@@ -1,31 +1,31 @@
package vg.civcraft.mc.citadel.command;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.Description;
import java.text.DecimalFormat;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.bukkit.ChatColor;
-import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import vg.civcraft.mc.citadel.Citadel;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
+import vg.civcraft.mc.civmodcore.inventory.gui.DecorationStack;
+import vg.civcraft.mc.civmodcore.inventory.gui.IClickable;
+import vg.civcraft.mc.civmodcore.inventory.gui.MultiPageView;
import vg.civcraft.mc.civmodcore.inventory.items.ItemUtils;
-import vg.civcraft.mc.civmodcore.inventorygui.DecorationStack;
-import vg.civcraft.mc.civmodcore.inventorygui.IClickable;
-import vg.civcraft.mc.civmodcore.inventorygui.MultiPageView;
-import vg.civcraft.mc.civmodcore.util.TextUtil;
+import vg.civcraft.mc.civmodcore.utilities.TextUtil;
-@CivCommand(id = "ctdl")
-public class ReinforcementsGUI extends StandaloneCommand {
+public class ReinforcementsGUI extends BaseCommand {
private DecimalFormat format = new DecimalFormat("##.##");
- @Override
- public boolean execute(CommandSender sender, String[] arg1) {
+ @CommandAlias("ctdl|reinforcements")
+ @Description("Opens a GUI displaying all reinforcement materials")
+ public void execute(Player sender) {
List types = new LinkedList<>(
Citadel.getInstance().getReinforcementTypeManager().getAllTypes());
// sort ascending by health
@@ -48,14 +48,7 @@ public boolean execute(CommandSender sender, String[] arg1) {
IClickable click = new DecorationStack(is);
clicks.add(click);
}
- MultiPageView pageView = new MultiPageView((Player) sender, clicks, ChatColor.BLUE + "Reinforcements", true);
+ MultiPageView pageView = new MultiPageView(sender, clicks, ChatColor.BLUE + "Reinforcements", true);
pageView.showScreen();
- return true;
}
-
- @Override
- public List tabComplete(CommandSender arg0, String[] arg1) {
- return null;
- }
-
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/command/Reload.java b/src/main/java/vg/civcraft/mc/citadel/command/Reload.java
index 4c8d1f4a..9cc35018 100644
--- a/src/main/java/vg/civcraft/mc/citadel/command/Reload.java
+++ b/src/main/java/vg/civcraft/mc/citadel/command/Reload.java
@@ -1,26 +1,20 @@
package vg.civcraft.mc.citadel.command;
-import java.util.LinkedList;
-import java.util.List;
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.CommandPermission;
+import co.aikar.commands.annotation.Description;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import vg.civcraft.mc.citadel.Citadel;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
-@CivCommand(id = "citadelreload")
-public class Reload extends StandaloneCommand {
+public class Reload extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
+ @CommandAlias("citadelreload")
+ @CommandPermission("citadel.admin")
+ @Description("Reloads Citadel entirely")
+ public void execute(CommandSender sender) {
Citadel.getInstance().reload();
sender.sendMessage(ChatColor.GREEN + "Reloaded Citadel");
- return true;
}
-
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- return new LinkedList<>();
- }
-
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java
index 11e31e09..9799039d 100644
--- a/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java
+++ b/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java
@@ -1,12 +1,15 @@
package vg.civcraft.mc.citadel.listener;
import com.destroystokyo.paper.MaterialTags;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Container;
+import org.bukkit.block.data.Lightable;
import org.bukkit.block.data.Openable;
import org.bukkit.block.data.type.Comparator;
import org.bukkit.block.data.type.Lectern;
@@ -18,10 +21,12 @@
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockBurnEvent;
+import org.bukkit.event.block.BlockFertilizeEvent;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
+import org.bukkit.event.player.PlayerHarvestBlockEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerTakeLecternBookEvent;
import org.bukkit.event.world.StructureGrowEvent;
@@ -34,7 +39,7 @@
import vg.civcraft.mc.citadel.model.Reinforcement;
import vg.civcraft.mc.civmodcore.inventory.items.MaterialUtils;
import vg.civcraft.mc.civmodcore.inventory.items.MoreTags;
-import vg.civcraft.mc.civmodcore.util.DoubleInteractFixer;
+import vg.civcraft.mc.civmodcore.utilities.DoubleInteractFixer;
import vg.civcraft.mc.civmodcore.world.WorldUtils;
public class BlockListener implements Listener {
@@ -155,7 +160,7 @@ public void liquidDumpEvent(PlayerBucketEmptyEvent event) {
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onBlockFromToEvent(BlockFromToEvent event) {
// prevent water/lava from spilling reinforced blocks away
- if (event.getToBlock().getY() < 0) {
+ if (event.getToBlock().getY() < event.getToBlock().getWorld().getMinHeight()) {
return;
}
Reinforcement rein = ReinforcementLogic.getReinforcementProtecting(event.getToBlock());
@@ -272,6 +277,40 @@ public void preventStrippingLogs(PlayerInteractEvent pie) {
}
}
+ @EventHandler(priority = EventPriority.NORMAL)
+ public void rightClickCaveVines(PlayerHarvestBlockEvent event) {
+ Block harvestedBlock = event.getHarvestedBlock();
+ Reinforcement reinforcement = ReinforcementLogic.getReinforcementProtecting(harvestedBlock);
+ if (reinforcement == null) {
+ return;
+ }
+ if (!reinforcement.hasPermission(event.getPlayer(), CitadelPermissionHandler.getCrops())) {
+ event.getPlayer().sendMessage(Component.text("You do not have permission to harvest this crop").color(NamedTextColor.RED));
+ event.setCancelled(true);
+ }
+ }
+
+ /*
+ For some stupid reason, Waxing / Stripping copper blocks calls a BlockPlaceEvent instead of PlayerInteractEvent,
+ this obviously might change in future so heres a warning note
+ Reminder: This is retarded
+ */
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
+ public void preventWaxingCopper(BlockPlaceEvent event) {
+ if (!MoreTags.COPPER_BLOCKS.isTagged(event.getBlockPlaced().getType())) {
+ return;
+ }
+ Reinforcement reinforcement = Citadel.getInstance().getReinforcementManager().getReinforcement(event.getBlockPlaced());
+ if (reinforcement == null) {
+ return;
+ }
+ Player player = event.getPlayer();
+ if (!reinforcement.hasPermission(player, CitadelPermissionHandler.getModifyBlocks())) {
+ player.sendMessage(ChatColor.RED + "You do not have permission to modify this block");
+ event.setCancelled(true);
+ }
+ }
+
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void preventTilingGrass(PlayerInteractEvent pie) {
if (!pie.hasBlock()) {
@@ -319,7 +358,7 @@ public void preventTillingDirtIntoFarmland(PlayerInteractEvent pie) {
Block block = pie.getClickedBlock();
Material type = block.getType();
if (type != Material.GRASS_BLOCK && type != Material.DIRT && type != Material.COARSE_DIRT
- && type != Material.GRASS_PATH) {
+ && type != Material.DIRT_PATH) {
return;
}
EquipmentSlot hand = pie.getHand();
@@ -383,6 +422,57 @@ public void preventHarvestingHoney(PlayerInteractEvent pie) {
}
}
+ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
+ public void preventLightingCandles(PlayerInteractEvent pie) {
+ if (!pie.hasBlock()) {
+ return;
+ }
+ if (pie.getAction() != Action.RIGHT_CLICK_BLOCK) {
+ return;
+ }
+ Block block = pie.getClickedBlock();
+ Material type = block.getType();
+ if (!MoreTags.LIGHTABLE_CANDLES.isTagged(type)) {
+ return;
+ }
+ if (!pie.hasItem()) {
+ Lightable candles = (Lightable) block.getBlockData();
+ if (candles.isLit()) {
+ Reinforcement rein = Citadel.getInstance().getReinforcementManager().getReinforcement(block);
+ if (rein == null) {
+ return;
+ }
+ if (!rein.hasPermission(pie.getPlayer(), CitadelPermissionHandler.getModifyBlocks())) {
+ pie.getPlayer().sendMessage(ChatColor.RED + "You do not have permission to modify this block");
+ pie.setCancelled(true);
+ return;
+ }
+ }
+ }
+ EquipmentSlot hand = pie.getHand();
+ if (hand != EquipmentSlot.HAND && hand != EquipmentSlot.OFF_HAND) {
+ return;
+ }
+ ItemStack relevant;
+ Player p = pie.getPlayer();
+ if (hand == EquipmentSlot.HAND) {
+ relevant = p.getInventory().getItemInMainHand();
+ } else {
+ relevant = p.getInventory().getItemInOffHand();
+ }
+ if (relevant.getType() != Material.FLINT_AND_STEEL) {
+ return;
+ }
+ Reinforcement rein = Citadel.getInstance().getReinforcementManager().getReinforcement(block);
+ if (rein == null) {
+ return;
+ }
+ if (!rein.hasPermission(p, CitadelPermissionHandler.getModifyBlocks())) {
+ p.sendMessage(ChatColor.RED + "You do not have permission to modify this block");
+ pie.setCancelled(true);
+ }
+ }
+
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = false)
public void openBeacon(PlayerInteractEvent pie) {
if (!pie.hasBlock()) {
@@ -446,4 +536,15 @@ private void INTERNAL_checkLecternModificationPermission(final Cancellable event
event.setCancelled(true);
CitadelUtility.sendAndLog(clicker, ChatColor.RED, "You cannot modify that lectern.", lecternLocation);
}
+
+ @EventHandler(ignoreCancelled = true)
+ public void onMossSpread(BlockFertilizeEvent event) {
+ for (BlockState block : event.getBlocks()) {
+ if (Citadel.getInstance().getReinforcementManager().getReinforcement(block.getBlock()) != null) {
+ event.getPlayer().sendMessage(Component.text("You can't do that while their are reinforced blocks around!").color(NamedTextColor.RED));
+ event.setCancelled(true);
+ return;
+ }
+ }
+ }
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java
index 41e41716..76d03df1 100644
--- a/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java
+++ b/src/main/java/vg/civcraft/mc/citadel/listener/EntityListener.java
@@ -4,6 +4,8 @@
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@@ -26,15 +28,17 @@
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.hanging.HangingBreakEvent;
import org.bukkit.event.hanging.HangingPlaceEvent;
+import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scheduler.BukkitRunnable;
import vg.civcraft.mc.citadel.Citadel;
import vg.civcraft.mc.citadel.CitadelPermissionHandler;
import vg.civcraft.mc.citadel.ReinforcementLogic;
+import vg.civcraft.mc.citadel.events.ReinforcementBypassEvent;
import vg.civcraft.mc.citadel.model.Reinforcement;
import vg.civcraft.mc.civmodcore.inventory.items.ItemUtils;
-import vg.civcraft.mc.civmodcore.util.MoreClassUtils;
+import vg.civcraft.mc.civmodcore.utilities.MoreClassUtils;
import vg.civcraft.mc.namelayer.GroupManager;
import vg.civcraft.mc.namelayer.NameAPI;
import vg.civcraft.mc.namelayer.NameLayerPlugin;
@@ -82,6 +86,12 @@ public void changeBlock(EntityChangeBlockEvent ecbe) {
if (rein == null || ecbe.getEntityType() == EntityType.FALLING_BLOCK) {
return;
}
+ if (ecbe.getBlock().getType() == Material.BIG_DRIPLEAF) {
+ return;
+ }
+ if (ecbe.getBlock().getType() == Material.CAVE_VINES || ecbe.getBlock().getType() == Material.CAVE_VINES_PLANT) {
+ return;
+ }
ReinforcementLogic.damageReinforcement(rein, ReinforcementLogic.getDamageApplied(rein), ecbe.getEntity());
if (rein.isBroken()) {
return;
@@ -145,6 +155,32 @@ public void run() {
}.runTaskAsynchronously(Citadel.getInstance());
}
+ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
+ public void powderedSnowPickup(PlayerBucketFillEvent event) {
+ if (event.getBlockClicked().getType() != Material.POWDER_SNOW) {
+ return;
+ }
+
+ Block clickedBlock = event.getBlockClicked();
+ Reinforcement reinforcement = Citadel.getInstance().getReinforcementManager().getReinforcement(clickedBlock);
+ if (reinforcement == null) {
+ return;
+ }
+ Player player = event.getPlayer();
+ if (!reinforcement.hasPermission(player, CitadelPermissionHandler.getBypass())) {
+ player.sendMessage(Component.text("You do not have permission to bypass this block!").color(NamedTextColor.RED));
+ event.setCancelled(true);
+ return;
+ }
+ ReinforcementBypassEvent bypassEvent = new ReinforcementBypassEvent(player, reinforcement);
+ Bukkit.getPluginManager().callEvent(bypassEvent);
+ if (event.isCancelled()) {
+ event.setCancelled(true);
+ return;
+ }
+ reinforcement.setHealth(-1);
+ }
+
// prevent creating golems from reinforced blocks
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void spawn(CreatureSpawnEvent cse) {
diff --git a/src/main/java/vg/civcraft/mc/citadel/listener/ModeListener.java b/src/main/java/vg/civcraft/mc/citadel/listener/ModeListener.java
index f8f3e746..e1e67a2b 100644
--- a/src/main/java/vg/civcraft/mc/citadel/listener/ModeListener.java
+++ b/src/main/java/vg/civcraft/mc/citadel/listener/ModeListener.java
@@ -25,15 +25,15 @@
import vg.civcraft.mc.citadel.model.Reinforcement;
import vg.civcraft.mc.citadel.playerstate.AbstractPlayerState;
import vg.civcraft.mc.citadel.playerstate.PlayerStateManager;
-import vg.civcraft.mc.civmodcore.playersettings.PlayerSetting;
-import vg.civcraft.mc.civmodcore.playersettings.SettingChangeListener;
-import vg.civcraft.mc.civmodcore.playersettings.impl.DisplayLocationSetting;
-import vg.civcraft.mc.civmodcore.scoreboard.bottom.BottomLine;
-import vg.civcraft.mc.civmodcore.scoreboard.bottom.BottomLineAPI;
-import vg.civcraft.mc.civmodcore.scoreboard.side.CivScoreBoard;
-import vg.civcraft.mc.civmodcore.scoreboard.side.ScoreBoardAPI;
-import vg.civcraft.mc.civmodcore.util.DoubleInteractFixer;
-import vg.civcraft.mc.civmodcore.util.TextUtil;
+import vg.civcraft.mc.civmodcore.players.scoreboard.bottom.BottomLine;
+import vg.civcraft.mc.civmodcore.players.scoreboard.bottom.BottomLineAPI;
+import vg.civcraft.mc.civmodcore.players.scoreboard.side.CivScoreBoard;
+import vg.civcraft.mc.civmodcore.players.scoreboard.side.ScoreBoardAPI;
+import vg.civcraft.mc.civmodcore.players.settings.PlayerSetting;
+import vg.civcraft.mc.civmodcore.players.settings.SettingChangeListener;
+import vg.civcraft.mc.civmodcore.players.settings.impl.DisplayLocationSetting;
+import vg.civcraft.mc.civmodcore.utilities.DoubleInteractFixer;
+import vg.civcraft.mc.civmodcore.utilities.TextUtil;
public class ModeListener implements Listener {
@@ -124,7 +124,7 @@ private void setReinModeOverlay(Player player, AbstractPlayerState state) {
}
private static void updateDisplaySetting(Player player, DisplayLocationSetting locSetting, boolean state, String text,
- BottomLine bottomLine, CivScoreBoard scoreBoard) {
+ BottomLine bottomLine, CivScoreBoard scoreBoard) {
if (player == null) {
return;
}
diff --git a/src/main/java/vg/civcraft/mc/citadel/model/CitadelChunkData.java b/src/main/java/vg/civcraft/mc/citadel/model/CitadelChunkData.java
index d812c729..8e871cc0 100644
--- a/src/main/java/vg/civcraft/mc/citadel/model/CitadelChunkData.java
+++ b/src/main/java/vg/civcraft/mc/citadel/model/CitadelChunkData.java
@@ -1,6 +1,7 @@
package vg.civcraft.mc.citadel.model;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableBasedBlockChunkMeta;
+
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedBlockChunkMeta;
public class CitadelChunkData extends TableBasedBlockChunkMeta {
diff --git a/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java b/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java
index afd911ef..676e9656 100644
--- a/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java
+++ b/src/main/java/vg/civcraft/mc/citadel/model/CitadelDAO.java
@@ -14,6 +14,7 @@
import java.util.function.Consumer;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.inventory.meta.ItemMeta;
@@ -22,11 +23,11 @@
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementTypeManager;
import vg.civcraft.mc.civmodcore.CivModCorePlugin;
import vg.civcraft.mc.civmodcore.dao.ManagedDatasource;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.XZWCoord;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.BlockBasedChunkMeta;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableBasedBlockChunkMeta;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableStorageEngine;
-import vg.civcraft.mc.civmodcore.locations.global.WorldIDManager;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.XZWCoord;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.BlockBasedChunkMeta;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedBlockChunkMeta;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableStorageEngine;
+import vg.civcraft.mc.civmodcore.world.locations.global.WorldIDManager;
public class CitadelDAO extends TableStorageEngine {
@@ -151,7 +152,7 @@ public Boolean call() throws Exception {
int maturationTime = rs.getInt(11);
String lore = rs.getString(12);
- short worldID = worldMan.getInternalWorldIdByName(worldName);
+ short worldID = worldMan.getInternalWorldId(Bukkit.getWorld(worldName));
if (worldID == -1) {
logger.severe("Failed to find world id for world with name " + worldName);
return false;
diff --git a/src/main/java/vg/civcraft/mc/citadel/model/CitadelSettingManager.java b/src/main/java/vg/civcraft/mc/citadel/model/CitadelSettingManager.java
index cf6a126a..5327926b 100644
--- a/src/main/java/vg/civcraft/mc/citadel/model/CitadelSettingManager.java
+++ b/src/main/java/vg/civcraft/mc/citadel/model/CitadelSettingManager.java
@@ -14,15 +14,14 @@
import vg.civcraft.mc.citadel.ReinforcementLogic;
import vg.civcraft.mc.citadel.listener.ModeListener;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType;
-import vg.civcraft.mc.civmodcore.playersettings.PlayerSettingAPI;
-import vg.civcraft.mc.civmodcore.playersettings.gui.MenuSection;
-import vg.civcraft.mc.civmodcore.playersettings.impl.BooleanSetting;
-import vg.civcraft.mc.civmodcore.playersettings.impl.BoundedIntegerSetting;
-import vg.civcraft.mc.civmodcore.playersettings.impl.CommandReplySetting;
-import vg.civcraft.mc.civmodcore.playersettings.impl.DecimalFormatSetting;
-import vg.civcraft.mc.civmodcore.playersettings.impl.DisplayLocationSetting;
-import vg.civcraft.mc.civmodcore.playersettings.impl.DisplayLocationSetting.DisplayLocation;
-import vg.civcraft.mc.civmodcore.playersettings.impl.StringSetting;
+import vg.civcraft.mc.civmodcore.players.settings.PlayerSettingAPI;
+import vg.civcraft.mc.civmodcore.players.settings.gui.MenuSection;
+import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting;
+import vg.civcraft.mc.civmodcore.players.settings.impl.BoundedIntegerSetting;
+import vg.civcraft.mc.civmodcore.players.settings.impl.CommandReplySetting;
+import vg.civcraft.mc.civmodcore.players.settings.impl.DecimalFormatSetting;
+import vg.civcraft.mc.civmodcore.players.settings.impl.DisplayLocationSetting;
+import vg.civcraft.mc.civmodcore.players.settings.impl.StringSetting;
public class CitadelSettingManager {
@@ -128,16 +127,16 @@ void initSettings() {
"How long should holograms in information mode remain visible, measured in milli seconds", false, 1000,
30000);
PlayerSettingAPI.registerSetting(hologramDuration, menu);
-
- ctbLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocation.NONE, "Bypass display location"
+
+ ctbLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocationSetting.DisplayLocation.NONE, "Bypass display location"
, "citadelBypassDisplayLocation", new ItemStack(Material.GOLDEN_PICKAXE), "bypass");
PlayerSettingAPI.registerSetting(ctbLocationSetting, menu);
-
- ctiLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocation.SIDEBAR, "Information mode display location"
+
+ ctiLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocationSetting.DisplayLocation.SIDEBAR, "Information mode display location"
, "citadelInfoModeDisplayLocation", new ItemStack(Material.BOOKSHELF), "reinforcement info mode");
PlayerSettingAPI.registerSetting(ctiLocationSetting, menu);
-
- modeLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocation.SIDEBAR, "Citadel mode display location"
+
+ modeLocationSetting = new DisplayLocationSetting(Citadel.getInstance(), DisplayLocationSetting.DisplayLocation.SIDEBAR, "Citadel mode display location"
, "citadelReinModeDisplayLocation", new ItemStack(Material.NETHER_STAR), "Citadel mode");
PlayerSettingAPI.registerSetting(modeLocationSetting, menu);
diff --git a/src/main/java/vg/civcraft/mc/citadel/model/Reinforcement.java b/src/main/java/vg/civcraft/mc/citadel/model/Reinforcement.java
index bf934274..bc7024a2 100644
--- a/src/main/java/vg/civcraft/mc/citadel/model/Reinforcement.java
+++ b/src/main/java/vg/civcraft/mc/citadel/model/Reinforcement.java
@@ -5,7 +5,7 @@
import org.bukkit.Location;
import org.bukkit.entity.Player;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType;
-import vg.civcraft.mc.civmodcore.locations.chunkmeta.block.table.TableBasedDataObject;
+import vg.civcraft.mc.civmodcore.world.locations.chunkmeta.block.table.TableBasedDataObject;
import vg.civcraft.mc.namelayer.GroupManager;
import vg.civcraft.mc.namelayer.NameAPI;
import vg.civcraft.mc.namelayer.group.Group;
diff --git a/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java b/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java
index 87f960c4..425e7a6d 100644
--- a/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java
+++ b/src/main/java/vg/civcraft/mc/citadel/playerstate/AbstractPlayerState.java
@@ -18,9 +18,9 @@
import vg.civcraft.mc.citadel.events.ReinforcementDamageEvent;
import vg.civcraft.mc.citadel.model.Reinforcement;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType;
-import vg.civcraft.mc.civmodcore.playersettings.PlayerSettingAPI;
-import vg.civcraft.mc.civmodcore.playersettings.impl.BooleanSetting;
-import vg.civcraft.mc.civmodcore.util.DelayedItemDrop;
+import vg.civcraft.mc.civmodcore.players.settings.PlayerSettingAPI;
+import vg.civcraft.mc.civmodcore.players.settings.impl.BooleanSetting;
+import vg.civcraft.mc.civmodcore.utilities.DelayedItemDrop;
public abstract class AbstractPlayerState {
diff --git a/src/main/java/vg/civcraft/mc/citadel/playerstate/PatchState.java b/src/main/java/vg/civcraft/mc/citadel/playerstate/PatchState.java
index 288b2dfb..4963d73a 100644
--- a/src/main/java/vg/civcraft/mc/citadel/playerstate/PatchState.java
+++ b/src/main/java/vg/civcraft/mc/citadel/playerstate/PatchState.java
@@ -12,7 +12,7 @@
import vg.civcraft.mc.citadel.events.ReinforcementRepairEvent;
import vg.civcraft.mc.citadel.listener.ModeListener;
import vg.civcraft.mc.citadel.model.Reinforcement;
-import vg.civcraft.mc.civmodcore.itemHandling.ItemMap;
+import vg.civcraft.mc.civmodcore.inventory.items.ItemMap;
public class PatchState extends AbstractPlayerState {
diff --git a/src/main/java/vg/civcraft/mc/citadel/playerstate/ReinforcingState.java b/src/main/java/vg/civcraft/mc/citadel/playerstate/ReinforcingState.java
index fbdb6279..d68447cb 100644
--- a/src/main/java/vg/civcraft/mc/citadel/playerstate/ReinforcingState.java
+++ b/src/main/java/vg/civcraft/mc/citadel/playerstate/ReinforcingState.java
@@ -14,7 +14,7 @@
import vg.civcraft.mc.citadel.events.ReinforcementGroupChangeEvent;
import vg.civcraft.mc.citadel.model.Reinforcement;
import vg.civcraft.mc.citadel.reinforcementtypes.ReinforcementType;
-import vg.civcraft.mc.civmodcore.itemHandling.ItemMap;
+import vg.civcraft.mc.civmodcore.inventory.items.ItemMap;
import vg.civcraft.mc.namelayer.NameAPI;
import vg.civcraft.mc.namelayer.group.Group;
diff --git a/src/main/java/vg/civcraft/mc/citadel/reinforcementtypes/ReinforcementType.java b/src/main/java/vg/civcraft/mc/citadel/reinforcementtypes/ReinforcementType.java
index b4d57aa6..29c86007 100644
--- a/src/main/java/vg/civcraft/mc/citadel/reinforcementtypes/ReinforcementType.java
+++ b/src/main/java/vg/civcraft/mc/citadel/reinforcementtypes/ReinforcementType.java
@@ -47,16 +47,16 @@ public ReinforcementType(float health, double returnChance, ItemStack item, long
this.destructionEffect = destructionEffect;
this.gracePeriod = gracePeriod;
this.deletedGroupMulitplier = deletedGroupMulitplier;
- if (allowsReinforceables != null) {
+ if (!allowsReinforceables.isEmpty()) {
this.allowedReinforceables = new TreeSet<>(allowsReinforceables);
} else {
// can only black list OR white list
- if (disallowedReinforceables != null) {
+ if (!disallowedReinforceables.isEmpty()) {
this.disallowedReinforceables = new TreeSet<>(disallowedReinforceables);
}
}
this.globalBlackList = new TreeSet<>();
- if (globalBlackList != null) {
+ if (!globalBlackList.isEmpty()) {
this.globalBlackList.addAll(globalBlackList);
}
this.id = id;
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index c4909cfe..4c415119 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -197,15 +197,15 @@ hangers_inherit_reinforcement: false
# reinforcement_damageMultiplier is m where BlockDamage = 2 ^ (n/m) where n is equal to the number of days the group has been inactive
reinforcement_damageMultiplier: 365
-#database:
-# ==: vg.civcraft.mc.civmodcore.dao.ManagedDatasource
-# plugin: Citadel
-# user: 'mc_namelayer'
-# password: 'minecraft'
-# host: localhost
-# port: 3306
-# database: namelayer
-# poolsize: 5
-# connection_timeout: 10000
-# idle_timeout: 600000
-# max_lifetime: 7200000
+database:
+ ==: vg.civcraft.mc.civmodcore.dao.DatabaseCredentials
+ plugin: Citadel
+ user: 'mc_namelayer'
+ password: 'minecraft'
+ host: localhost
+ port: 3306
+ database: namelayer
+ poolsize: 5
+ connection_timeout: 10000
+ idle_timeout: 600000
+ max_lifetime: 7200000
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 95628c04..61fdbd40 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -17,120 +17,7 @@ depend:
softdepend:
- HolographicDisplays
description: Citadel allows you to make blocks difficult to break. When a block is reinforced, it must be broken many times before it is destroyed.
-api-version: 1.16
-commands:
- ctr:
- aliases:
- - ctreinforce
- - reinforce
- - protect
- - cprivate
- - lwc
- - private
- usage: /ctr [group]
- description: Enters reinforcing mode. Interacting with blocks in reinforcing mode will reinforce them or modify their reinforcement
- min-args: 0
- max-args: 1
- player-only: true
- ctacid:
- usage: /ctacid
- description: Removes the block above it if used on an acid block
- min-args: 0
- max-args: 0
- player-only: true
- ctf:
- aliases:
- - ctfortify
- - fortify
- usage: /ctf [group]
- description: Enters fortification mode. All blocks placed in fortification mode will automatically be reinforced. If no group is given, your default group will be used
- min-args: 0
- max-args: 1
- player-only: true
- ctb:
- aliases:
- - ctbypass
- - bypass
- usage: /ctb
- description: Toggles bypass state. In bypass state you can break blocks reinforced on groups you have access to in a single break
- min-args: 0
- max-args: 0
- player-only: true
- cti:
- aliases:
- - ctinformation
- - info
- - ctinfo
- usage: /cti
- description: Enters information mode. Interacting with blocks in information mode will show information on their reinforcement
- min-args: 0
- max-args: 0
- player-only: true
- ctin:
- aliases:
- - ctinsecure
- - insecure
- usage: /ctin
- description: Enters insecure mode. Interacting with containers in insecure mode will switch their insecure flag. Insecure containers can interact with hoppers reinforced on a different group. All containers are secure by default
- min-args: 0
- max-args: 0
- player-only: true
- cto:
- aliases:
- - ctoff
- - false
- usage: /cto
- description: Leaves all reinforcement modes
- min-args: 0
- max-args: 0
- player-only: true
- ctur:
- permission: citadel.admin
- player-only: true
- ctar:
- permission: citadel.admin
- aliases:
- - ctareareinforce
- player-only: true
- cte:
- aliases:
- - cteasy
- - toggleeasymode
- player-only: true
- ctdl:
- aliases:
- - reinforcements
- - rein
- usage: /ctdl
- description: Opens a GUI displaying all reinforcement materials
- min-args: 0
- max-args: 0
- player-only: true
- citadelreload:
- aliases:
- - reloadcitadel
- usage: /citadelreload
- description: Reloads Citadel entirely
- min-args: 0
- max-args: 0
- permission: citadel.admin
- ctp:
- aliases:
- - repair
- - patch
- - ctrepair
- - ctpatch
- usage: /ctp
- min-args: 0
- max-args: 0
- player-only: true
- description: Enters patch mode, which allows you to repair reinforcements. Note that repairing reinforcements will also reset their maturation cycle
- cta:
- usage: /cta [group]
- description: Enters advanced fortification mode or adds configurations to it. Advanced configuration mode allows you to place on different groups with different reinforcement types at once
- min-args: 0
- max-args: 1
- player-only: true
+api-version: 1.17
permissions:
citadel.admin:
default: op