added option for end prevent
This commit is contained in:
parent
859733e3dd
commit
ff31215295
@ -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<Listener> listeners() {
|
||||
return List.of(new PreventEnderEyeUseListener());
|
||||
return List.of(new EndPreventListener());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -12,7 +12,11 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
class EndPreventCommand extends ApplianceCommand<EndPrevent> {
|
||||
private final Map<String, Boolean> arguments = Map.of("preventEnd", true, "allowEnd", false);
|
||||
private final Map<String, EndPrevent.State> 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<EndPrevent> {
|
||||
@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
|
||||
));
|
||||
}
|
||||
|
@ -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<EndPrevent> {
|
||||
@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));
|
||||
}
|
||||
}
|
@ -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<EndPrevent> {
|
||||
@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));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user