diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Building.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Building.java index 42e8c879..181815b3 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Building.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Building.java @@ -3,9 +3,11 @@ import de.flo56958.minetinker.MineTinker; import de.flo56958.minetinker.api.events.MTPlayerInteractEvent; import de.flo56958.minetinker.data.ToolType; -import de.flo56958.minetinker.modifiers.Modifier; +import de.flo56958.minetinker.modifiers.PlayerConfigurableModifier; import de.flo56958.minetinker.utils.ConfigurationManager; import de.flo56958.minetinker.utils.data.DataHandler; +import de.flo56958.minetinker.utils.playerconfig.PlayerConfigurationManager; +import de.flo56958.minetinker.utils.playerconfig.PlayerConfigurationOption; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; @@ -22,16 +24,17 @@ import org.jetbrains.annotations.NotNull; import java.io.File; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Comparator; import java.util.List; -public class Building extends Modifier implements Listener { +public class Building extends PlayerConfigurableModifier implements Listener { private static Building instance; private boolean useDurability; private boolean giveExpOnUse; private int expAmount; - private boolean solvePlayerOverlap; private Building() { super(MineTinker.getPlugin()); @@ -69,7 +72,6 @@ public void reload() { config.addDefault("ModifierItemMaterial", Material.GRASS_BLOCK.name()); config.addDefault("UseDurability", true); config.addDefault("GiveExpOnUse", true); - config.addDefault("SolvePlayerOverlap", true); config.addDefault("ExpAmount", 1); config.addDefault("EnchantCost", 15); @@ -86,18 +88,19 @@ public void reload() { this.useDurability = config.getBoolean("UseDurability", true); this.giveExpOnUse = config.getBoolean("GiveExpOnUse", true); this.expAmount = config.getInt("ExpAmount", 1); - this.solvePlayerOverlap = config.getBoolean("SolvePlayerOverlap", true); } @EventHandler(ignoreCancelled = true) public void onPlace(@NotNull final MTPlayerInteractEvent event) { + if (event.getEvent().getAction() != Action.RIGHT_CLICK_BLOCK) return; + final Player player = event.getPlayer(); if (!player.hasPermission(getUsePermission())) return; final ItemStack tool = event.getTool(); if (!modManager.hasMod(tool, this)) return; - if (event.getEvent().getAction() != Action.RIGHT_CLICK_BLOCK) return; + if (!PlayerConfigurationManager.getInstance().getBoolean(player, ENABLED)) return; final Block block = event.getEvent().getClickedBlock(); if (block == null) return; @@ -132,7 +135,7 @@ public void onPlace(@NotNull final MTPlayerInteractEvent event) { if (this.giveExpOnUse) modManager.addExp(player, tool, this.expAmount, true); - if (this.solvePlayerOverlap) { + if (PlayerConfigurationManager.getInstance().getBoolean(player, SOLVE_PLAYER_OVERLAP)) { // Teleport player one block up if he is inside the block final BoundingBox blockBB = toFill.getBoundingBox(); final BoundingBox playerBB = player.getBoundingBox(); @@ -150,4 +153,19 @@ public void onPlace(@NotNull final MTPlayerInteractEvent event) { event.getEvent().setUseInteractedBlock(Event.Result.DENY); // prevent vanilla behavior by cancelling the event toPlace.setAmount(toPlace.getAmount() - (isDoubleSlab ? 2 : 1)); } + + private final PlayerConfigurationOption ENABLED = + new PlayerConfigurationOption(this, "enabled", PlayerConfigurationOption.Type.BOOLEAN, + "enabled", true); + + private final PlayerConfigurationOption SOLVE_PLAYER_OVERLAP = + new PlayerConfigurationOption(this, "solve-player-overlap", PlayerConfigurationOption.Type.BOOLEAN, + "solve-player-overlap", true); + + @Override + public List getPCIOptions() { + final ArrayList playerConfigurationOptions = new ArrayList<>(List.of(ENABLED, SOLVE_PLAYER_OVERLAP)); + playerConfigurationOptions.sort(Comparator.comparing(PlayerConfigurationOption::displayName)); + return playerConfigurationOptions; + } } diff --git a/src/main/java/de/flo56958/minetinker/modifiers/types/Ender.java b/src/main/java/de/flo56958/minetinker/modifiers/types/Ender.java index 9033db9e..fd92c09e 100644 --- a/src/main/java/de/flo56958/minetinker/modifiers/types/Ender.java +++ b/src/main/java/de/flo56958/minetinker/modifiers/types/Ender.java @@ -5,11 +5,13 @@ import de.flo56958.minetinker.api.events.MTProjectileHitEvent; import de.flo56958.minetinker.api.events.MTProjectileLaunchEvent; import de.flo56958.minetinker.data.ToolType; -import de.flo56958.minetinker.modifiers.Modifier; +import de.flo56958.minetinker.modifiers.PlayerConfigurableModifier; import de.flo56958.minetinker.utils.ChatWriter; import de.flo56958.minetinker.utils.ConfigurationManager; import de.flo56958.minetinker.utils.LanguageManager; import de.flo56958.minetinker.utils.data.DataHandler; +import de.flo56958.minetinker.utils.playerconfig.PlayerConfigurationManager; +import de.flo56958.minetinker.utils.playerconfig.PlayerConfigurationOption; import org.bukkit.*; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.*; @@ -28,7 +30,7 @@ import java.io.File; import java.util.*; -public class Ender extends Modifier implements Listener { +public class Ender extends PlayerConfigurableModifier implements Listener { private static Ender instance; private boolean hasSound; @@ -36,7 +38,6 @@ public class Ender extends Modifier implements Listener { private boolean giveNauseaOnUse; private int nauseaDuration; private boolean giveBlindnessOnUse; - private boolean requireSneaking; private int blindnessDuration; private Ender() { @@ -107,7 +108,6 @@ public void reload() { this.nauseaDuration = config.getInt("NauseaDuration", 5) * 20; this.giveBlindnessOnUse = config.getBoolean("GiveBlindnessOnUse", true); this.blindnessDuration = config.getInt("BlindnessDuration", 3) * 20; - this.requireSneaking = config.getBoolean("RequireSneaking", true); } @EventHandler(ignoreCancelled = true) @@ -119,7 +119,7 @@ public void effect(EntityShootBowEvent event) { ItemStack tool = event.getBow(); if (!player.hasPermission(getUsePermission())) return; if (!modManager.hasMod(tool, this)) return; - if (this.requireSneaking && !player.isSneaking()) return; + if (PlayerConfigurationManager.getInstance().getBoolean(player, REQUIRE_SNEAKING) && !player.isSneaking()) return; arrow.setMetadata(this.getKey(), new FixedMetadataValue(this.getSource(), 0)); @@ -136,7 +136,7 @@ public void effect(final MTProjectileLaunchEvent event) { if (!player.hasPermission(getUsePermission())) return; if (!modManager.hasMod(tool, this)) return; - if (this.requireSneaking && !player.isSneaking()) return; + if (PlayerConfigurationManager.getInstance().getBoolean(player, REQUIRE_SNEAKING) && !player.isSneaking()) return; trident.setMetadata(this.getKey(), new FixedMetadataValue(this.getSource(), 0)); @@ -304,4 +304,13 @@ private void spawnParticles(Player player, Location oldLoc) { cloud2.getLocation().setPitch(90); } } + + private final PlayerConfigurationOption REQUIRE_SNEAKING = + new PlayerConfigurationOption(this, "require-sneaking", PlayerConfigurationOption.Type.BOOLEAN, + "require-sneaking", true); + + @Override + public List getPCIOptions() { + return List.of(REQUIRE_SNEAKING); + } }