added knocking doors
This commit is contained in:
parent
2d696dcdbd
commit
077c40f29d
@ -16,6 +16,7 @@ import eu.mhsl.craftattack.spawn.appliances.fleischerchest.Fleischerchest;
|
|||||||
import eu.mhsl.craftattack.spawn.appliances.help.Help;
|
import eu.mhsl.craftattack.spawn.appliances.help.Help;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.hotbarRefill.HotbarRefill;
|
import eu.mhsl.craftattack.spawn.appliances.hotbarRefill.HotbarRefill;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.kick.Kick;
|
import eu.mhsl.craftattack.spawn.appliances.kick.Kick;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.knockDoor.KnockDoor;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed;
|
import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.panicBan.PanicBan;
|
import eu.mhsl.craftattack.spawn.appliances.panicBan.PanicBan;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.playerlimit.PlayerLimit;
|
import eu.mhsl.craftattack.spawn.appliances.playerlimit.PlayerLimit;
|
||||||
@ -77,7 +78,8 @@ public final class Main extends JavaPlugin {
|
|||||||
new AntiSignEdit(),
|
new AntiSignEdit(),
|
||||||
new HotbarRefill(),
|
new HotbarRefill(),
|
||||||
new ChatMention(),
|
new ChatMention(),
|
||||||
new DoubleDoor()
|
new DoubleDoor(),
|
||||||
|
new KnockDoor()
|
||||||
);
|
);
|
||||||
|
|
||||||
Main.logger.info("Loading appliances...");
|
Main.logger.info("Loading appliances...");
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.knockDoor;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.Main;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.SelectSetting;
|
||||||
|
import eu.mhsl.craftattack.spawn.appliances.settings.settings.KnockDoorSetting;
|
||||||
|
import org.bukkit.*;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class KnockDoor extends Appliance {
|
||||||
|
public void knockAtDoor(Player knockingPlayer, Block knockedBlock) {
|
||||||
|
SelectSetting.Options.Option setting = Settings.instance().getSetting(knockingPlayer, Settings.Key.KnockDoors, SelectSetting.Options.Option.class);
|
||||||
|
if(setting.is(KnockDoorSetting.disabled)) return;
|
||||||
|
|
||||||
|
if(setting.is(KnockDoorSetting.knockSingleTime)) {
|
||||||
|
playSound(knockedBlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(setting.is(KnockDoorSetting.knockThreeTimes)) {
|
||||||
|
String metadataKey = new NamespacedKey(Main.instance(), KnockDoor.class.getName()).getNamespace();
|
||||||
|
if(knockingPlayer.hasMetadata(metadataKey)) return;
|
||||||
|
knockingPlayer.setMetadata(metadataKey, new FixedMetadataValue(Main.instance(), 0));
|
||||||
|
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
int timesKnocked = knockingPlayer.getMetadata(metadataKey).getFirst().asInt();
|
||||||
|
if(timesKnocked >= 3) {
|
||||||
|
knockingPlayer.removeMetadata(metadataKey, Main.instance());
|
||||||
|
cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
playSound(knockedBlock);
|
||||||
|
knockingPlayer.setMetadata(metadataKey, new FixedMetadataValue(Main.instance(), timesKnocked + 1));
|
||||||
|
}
|
||||||
|
}.runTaskTimer(Main.instance(), 0, 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void playSound(Block knockedBlock) {
|
||||||
|
Location knockLocation = knockedBlock.getLocation();
|
||||||
|
Sound sound = knockedBlock.getType() == Material.IRON_DOOR
|
||||||
|
? Sound.ENTITY_ZOMBIE_ATTACK_IRON_DOOR
|
||||||
|
: Sound.ITEM_SHIELD_BLOCK;
|
||||||
|
|
||||||
|
knockLocation.getWorld().playSound(knockLocation, sound, SoundCategory.PLAYERS, 1f, 1f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected @NotNull List<Listener> eventHandlers() {
|
||||||
|
return List.of(new KnockDoorListener());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package eu.mhsl.craftattack.spawn.appliances.knockDoor;
|
||||||
|
|
||||||
|
import eu.mhsl.craftattack.spawn.appliance.ApplianceListener;
|
||||||
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.data.type.Door;
|
||||||
|
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 KnockDoorListener extends ApplianceListener<KnockDoor> {
|
||||||
|
@EventHandler
|
||||||
|
public void onKnock(PlayerInteractEvent event) {
|
||||||
|
if(!event.getAction().equals(Action.LEFT_CLICK_BLOCK)) return;
|
||||||
|
if(!Objects.equals(event.getHand(), EquipmentSlot.HAND)) return;
|
||||||
|
if(event.getPlayer().getGameMode() != GameMode.SURVIVAL) return;
|
||||||
|
Block block = event.getClickedBlock();
|
||||||
|
if(block == null) return;
|
||||||
|
if(!(block.getBlockData() instanceof Door)) return;
|
||||||
|
getAppliance().knockAtDoor(event.getPlayer(), block);
|
||||||
|
}
|
||||||
|
}
|
@ -32,6 +32,7 @@ public class Settings extends Appliance {
|
|||||||
HotbarReplacer,
|
HotbarReplacer,
|
||||||
ChatMentions,
|
ChatMentions,
|
||||||
DoubleDoors,
|
DoubleDoors,
|
||||||
|
KnockDoors,
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Settings instance() {
|
public static Settings instance() {
|
||||||
@ -59,7 +60,8 @@ public class Settings extends Appliance {
|
|||||||
new ShowJoinAndLeaveMessagesSetting(),
|
new ShowJoinAndLeaveMessagesSetting(),
|
||||||
new TechnicalTablistSetting(),
|
new TechnicalTablistSetting(),
|
||||||
new SettingsShortcutSetting(),
|
new SettingsShortcutSetting(),
|
||||||
new DoubleDoorSetting()
|
new DoubleDoorSetting(),
|
||||||
|
new KnockDoorSetting()
|
||||||
);
|
);
|
||||||
|
|
||||||
settings.forEach(setting -> setting.initializeFromPlayer(player));
|
settings.forEach(setting -> setting.initializeFromPlayer(player));
|
||||||
|
@ -0,0 +1,50 @@
|
|||||||
|
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.SelectSetting;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
public class KnockDoorSetting extends SelectSetting implements CategorizedSetting {
|
||||||
|
private static final String namespace = KnockDoorSetting.class.getSimpleName().toLowerCase(Locale.ROOT);
|
||||||
|
public static Options.Option disabled = new Options.Option("Deaktiviert", new NamespacedKey(namespace, "disabled"));
|
||||||
|
public static Options.Option knockSingleTime = new Options.Option("Einmal an der Tür anklopfen", new NamespacedKey(namespace, "single"));
|
||||||
|
public static Options.Option knockThreeTimes = new Options.Option("Dreimal an der Tür anklopfen", new NamespacedKey(namespace, "three"));
|
||||||
|
|
||||||
|
public KnockDoorSetting() {
|
||||||
|
super(
|
||||||
|
Settings.Key.KnockDoors,
|
||||||
|
new Options(List.of(disabled, knockSingleTime, knockThreeTimes))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SettingCategory category() {
|
||||||
|
return SettingCategory.Gameplay;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String title() {
|
||||||
|
return "Klopfen an Türen";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String description() {
|
||||||
|
return "Klopft durch das schlagen an eine Tür an.";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Material icon() {
|
||||||
|
return Material.BELL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Options.Option defaultValue() {
|
||||||
|
return disabled;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user