diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/endPrevent/EndPrevent.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/endPrevent/EndPrevent.java new file mode 100644 index 0000000..2013ad9 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/endPrevent/EndPrevent.java @@ -0,0 +1,39 @@ +package eu.mhsl.craftattack.spawn.appliances.endPrevent; + +import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import eu.mhsl.craftattack.spawn.config.Configuration; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class EndPrevent extends Appliance { + private final String endDisabledKey = "endDisabled"; + private boolean endDisabled; + + public EndPrevent() { + super("endPrevent"); + this.endDisabled = localConfig().getBoolean(endDisabledKey); + } + + public void setEndDisabled(boolean disabled) { + localConfig().set(endDisabledKey, disabled); + Configuration.saveChanges(); + this.endDisabled = disabled; + } + + public boolean isEndDisabled() { + return endDisabled; + } + + @Override + protected @NotNull List listeners() { + return List.of(new PreventEnderEyeUseListener()); + } + + @Override + protected @NotNull List> commands() { + return List.of(new EndPreventCommand()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/endPrevent/EndPreventCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/endPrevent/EndPreventCommand.java new file mode 100644 index 0000000..863b703 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/endPrevent/EndPreventCommand.java @@ -0,0 +1,37 @@ +package eu.mhsl.craftattack.spawn.appliances.endPrevent; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.Map; + +public class EndPreventCommand extends ApplianceCommand { + private final Map arguments = Map.of("preventEnd", true, "allowEnd", false); + + public EndPreventCommand() { + super("endPrevent"); + } + + @Override + protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception { + if(args.length == 1 && arguments.containsKey(args[0])) { + getAppliance().setEndDisabled(arguments.get(args[0])); + sender.sendMessage(Component.text("Setting updated!", NamedTextColor.GREEN)); + } + sender.sendMessage(Component.text( + String.format("The End is %s!", getAppliance().isEndDisabled() ? "open" : "closed"), + NamedTextColor.GOLD + )); + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + return arguments.keySet().stream().toList(); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/endPrevent/PreventEnderEyeUseListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/endPrevent/PreventEnderEyeUseListener.java new file mode 100644 index 0000000..078c848 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/endPrevent/PreventEnderEyeUseListener.java @@ -0,0 +1,23 @@ +package eu.mhsl.craftattack.spawn.appliances.endPrevent; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerInteractEvent; + +public class PreventEnderEyeUseListener extends ApplianceListener { + @EventHandler + public void onEnderEyeInteraction(PlayerInteractEvent event) { + if(event.getClickedBlock() == null) return; + if(!event.getClickedBlock().getType().equals(Material.END_PORTAL_FRAME)) return; + if(event.getItem() == null) return; + if(!event.getItem().getType().equals(Material.ENDER_EYE)) return; + + if(!getAppliance().isEndDisabled()) return; + + event.setCancelled(true); + event.getPlayer().sendActionBar(Component.text("Das End ist noch nicht freigeschaltet!", NamedTextColor.RED)); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/MaintenanceCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/MaintenanceCommand.java index d23e3e2..38ad1d9 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/MaintenanceCommand.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/MaintenanceCommand.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Map; public class MaintenanceCommand extends ApplianceCommand { - Map arguments = Map.of("enable", true, "disable", false); + private final Map arguments = Map.of("enable", true, "disable", false); public MaintenanceCommand() { super("maintanance"); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index a6240d1..476f32b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -66,4 +66,7 @@ packselect: author: "Pack Author(s)" url: "https://example.com/download/pack.zip" hash: "" # SHA1 hash of ZIP file (will be auto determined by the server on startup when not set) - icon: "" # base64 player-head texture, can be obtained from sites like https://minecraft-heads.com/ under developers > Value \ No newline at end of file + icon: "" # base64 player-head texture, can be obtained from sites like https://minecraft-heads.com/ under developers > Value + +endPrevent: + endDisabled: true \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index dd31f27..b4a0607 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -47,3 +47,4 @@ commands: aliases: [ "sc" ] acInform: infobar: + endPrevent: