diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPrevent.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPrevent.java index 085cb39..7d7e188 100644 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPrevent.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPrevent.java @@ -3,33 +3,57 @@ package eu.mhsl.craftattack.spawn.common.appliances.tooling.endPrevent; import eu.mhsl.craftattack.core.appliance.Appliance; import eu.mhsl.craftattack.core.appliance.ApplianceCommand; import eu.mhsl.craftattack.core.config.Configuration; +import org.bukkit.Bukkit; +import org.bukkit.World; 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; + private final String endPreventKey = "endPrevent"; + private State endPreventState; + private final World endWorld = Bukkit.getWorlds().stream().filter(world -> world.getEnvironment().equals(World.Environment.THE_END)).findFirst().orElseThrow(); + + public enum State { + OPEN, + CLOSED, + NO_OUTER + } public EndPrevent() { super("endPrevent"); - this.endDisabled = this.localConfig().getBoolean(this.endDisabledKey); + this.endPreventState = State.valueOf(this.localConfig().getString(this.endPreventKey, State.OPEN.name())); + this.updateEndBorder(); } - public void setEndDisabled(boolean disabled) { - this.localConfig().set(this.endDisabledKey, disabled); + private void updateEndBorder() { + if(this.endPreventState == State.NO_OUTER) this.endWorld.getWorldBorder().setSize(500); + if(this.endPreventState == State.OPEN) this.endWorld.getWorldBorder().setSize(this.endWorld.getWorldBorder().getMaxSize()); + } + + public void setEndState(State state) { + this.localConfig().set(this.endPreventKey, state.name()); Configuration.saveChanges(); - this.endDisabled = disabled; + this.endPreventState = state; + this.updateEndBorder(); } - public boolean isEndDisabled() { - return this.endDisabled; + public boolean isEndClosed() { + return this.endPreventState.equals(State.CLOSED); + } + + public boolean isOnlyInner() { + return this.endPreventState.equals(State.NO_OUTER); + } + + public State getEndPreventState() { + return this.endPreventState; } @Override protected @NotNull List listeners() { - return List.of(new PreventEnderEyeUseListener()); + return List.of(new EndPreventListener()); } @Override diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPreventCommand.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPreventCommand.java index f62c28f..8bfe7c6 100644 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPreventCommand.java +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPreventCommand.java @@ -12,7 +12,11 @@ import java.util.List; import java.util.Map; class EndPreventCommand extends ApplianceCommand { - private final Map arguments = Map.of("preventEnd", true, "allowEnd", false); + private final Map arguments = Map.of( + "preventEnd", EndPrevent.State.CLOSED, + "allowEnd", EndPrevent.State.OPEN, + "onlyInnerEnd", EndPrevent.State.NO_OUTER + ); public EndPreventCommand() { super("endPrevent"); @@ -21,11 +25,11 @@ class EndPreventCommand extends ApplianceCommand { @Override protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception { if(args.length == 1 && this.arguments.containsKey(args[0])) { - this.getAppliance().setEndDisabled(this.arguments.get(args[0])); + this.getAppliance().setEndState(this.arguments.get(args[0])); sender.sendMessage(Component.text("Setting updated!", NamedTextColor.GREEN)); } sender.sendMessage(Component.text( - String.format("The End is %s!", this.getAppliance().isEndDisabled() ? "closed" : "open"), + String.format("The End is now on '%s'!", this.getAppliance().getEndPreventState().name()), NamedTextColor.GOLD )); } diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPreventListener.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPreventListener.java new file mode 100644 index 0000000..c15140e --- /dev/null +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/EndPreventListener.java @@ -0,0 +1,49 @@ +package eu.mhsl.craftattack.spawn.common.appliances.tooling.endPrevent; + +import com.destroystokyo.paper.event.player.PlayerTeleportEndGatewayEvent; +import eu.mhsl.craftattack.core.appliance.ApplianceListener; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerPortalEvent; + +class EndPreventListener 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; + + this.cancelIfClosed(event, event.getPlayer()); + } + + @EventHandler + public void onPlayerPortal(PlayerPortalEvent event) { + if(!event.getTo().getWorld().getEnvironment().equals(World.Environment.THE_END)) return; + + this.cancelIfClosed(event, event.getPlayer()); + } + + @EventHandler + public void onPlayerEndGateway(PlayerTeleportEndGatewayEvent event) { + this.cancelIfOnlyInner(event, event.getPlayer()); + } + + private void cancelIfClosed(Cancellable event, Player p) { + if(!this.getAppliance().isEndClosed()) return; + event.setCancelled(true); + p.sendActionBar(Component.text("Das End ist nicht freigeschaltet!", NamedTextColor.RED)); + } + + private void cancelIfOnlyInner(Cancellable event, Player p) { + if(!this.getAppliance().isOnlyInner()) return; + event.setCancelled(true); + p.sendActionBar(Component.text("Das Outer End ist nicht freigeschaltet!", NamedTextColor.RED)); + } +} diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/PreventEnderEyeUseListener.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/PreventEnderEyeUseListener.java deleted file mode 100644 index 425a527..0000000 --- a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/tooling/endPrevent/PreventEnderEyeUseListener.java +++ /dev/null @@ -1,23 +0,0 @@ -package eu.mhsl.craftattack.spawn.common.appliances.tooling.endPrevent; - -import eu.mhsl.craftattack.core.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; - -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(!this.getAppliance().isEndDisabled()) return; - - event.setCancelled(true); - event.getPlayer().sendActionBar(Component.text("Das End ist noch nicht freigeschaltet!", NamedTextColor.RED)); - } -}