src/main/java/viper/ButtonControl.java aktualisiert

This commit is contained in:
2025-08-09 09:51:32 +00:00
parent 4b85a3fbba
commit 10c17850d1

View File

@@ -7,14 +7,19 @@ import org.bukkit.NamespacedKey;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.data.Lightable; import org.bukkit.block.data.Lightable;
import org.bukkit.block.data.type.NoteBlock;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.Note;
import org.bukkit.Note.Tone;
import java.util.List; import java.util.List;
import java.util.UUID;
public class ButtonControl extends JavaPlugin { public class ButtonControl extends JavaPlugin {
private ConfigManager configManager; private ConfigManager configManager;
@@ -25,6 +30,9 @@ public class ButtonControl extends JavaPlugin {
configManager = new ConfigManager(this); configManager = new ConfigManager(this);
dataManager = new DataManager(this); dataManager = new DataManager(this);
// Initialize config with defaults if not present
updateConfigWithDefaults();
getServer().getPluginManager().registerEvents(new ButtonListener(this, configManager, dataManager), this); getServer().getPluginManager().registerEvents(new ButtonListener(this, configManager, dataManager), this);
registerRecipes(); registerRecipes();
@@ -33,6 +41,20 @@ public class ButtonControl extends JavaPlugin {
getServer().getScheduler().runTaskTimer(this, this::checkDaylightSensors, 0L, 20L * 10); getServer().getScheduler().runTaskTimer(this, this::checkDaylightSensors, 0L, 20L * 10);
} }
private void updateConfigWithDefaults() {
// Add default note block sound and double note settings if not present
if (!configManager.getConfig().contains("default-note")) {
configManager.getConfig().set("default-note", "PIANO");
}
if (!configManager.getConfig().contains("double-note-enabled")) {
configManager.getConfig().set("double-note-enabled", true);
}
if (!configManager.getConfig().contains("double-note-delay-ms")) {
configManager.getConfig().set("double-note-delay-ms", 1000);
}
configManager.saveConfig();
}
private void registerRecipes() { private void registerRecipes() {
ItemStack controlButton = new ItemStack(Material.STONE_BUTTON); ItemStack controlButton = new ItemStack(Material.STONE_BUTTON);
ItemMeta buttonMeta = controlButton.getItemMeta(); ItemMeta buttonMeta = controlButton.getItemMeta();
@@ -59,9 +81,22 @@ public class ButtonControl extends JavaPlugin {
daylightRecipe.setIngredient('5', Material.DAYLIGHT_DETECTOR); daylightRecipe.setIngredient('5', Material.DAYLIGHT_DETECTOR);
daylightRecipe.setIngredient('8', Material.DAYLIGHT_DETECTOR); daylightRecipe.setIngredient('8', Material.DAYLIGHT_DETECTOR);
Bukkit.addRecipe(daylightRecipe); Bukkit.addRecipe(daylightRecipe);
// Recipe for Control Note Block
ItemStack controlNoteBlock = new ItemStack(Material.NOTE_BLOCK);
ItemMeta noteBlockMeta = controlNoteBlock.getItemMeta();
noteBlockMeta.setDisplayName("§6Steuer-Notenblock");
controlNoteBlock.setItemMeta(noteBlockMeta);
NamespacedKey noteBlockKey = new NamespacedKey(this, "control_noteblock");
ShapedRecipe noteBlockRecipe = new ShapedRecipe(noteBlockKey, controlNoteBlock);
noteBlockRecipe.shape("123", "456", "789");
noteBlockRecipe.setIngredient('2', Material.NOTE_BLOCK);
noteBlockRecipe.setIngredient('5', Material.NOTE_BLOCK);
noteBlockRecipe.setIngredient('8', Material.NOTE_BLOCK);
Bukkit.addRecipe(noteBlockRecipe);
} }
// Prüft alle platzierten Tageslichtsensoren und schaltet Lampen bei Tag aus und bei Nacht an
public void checkDaylightSensors() { public void checkDaylightSensors() {
List<String> allControllers = dataManager.getAllPlacedControllers(); List<String> allControllers = dataManager.getAllPlacedControllers();
for (String controllerLoc : allControllers) { for (String controllerLoc : allControllers) {
@@ -111,17 +146,88 @@ public class ButtonControl extends JavaPlugin {
} }
} }
// Befehlsverarbeitung // Play note block sound for doorbell
public void playDoorbellSound(Location loc, String instrument) {
Block block = loc.getBlock();
if (block.getType() != Material.NOTE_BLOCK) return;
NoteBlock noteBlock = (NoteBlock) block.getBlockData();
try {
// Set instrument based on config or player preference
org.bukkit.Instrument bukkitInstrument = org.bukkit.Instrument.valueOf(instrument.toUpperCase());
noteBlock.setInstrument(bukkitInstrument);
noteBlock.setNote(new Note(0, Tone.C, false)); // Default to C note
block.setBlockData(noteBlock);
loc.getWorld().playSound(loc, bukkitInstrument.getSound(), 1.0f, 1.0f);
// Check if double note is enabled
if (configManager.getConfig().getBoolean("double-note-enabled", true)) {
// Schedule the second note after the configured delay in milliseconds
int delayMs = configManager.getConfig().getInt("double-note-delay-ms", 1000);
long delayTicks = (long) (delayMs / 50.0); // Convert milliseconds to ticks (1000 ms = 20 ticks)
getServer().getScheduler().runTaskLater(this, () -> {
if (block.getType() == Material.NOTE_BLOCK) {
loc.getWorld().playSound(loc, bukkitInstrument.getSound(), 1.0f, 1.0f);
}
}, delayTicks);
}
} catch (IllegalArgumentException e) {
getLogger().warning("Ungültiges Instrument: " + instrument);
}
}
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("bc") && args.length > 0 && args[0].equalsIgnoreCase("info")) { if (command.getName().equalsIgnoreCase("bc")) {
sender.sendMessage("§6[ButtonControl] §7Informationen zum Plugin:"); if (args.length == 0) {
sender.sendMessage("§eVersion: §f" + getDescription().getVersion()); sender.sendMessage("§6[ButtonControl] §7Verwende: /bc <info|reload|note>");
sender.sendMessage("§eErsteller: §fM_Viper"); return true;
sender.sendMessage("§ePlugin: §fButtonControl"); }
sender.sendMessage("§eGetestet für Minecraft: §f1.21.5 - 1.21.8");
sender.sendMessage("§eWeitere Infos: §fTüren & Lampen mit Buttons oder Tageslichtsensoren steuern"); if (args[0].equalsIgnoreCase("info")) {
return true; sender.sendMessage("§6[ButtonControl] §7Informationen zum Plugin:");
sender.sendMessage("§eVersion: §f" + getDescription().getVersion());
sender.sendMessage("§eErsteller: §fM_Viper");
sender.sendMessage("§ePlugin: §fButtonControl");
sender.sendMessage("§eGetestet für Minecraft: §f1.21.5 - 1.21.8");
sender.sendMessage("§eWeitere Infos: §fTüren, Lampen & Notenblöcke mit Buttons oder Tageslichtsensoren steuern");
return true;
}
if (args[0].equalsIgnoreCase("reload")) {
if (!sender.hasPermission("buttoncontrol.reload")) {
sender.sendMessage(configManager.getMessage("keine-berechtigung"));
return true;
}
configManager.reloadConfig();
updateConfigWithDefaults(); // Ensure new defaults are added without overwriting
dataManager.reloadData();
sender.sendMessage(configManager.getMessage("konfiguration-reloaded"));
return true;
}
if (args[0].equalsIgnoreCase("note") && sender instanceof Player) {
Player player = (Player) sender;
if (!player.hasPermission("buttoncontrol.note")) {
player.sendMessage(configManager.getMessage("keine-berechtigung"));
return true;
}
if (args.length < 2) {
sender.sendMessage("§6[ButtonControl] §7Verwende: /bc note <Instrument>");
sender.sendMessage("§7Verfügbare Instrumente: PIANO, BASS_DRUM, SNARE, STICKS, BASS_GUITAR, FLUTE, BELL, GUITAR, CHIME, XYLOPHONE, etc.");
return true;
}
String instrument = args[1].toUpperCase();
try {
org.bukkit.Instrument.valueOf(instrument);
dataManager.setPlayerInstrument(player.getUniqueId(), instrument);
sender.sendMessage(String.format(configManager.getMessage("instrument-gesetzt"), instrument));
} catch (IllegalArgumentException e) {
sender.sendMessage(configManager.getMessage("ungueltiges-instrument"));
}
return true;
}
} }
return false; return false;
} }