Enable Hopper Minecart to pick custom discs while being played

This commit is contained in:
Athar42
2024-10-02 15:10:05 +02:00
parent e9f1015ab4
commit e8c0e13094
5 changed files with 34 additions and 9 deletions

View File

@@ -12,6 +12,6 @@ mod_id=customdiscsplugin
voicechat_api_version=2.5.0
command_api_version=9.5.3
plugin_version=3.2a
plugin_version=3.2.1a
maven_group=me.Navoei.customdiscsplugin
archives_base_name=custom-discs

View File

@@ -1,4 +1,4 @@
# Custom Discs v3.2a for Paper 1.21.1 ("a" for Athar's fork release from the original plugin here : https://github.com/Navoei/CustomDiscs )
# Custom Discs v3.2.1a for Paper 1.21.1 ("a" for Athar's fork release from the original plugin here : https://github.com/Navoei/CustomDiscs )
A Paper fork of henkelmax's Audio Player.
- Play custom music discs using the Simple Voice Chat API. (The voice chat mod is required on the client and server.)

View File

@@ -150,7 +150,7 @@ public final class CustomDiscs extends JavaPlugin {
}
} catch (IOException e) {
e.printStackTrace(); // So they notice
log.severe("Failed to create lang.yml for MyHomes.");
log.severe("Failed to create lang.yml for CustomDiscs.");
log.severe("Now disabling...");
this.setEnabled(false); // Without it loaded, we can't send them messages
}
@@ -167,7 +167,7 @@ public final class CustomDiscs extends JavaPlugin {
try {
conf.save(getLangFile());
} catch (IOException e) {
log.log(Level.WARNING, "Failed to save lang.yml for MyHomes");
log.log(Level.WARNING, "Failed to save lang.yml for CustomDiscs");
log.log(Level.WARNING, "Now disabling...");
e.printStackTrace();
}

View File

@@ -8,7 +8,7 @@ import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Container;
//import org.bukkit.block.Container;
import org.bukkit.block.Jukebox;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -24,16 +24,24 @@ import org.bukkit.persistence.PersistentDataType;
import java.nio.file.Path;
import java.util.Objects;
import org.bukkit.entity.minecart.HopperMinecart;
import org.bukkit.inventory.InventoryHolder;
// Used only if logger is needed
//import java.util.logging.Logger;
//import org.bukkit.Bukkit;
public class HopperManager implements Listener {
CustomDiscs customDiscs = CustomDiscs.getInstance();
PlayerManager playerManager = PlayerManager.instance();
//private static final Logger logger = Bukkit.getLogger(); // or Logger.getLogger("Minecraft");
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onJukeboxInsertFromHopper(InventoryMoveItemEvent event) {
//logger.warning("Enter : onJukeboxInsertFromHopper");
if (event.getDestination().getLocation() == null) return;
if (!event.getDestination().getType().equals(InventoryType.JUKEBOX)) return;
if (!isCustomMusicDisc(event.getItem())) return;
@@ -68,18 +76,28 @@ public class HopperManager implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onJukeboxEjectToHopper(InventoryMoveItemEvent event) {
//logger.warning("Enter : onJukeboxEjectToHopper");
InventoryHolder holderSource = event.getSource().getHolder();
InventoryHolder holderDestination = event.getDestination().getHolder();
if (event.getSource().getLocation() == null) return;
if (!event.getSource().getType().equals(InventoryType.JUKEBOX)) return;
if (event.getItem().getItemMeta() == null) return;
if (!isCustomMusicDisc(event.getItem())) return;
event.setCancelled(playerManager.isAudioPlayerPlaying(event.getSource().getLocation()));
if (holderDestination instanceof HopperMinecart) {
discToHopper(((BlockState) holderSource).getBlock());
stopDiscOnEject(((BlockState) holderSource).getBlock());
} else {
event.setCancelled(playerManager.isAudioPlayerPlaying(event.getSource().getLocation()));
}
}
public void discToHopper(Block block) {
//logger.warning("Enter : discToHopper");
if (block == null) return;
if (!block.getLocation().getChunk().isLoaded()) return;
if (!block.getType().equals(Material.JUKEBOX)) return;
@@ -95,6 +113,7 @@ public class HopperManager implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onChunkLoad(ChunkLoadEvent event) {
//logger.warning("Enter : onChunkLoad");
for (BlockState blockState : event.getChunk().getTileEntities()) {
if (blockState instanceof Jukebox jukebox) {
if (!jukebox.hasRecord()) return;
@@ -108,12 +127,18 @@ public class HopperManager implements Listener {
}
private boolean isCustomMusicDisc(ItemStack item) {
//logger.warning("Enter : isCustomMusicDisc");
return item.getItemMeta().getPersistentDataContainer().has(new NamespacedKey(customDiscs, "customdisc"), PersistentDataType.STRING);
}
private void stopDiscOnEject(Block block) {
playerManager.stopLocationalAudio(block.getLocation());
}
private static HopperManager instance;
public static HopperManager instance() {
//logger.warning("Enter : HopperManager Instance");
if (instance == null) {
instance = new HopperManager();
}

View File

@@ -152,4 +152,4 @@ public class JukeBox implements Listener{
playerManager.stopLocationalAudio(block.getLocation());
}
}
}