diff --git a/api/src/main/java/com/craftmend/openaudiomc/api/WorldApi.java b/api/src/main/java/com/craftmend/openaudiomc/api/WorldApi.java index d223808d7..36b854214 100644 --- a/api/src/main/java/com/craftmend/openaudiomc/api/WorldApi.java +++ b/api/src/main/java/com/craftmend/openaudiomc/api/WorldApi.java @@ -1,6 +1,10 @@ package com.craftmend.openaudiomc.api; +import com.craftmend.openaudiomc.api.exceptions.InvalidRegionException; +import com.craftmend.openaudiomc.api.exceptions.InvalidThreadException; +import com.craftmend.openaudiomc.api.exceptions.UnknownWorldException; import com.craftmend.openaudiomc.api.regions.AudioRegion; +import com.craftmend.openaudiomc.api.regions.RegionMediaOptions; import com.craftmend.openaudiomc.api.speakers.BasicSpeaker; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -16,6 +20,7 @@ public interface WorldApi { /** * Get an instance of the world api. May be null if the plugin is not loaded yet + * * @return instance */ static WorldApi getInstance() { @@ -27,9 +32,10 @@ static WorldApi getInstance() { /** * Get all regions at a location - * @param x x - * @param y y - * @param z z + * + * @param x x + * @param y y + * @param z z * @param world world * @return regions */ @@ -38,13 +44,65 @@ static WorldApi getInstance() { /** * Get a speaker at a location, or null if invalid - * @param x x - * @param y y - * @param z z + * + * @param x x + * @param y y + * @param z z * @param world world * @return speaker */ @Nullable BasicSpeaker getSpeakerAt(int x, int y, int z, @NotNull String world); + /** + * Register a region in a world. + * Important: + * - this will overwrite current temporary regions + * - this will throw an invalid region exception if the region is not found + * - this will throw an unknown world exception if the world is not loaded + * - this will throw an invalid region exception if the region already has permanent media + * - this will throw an invalid thread exception if not called from the main thread + * + * @param worldName world + * @param regionId id + * @param regionMedia the media to attach + * @throws UnknownWorldException if the world is not loaded + * @throws InvalidRegionException if the region is not found + * @throws com.craftmend.openaudiomc.api.exceptions.InvalidThreadException if not called from the main thread + * @since 6.10.2 + */ + void registerRegion(String worldName, String regionId, RegionMediaOptions regionMedia) throws + UnknownWorldException, InvalidThreadException, InvalidRegionException; + + /** + * Register a temporary region in a world + * Important: + * - this will overwrite current temporary regions + * - this will throw an invalid region exception if the region is not found + * - this will throw an unknown world exception if the world is not loaded + * - this will throw an invalid region exception if the region already has permanent media + * - this will throw an invalid thread exception if not called from the main thread + * + * @param worldName world + * @param regionId the region to targe + * @param regionMedia the media to attach + * @param duration the duration in seconds + * @throws UnknownWorldException if the world is not loaded + * @throws InvalidRegionException if the region is not found + * @throws com.craftmend.openaudiomc.api.exceptions.InvalidThreadException if not called from the main thread + * @since 6.10.2 + */ + void registerTempRegion(String worldName, String regionId, RegionMediaOptions regionMedia, int duration) throws + UnknownWorldException, InvalidThreadException, InvalidRegionException; + + /** + * Unregister a region from the world + * + * @param worldName world + * @param regionId region id + * @throws com.craftmend.openaudiomc.api.exceptions.InvalidThreadException if not called from the main thread + * @since 6.10.2 + */ + void unregisterRegion(String worldName, String regionId) throws InvalidThreadException; + } diff --git a/api/src/main/java/com/craftmend/openaudiomc/api/exceptions/InvalidRegionException.java b/api/src/main/java/com/craftmend/openaudiomc/api/exceptions/InvalidRegionException.java new file mode 100644 index 000000000..614f4f44f --- /dev/null +++ b/api/src/main/java/com/craftmend/openaudiomc/api/exceptions/InvalidRegionException.java @@ -0,0 +1,16 @@ +package com.craftmend.openaudiomc.api.exceptions; + +/** + * An exception representing a fatal error during region lookup + */ +public class InvalidRegionException extends Exception { + + public InvalidRegionException(String message) { + super(message); + } + + public InvalidRegionException() { + super("The given region (with an unknown id) could not be found."); + } + +} diff --git a/api/src/main/java/com/craftmend/openaudiomc/api/exceptions/InvalidThreadException.java b/api/src/main/java/com/craftmend/openaudiomc/api/exceptions/InvalidThreadException.java new file mode 100644 index 000000000..f1feb5273 --- /dev/null +++ b/api/src/main/java/com/craftmend/openaudiomc/api/exceptions/InvalidThreadException.java @@ -0,0 +1,12 @@ +package com.craftmend.openaudiomc.api.exceptions; + +/** + * Throw when a method is called from an invalid thread + */ +public class InvalidThreadException extends Exception { + + public InvalidThreadException() { + super("This method can only be called from the main thread"); + } + +} diff --git a/api/src/main/java/com/craftmend/openaudiomc/api/exceptions/UnknownWorldException.java b/api/src/main/java/com/craftmend/openaudiomc/api/exceptions/UnknownWorldException.java new file mode 100644 index 000000000..44f9386ae --- /dev/null +++ b/api/src/main/java/com/craftmend/openaudiomc/api/exceptions/UnknownWorldException.java @@ -0,0 +1,16 @@ +package com.craftmend.openaudiomc.api.exceptions; + +/** + * An exception representing a fatal error during world lookup + */ +public class UnknownWorldException extends Exception { + + public UnknownWorldException(String worldName) { + super("There is no world with the name '" + worldName + "' loaded. Please ensure that it's typed correctly and that it's loaded."); + } + + public UnknownWorldException() { + super("The given world (with an unknown id) could not be found."); + } + +} diff --git a/api/src/main/java/com/craftmend/openaudiomc/api/regions/RegionMediaOptions.java b/api/src/main/java/com/craftmend/openaudiomc/api/regions/RegionMediaOptions.java new file mode 100644 index 000000000..dd2699928 --- /dev/null +++ b/api/src/main/java/com/craftmend/openaudiomc/api/regions/RegionMediaOptions.java @@ -0,0 +1,51 @@ +package com.craftmend.openaudiomc.api.regions; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Represents media options for a region, this is not a full subset of the normal media options + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RegionMediaOptions { + + /** + * If the media should loop + */ + private boolean loop = true; + + /** + * If the media should be faded in and out (in milliseconds) + */ + private int fadeTime = 500; + + /** + * The volume of the media, 0-100 + */ + private int volume = 100; + + /** + * The source of the media + */ + private String source = null; + + // utility constructors + public RegionMediaOptions(String source) { + this.source = source; + } + + public RegionMediaOptions(String source, int volume) { + this.source = source; + this.volume = volume; + } + + public RegionMediaOptions(String source, int volume, int fadeTime) { + this.source = source; + this.volume = volume; + this.fadeTime = fadeTime; + } + +} diff --git a/plugin/src/main/bash/data.bin b/plugin/src/main/bash/data.bin index e453fb011..8e51cae3d 100755 --- a/plugin/src/main/bash/data.bin +++ b/plugin/src/main/bash/data.bin @@ -1 +1 @@ -BUILD_NUM="1430" +BUILD_NUM="1431" diff --git a/plugin/src/main/java/com/craftmend/openaudiomc/generic/api/implementaions/WorldApiImpl.java b/plugin/src/main/java/com/craftmend/openaudiomc/generic/api/implementaions/WorldApiImpl.java index ead4acfbc..92b6e362c 100644 --- a/plugin/src/main/java/com/craftmend/openaudiomc/generic/api/implementaions/WorldApiImpl.java +++ b/plugin/src/main/java/com/craftmend/openaudiomc/generic/api/implementaions/WorldApiImpl.java @@ -2,18 +2,26 @@ import com.craftmend.openaudiomc.OpenAudioMc; import com.craftmend.openaudiomc.api.WorldApi; +import com.craftmend.openaudiomc.api.exceptions.InvalidRegionException; +import com.craftmend.openaudiomc.api.exceptions.InvalidThreadException; +import com.craftmend.openaudiomc.api.exceptions.UnknownWorldException; import com.craftmend.openaudiomc.api.media.Media; import com.craftmend.openaudiomc.api.regions.AudioRegion; +import com.craftmend.openaudiomc.api.regions.RegionMediaOptions; import com.craftmend.openaudiomc.api.speakers.BasicSpeaker; +import com.craftmend.openaudiomc.generic.database.DatabaseService; import com.craftmend.openaudiomc.generic.platform.Platform; import com.craftmend.openaudiomc.spigot.OpenAudioMcSpigot; import com.craftmend.openaudiomc.spigot.modules.regions.RegionModule; import com.craftmend.openaudiomc.spigot.modules.regions.interfaces.ApiRegion; import com.craftmend.openaudiomc.spigot.modules.regions.objects.RegionProperties; +import com.craftmend.openaudiomc.spigot.modules.regions.objects.TimedRegionProperties; +import com.craftmend.openaudiomc.spigot.modules.regions.registry.WorldRegionManager; import com.craftmend.openaudiomc.spigot.modules.speakers.SpeakerService; import com.craftmend.openaudiomc.spigot.modules.speakers.objects.MappedLocation; import lombok.AllArgsConstructor; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Location; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -21,6 +29,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Objects; public class WorldApiImpl implements WorldApi { @@ -55,6 +64,124 @@ public BasicSpeaker getSpeakerAt(int x, int y, int z, @NotNull String world) { return OpenAudioMc.getService(SpeakerService.class).getSpeaker(new MappedLocation(x, y, z, world)); } + @Override + public void registerRegion(String worldName, String regionId, RegionMediaOptions regionMedia) throws InvalidRegionException, InvalidThreadException { + Objects.requireNonNull(worldName, "World name cannot be null"); + Objects.requireNonNull(regionId, "Region id cannot be null"); + Objects.requireNonNull(regionMedia, "Region media cannot be null"); + + if (!Bukkit.isPrimaryThread()) { + throw new InvalidThreadException(); + } + + OpenAudioMcSpigot oams = OpenAudioMcSpigot.getInstance(); + + if (!oams.getRegionModule().getRegionAdapter().doesRegionExist(regionId)) { + throw new InvalidRegionException("Region " + regionId + " does not exist"); + } + + WorldRegionManager worldRegionManager = oams.getRegionModule().getWorld(worldName); + + // check if this region already is defined + RegionProperties regionProperties = worldRegionManager.getRegionProperties(regionId); + if (regionProperties != null) { + if (regionProperties instanceof TimedRegionProperties) { + TimedRegionProperties timedRegion = (TimedRegionProperties) regionProperties; + worldRegionManager.unregisterRegion(regionId); + timedRegion.destroy(); + } else { + throw new InvalidRegionException("The region '" + regionId + "' already has permanent media linked to it."); + } + } + + RegionProperties rp = new RegionProperties( + regionMedia.getSource(), + regionMedia.getVolume(), + regionMedia.getFadeTime(), + true, + regionId, + worldName + ); + + OpenAudioMc.getService(DatabaseService.class).getRepository(RegionProperties.class) + .save(rp); + + worldRegionManager.registerRegion(rp); + oams.getRegionModule().forceUpdateRegions(); + } + + @Override + public void registerTempRegion(String worldName, String regionId, RegionMediaOptions regionMedia, int duration) throws UnknownWorldException, InvalidRegionException, InvalidThreadException { + Objects.requireNonNull(worldName, "World name cannot be null"); + Objects.requireNonNull(regionId, "Region id cannot be null"); + Objects.requireNonNull(regionMedia, "Region media cannot be null"); + + if (!Bukkit.isPrimaryThread()) { + throw new InvalidThreadException(); + } + + OpenAudioMcSpigot oams = OpenAudioMcSpigot.getInstance(); + + if (!oams.getRegionModule().getRegionAdapter().doesRegionExist(regionId)) { + throw new InvalidRegionException("Region " + regionId + " does not exist"); + } + + WorldRegionManager worldRegionManager = oams.getRegionModule().getWorld(worldName); + + // check if this region already is defined + RegionProperties regionProperties = worldRegionManager.getRegionProperties(regionId); + if (regionProperties != null) { + if (regionProperties instanceof TimedRegionProperties) { + TimedRegionProperties timedRegion = (TimedRegionProperties) regionProperties; + worldRegionManager.unregisterRegion(regionId); + timedRegion.destroy(); + } else { + throw new InvalidRegionException("The region '" + regionId + "' already has permanent media linked to it."); + } + } + + worldRegionManager.registerRegion(new TimedRegionProperties( + regionMedia.getSource(), + duration, + regionId, + regionMedia.getVolume(), + regionMedia.getFadeTime(), + regionId, + worldName + )); + + oams.getRegionModule().forceUpdateRegions(); + } + + @Override + public void unregisterRegion(String worldName, String regionId) throws InvalidThreadException { + Objects.requireNonNull(worldName, "World name cannot be null"); + Objects.requireNonNull(regionId, "Region id cannot be null"); + + if (!Bukkit.isPrimaryThread()) { + throw new InvalidThreadException(); + } + + OpenAudioMcSpigot oams = OpenAudioMcSpigot.getInstance(); + WorldRegionManager worldRegionManager = oams.getRegionModule().getWorld(worldName); + + RegionProperties rp = worldRegionManager.getRegionProperties(regionId); + if (rp != null) { + if (rp.getId() != null && !(rp instanceof TimedRegionProperties)) { + OpenAudioMc.getService(DatabaseService.class).getRepository(RegionProperties.class) + .delete(rp); + } + + if (rp instanceof TimedRegionProperties) { + ((TimedRegionProperties) rp).destroy(); + } + + worldRegionManager.unregisterRegion(regionId); + } + + oams.getRegionModule().forceUpdateRegions(); + } + @AllArgsConstructor private static class WrappedRegion implements AudioRegion { diff --git a/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/commands/subcommands/region/RegionCreateSubCommand.java b/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/commands/subcommands/region/RegionCreateSubCommand.java index 0402ab471..83190d78a 100644 --- a/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/commands/subcommands/region/RegionCreateSubCommand.java +++ b/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/commands/subcommands/region/RegionCreateSubCommand.java @@ -1,6 +1,11 @@ package com.craftmend.openaudiomc.spigot.modules.commands.subcommands.region; import com.craftmend.openaudiomc.OpenAudioMc; +import com.craftmend.openaudiomc.api.WorldApi; +import com.craftmend.openaudiomc.api.exceptions.InvalidRegionException; +import com.craftmend.openaudiomc.api.exceptions.InvalidThreadException; +import com.craftmend.openaudiomc.api.exceptions.UnknownWorldException; +import com.craftmend.openaudiomc.api.regions.RegionMediaOptions; import com.craftmend.openaudiomc.generic.commands.interfaces.SubCommand; import com.craftmend.openaudiomc.generic.commands.objects.CommandError; import com.craftmend.openaudiomc.generic.database.DatabaseService; @@ -41,25 +46,24 @@ public void onExecute(User sender, String[] args) { return; } - if (!openAudioMcSpigot.getRegionModule().getRegionAdapter().doesRegionExist(args[1])) { - message(sender, ChatColor.RED + "ERROR! There is no WorldGuard region called '" + args[1] - + "'. Please make the WorldGuard region before you register it in OpenAudioMc."); - return; - } - if (Validation.isStringInvalid(args[2])) { throw new CommandError("Invalid source url."); } - RegionProperties rp = new RegionProperties(args[2], volume, 1000, true, args[1], sender.getWorld()); - OpenAudioMc.getService(DatabaseService.class).getRepository(RegionProperties.class) - .save(rp); - - WorldRegionManager worldRegionManager = openAudioMcSpigot.getRegionModule().getWorld(sender.getWorld()); - - worldRegionManager.registerRegion(rp); + try { + WorldApi.getInstance().registerRegion( + sender.getWorld(), + args[1], + new RegionMediaOptions(args[2], volume) + ); + } catch (UnknownWorldException e) { + throw new CommandError("The world you are in is not known to the system."); + } catch (InvalidThreadException e) { + throw new RuntimeException(e); + } catch (InvalidRegionException e) { + throw new CommandError("The region with that id already exists or the region is invalid."); + } message(sender, ChatColor.GREEN + "The WorldGuard region with the id " + args[1] + " now has the sound " + args[2]); - openAudioMcSpigot.getRegionModule().forceUpdateRegions(); } } diff --git a/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/commands/subcommands/region/RegionTempSubCommand.java b/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/commands/subcommands/region/RegionTempSubCommand.java index 4de7cb6d6..c9ae03f0f 100644 --- a/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/commands/subcommands/region/RegionTempSubCommand.java +++ b/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/commands/subcommands/region/RegionTempSubCommand.java @@ -1,11 +1,19 @@ package com.craftmend.openaudiomc.spigot.modules.commands.subcommands.region; +import com.craftmend.openaudiomc.api.WorldApi; +import com.craftmend.openaudiomc.api.exceptions.InvalidRegionException; +import com.craftmend.openaudiomc.api.exceptions.InvalidThreadException; +import com.craftmend.openaudiomc.api.exceptions.UnknownWorldException; +import com.craftmend.openaudiomc.api.regions.RegionMediaOptions; import com.craftmend.openaudiomc.generic.commands.interfaces.SubCommand; +import com.craftmend.openaudiomc.generic.commands.objects.CommandError; +import com.craftmend.openaudiomc.generic.media.utils.Validation; import com.craftmend.openaudiomc.generic.user.User; import com.craftmend.openaudiomc.spigot.OpenAudioMcSpigot; import com.craftmend.openaudiomc.spigot.modules.regions.objects.RegionProperties; import com.craftmend.openaudiomc.spigot.modules.regions.objects.TimedRegionProperties; import com.craftmend.openaudiomc.spigot.modules.regions.registry.WorldRegionManager; +import lombok.SneakyThrows; import org.bukkit.ChatColor; public class RegionTempSubCommand extends SubCommand { @@ -18,6 +26,7 @@ public RegionTempSubCommand(OpenAudioMcSpigot openAudioMcSpigot) { } @Override + @SneakyThrows public void onExecute(User sender, String[] args) { if (!isInteger(args[3])) { message(sender, ChatColor.RED + "You must have a duration in seconds, like 60"); @@ -26,35 +35,42 @@ public void onExecute(User sender, String[] args) { args[1] = args[1].toLowerCase(); - WorldRegionManager worldRegionManager = openAudioMcSpigot.getRegionModule().getWorld(sender.getWorld()); - - // check if this region already is defined - RegionProperties regionProperties = worldRegionManager.getRegionProperties(args[1]); - if (regionProperties != null) { - if (regionProperties instanceof TimedRegionProperties) { - // reset it, because fuck it - TimedRegionProperties timedRegion = (TimedRegionProperties) regionProperties; - worldRegionManager.unregisterRegion(args[1]); - timedRegion.destroy(); - } else { - // message, fail - message(sender, ChatColor.RED + "ERROR! The region '" + args[1] - + "' already has a static media assigned to it."); + int volume = 100; + if (args.length == 4) { + try { + volume = Integer.parseInt(args[3]); + } catch (NumberFormatException e) { + message(sender, ChatColor.RED + "ERROR! Volume must be a number!"); return; } } + if (volume < 0 || volume > 100) { + message(sender, ChatColor.RED + "The volume must be between 0 and 100"); + return; + } + + if (Validation.isStringInvalid(args[2])) { + throw new CommandError("Invalid source url."); + } + int duration = Integer.parseInt(args[3]); - if (!openAudioMcSpigot.getRegionModule().getRegionAdapter().doesRegionExist(args[1])) { - message(sender, ChatColor.RED + "ERROR! There is no WorldGuard region called '" + args[1] - + "'. Please make the WorldGuard region before you register it in OpenAudioMc."); - return; + try { + WorldApi.getInstance().registerTempRegion( + sender.getWorld(), + args[1], + new RegionMediaOptions(args[2], volume), + duration + ); + } catch (UnknownWorldException e) { + throw new CommandError("The world you are in is not known to the system."); + } catch (InvalidThreadException e) { + throw new RuntimeException(e); + } catch (InvalidRegionException e) { + throw new CommandError("The region with that id already exists or the region is invalid."); } - worldRegionManager.registerRegion(new TimedRegionProperties(args[2], duration, args[1], sender.getWorld())); message(sender, ChatColor.GREEN + "The WorldGuard region with the id " + args[1] + " now has the sound " + args[2]); - - openAudioMcSpigot.getRegionModule().forceUpdateRegions(); } } diff --git a/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/proxy/listeners/BukkitPacketListener.java b/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/proxy/listeners/BukkitPacketListener.java index e13c1b76e..6a8e15843 100644 --- a/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/proxy/listeners/BukkitPacketListener.java +++ b/plugin/src/main/java/com/craftmend/openaudiomc/spigot/modules/proxy/listeners/BukkitPacketListener.java @@ -8,6 +8,7 @@ import com.craftmend.openaudiomc.generic.commands.enums.CommandContext; import com.craftmend.openaudiomc.generic.commands.objects.CommandError; import com.craftmend.openaudiomc.generic.events.events.TimeServiceUpdateEvent; +import com.craftmend.openaudiomc.generic.logging.OpenAudioLogger; import com.craftmend.openaudiomc.generic.oac.OpenaudioAccountService; import com.craftmend.openaudiomc.generic.oac.enums.CraftmendTag; import com.craftmend.openaudiomc.generic.environment.MagicValue; @@ -21,6 +22,8 @@ import com.craftmend.openaudiomc.generic.proxy.messages.ProxyPacketHandler; import com.craftmend.openaudiomc.generic.user.User; import com.craftmend.openaudiomc.generic.proxy.messages.PacketListener; +import com.craftmend.openaudiomc.spigot.OpenAudioMcSpigot; +import org.bukkit.Bukkit; public class BukkitPacketListener implements PacketListener { @@ -78,18 +81,20 @@ public void onStateSync(User user, ClientUpdateStatePacket packet) { public void onCommand(User user, CommandProxyPacket packet) { User player = OpenAudioMc.resolveDependency(UserHooks.class).byUuid(packet.getCommandProxy().getExecutor()); if (player == null) return; - try { - OpenAudioMc.getService(CommandService.class) - .getSubCommand(CommandContext.OPENAUDIOMC, packet.getCommandProxy().getProxiedCommand().toString().toLowerCase()) - .onExecute(player, packet.getCommandProxy().getArgs()); - } catch (Exception e) { - if (e instanceof CommandError) { - player.sendMessage(MagicValue.COMMAND_PREFIX.get(String.class) + e.getMessage()); - } else { - player.sendMessage(MagicValue.COMMAND_PREFIX.get(String.class) + "Something went wrong while executing the command. Please check your console for more information."); - e.printStackTrace(); + Bukkit.getScheduler().runTask(OpenAudioMcSpigot.getInstance(), () -> { + try { + OpenAudioMc.getService(CommandService.class) + .getSubCommand(CommandContext.OPENAUDIOMC, packet.getCommandProxy().getProxiedCommand().toString().toLowerCase()) + .onExecute(player, packet.getCommandProxy().getArgs()); + } catch (Exception e) { + if (e instanceof CommandError) { + player.sendMessage(MagicValue.COMMAND_PREFIX.get(String.class) + e.getMessage()); + } else { + player.sendMessage(MagicValue.COMMAND_PREFIX.get(String.class) + "Something went wrong while executing the command. Please check your console for more information."); + OpenAudioLogger.error(e, "failed to execute from proxy packet"); + } } - } + }); } } diff --git a/plugin/src/main/resources/data.bin b/plugin/src/main/resources/data.bin index e453fb011..8e51cae3d 100755 --- a/plugin/src/main/resources/data.bin +++ b/plugin/src/main/resources/data.bin @@ -1 +1 @@ -BUILD_NUM="1430" +BUILD_NUM="1431" diff --git a/plugin/src/main/resources/openaudiomc-build.properties b/plugin/src/main/resources/openaudiomc-build.properties index 963f39491..19386bc9d 100644 --- a/plugin/src/main/resources/openaudiomc-build.properties +++ b/plugin/src/main/resources/openaudiomc-build.properties @@ -1,3 +1,3 @@ -BUILD_VERSION="1430" -BUILD_COMMIT="0f58745da86bedcc0dd4ec12109fa5c6fd3a5c8e" +BUILD_VERSION="1431" +BUILD_COMMIT="b67dcb9ee03a56f864d1dfe46eb6f980ee049bd9" BUILD_AUTHOR="Mats"