added double doors

This commit is contained in:
Elias Müller 2024-08-30 23:58:01 +02:00
parent ebab4cbd34
commit 2d696dcdbd
6 changed files with 117 additions and 5 deletions

View File

@ -10,6 +10,7 @@ import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
import eu.mhsl.craftattack.spawn.appliances.debug.Debug;
import eu.mhsl.craftattack.spawn.appliances.displayName.DisplayName;
import eu.mhsl.craftattack.spawn.appliances.doubeDoor.DoubleDoor;
import eu.mhsl.craftattack.spawn.appliances.event.Event;
import eu.mhsl.craftattack.spawn.appliances.fleischerchest.Fleischerchest;
import eu.mhsl.craftattack.spawn.appliances.help.Help;
@ -75,7 +76,8 @@ public final class Main extends JavaPlugin {
new AutoShulker(),
new AntiSignEdit(),
new HotbarRefill(),
new ChatMention()
new ChatMention(),
new DoubleDoor()
);
Main.logger.info("Loading appliances...");

View File

@ -0,0 +1,44 @@
package eu.mhsl.craftattack.spawn.appliances.doubeDoor;
import eu.mhsl.craftattack.spawn.appliance.Appliance;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Door;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class DoubleDoor extends Appliance {
public void openNextDoor(Block block) {
BlockData clickedData = block.getBlockData();
if (!(clickedData instanceof Door clickedDoor)) return;
BlockFace neighborFace = getNeighborFace(clickedDoor.getFacing(), clickedDoor.getHinge());
Block neighbourBlock = block.getRelative(neighborFace);
BlockData neighbourData = neighbourBlock.getBlockData();
if(!(neighbourData instanceof Door neighbourDoor)) return;
if(!(neighbourDoor.getFacing() == clickedDoor.getFacing())) return;
if(neighbourDoor.getHinge() == clickedDoor.getHinge()) return;
neighbourDoor.setOpen(!clickedDoor.isOpen());
neighbourBlock.setBlockData(neighbourDoor);
}
private @NotNull BlockFace getNeighborFace(BlockFace face, Door.Hinge hinge) {
return switch(face) {
case EAST -> (hinge == Door.Hinge.RIGHT) ? BlockFace.NORTH : BlockFace.SOUTH;
case WEST -> (hinge == Door.Hinge.RIGHT) ? BlockFace.SOUTH : BlockFace.NORTH;
case SOUTH -> (hinge == Door.Hinge.RIGHT) ? BlockFace.EAST : BlockFace.WEST;
case NORTH -> (hinge == Door.Hinge.RIGHT) ? BlockFace.WEST : BlockFace.EAST;
default -> throw new IllegalStateException(String.format("BlockFace '%s' of clicked door is not valid!", face));
};
}
@Override
protected @NotNull List<Listener> eventHandlers() {
return List.of(new OnDoorInteractListener());
}
}

View File

@ -0,0 +1,24 @@
package eu.mhsl.craftattack.spawn.appliances.doubeDoor;
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
import org.bukkit.block.Block;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlot;
import java.util.Objects;
public class OnDoorInteractListener extends ApplianceListener<DoubleDoor> {
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
if(!event.hasBlock()) return;
if(!Objects.equals(event.getHand(), EquipmentSlot.HAND)) return;
if(!event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) return;
Block clickedBlock = event.getClickedBlock();
if(clickedBlock == null) return;
if(!Settings.instance().getSetting(event.getPlayer(), Settings.Key.DoubleDoors, Boolean.class)) return;
getAppliance().openNextDoor(clickedBlock);
}
}

View File

@ -31,6 +31,7 @@ public class Settings extends Appliance {
SignEdit,
HotbarReplacer,
ChatMentions,
DoubleDoors,
}
public static Settings instance() {
@ -57,7 +58,8 @@ public class Settings extends Appliance {
new ChatMentionSetting(),
new ShowJoinAndLeaveMessagesSetting(),
new TechnicalTablistSetting(),
new SettingsShortcutSetting()
new SettingsShortcutSetting(),
new DoubleDoorSetting()
);
settings.forEach(setting -> setting.initializeFromPlayer(player));

View File

@ -0,0 +1,38 @@
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting;
import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting;
import org.bukkit.Material;
public class DoubleDoorSetting extends BoolSetting implements CategorizedSetting {
public DoubleDoorSetting() {
super(Settings.Key.DoubleDoors);
}
@Override
protected String title() {
return "Automatische Doppeltüren";
}
@Override
protected String description() {
return "Öffnet und schließt die zweite Hälfte einer Doppeltür automatisch";
}
@Override
protected Material icon() {
return Material.OAK_DOOR;
}
@Override
protected Boolean defaultValue() {
return false;
}
@Override
public SettingCategory category() {
return SettingCategory.Gameplay;
}
}

View File

@ -43,7 +43,10 @@ public class Whitelist extends Appliance {
public void integrityCheck(Player player) throws DisconnectInfo.Throwable {
try {
Main.instance().getLogger().info(String.format("Running integrityCheck for %s", player.getName()));
UserData user = this.fetchUserData(player.getUniqueId());
boolean overrideCheck = localConfig().getBoolean("overrideIntegrityCheck", false);
UserData user = overrideCheck
? new UserData(player.getUniqueId(), player.getName(), "", "", 0L, 0L)
: this.fetchUserData(player.getUniqueId());
if(timestampRelevant(user.banned_until)) {
Instant bannedDate = new Date(user.banned_until * 1000L)
@ -100,8 +103,7 @@ public class Whitelist extends Appliance {
URIBuilder uriBuilder = new URIBuilder(apiEndpoint);
uriBuilder.addParameter("uuid", uuid.toString());
try {
HttpClient client = HttpClient.newHttpClient();
try(HttpClient client = HttpClient.newHttpClient()) {
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(uriBuilder.build())
.header("Content-Type", "application/json")