├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── api ├── build.gradle └── src │ └── main │ ├── java │ └── mods │ │ └── thecomputerizer │ │ └── musictriggers │ │ └── api │ │ ├── MTRef.java │ │ ├── client │ │ ├── MTClient.java │ │ ├── MTClientEntryPoint.java │ │ ├── MTClientEvents.java │ │ ├── MTDebugInfo.java │ │ ├── TriggerContextClient.java │ │ ├── audio │ │ │ ├── AudioContainer.java │ │ │ ├── AudioOutput.java │ │ │ ├── TrackLoader.java │ │ │ └── resource │ │ │ │ ├── ResourceAudioSourceManager.java │ │ │ │ ├── ResourceAudioTrack.java │ │ │ │ └── ResourceSeekableInputStream.java │ │ ├── channel │ │ │ ├── ChannelClient.java │ │ │ ├── ChannelClientSpecial.java │ │ │ ├── ChannelJukebox.java │ │ │ └── ChannelPreview.java │ │ └── gui │ │ │ ├── LogVisualizer.java │ │ │ ├── MTGUIScreen.java │ │ │ ├── MTScreenInfo.java │ │ │ ├── ParameterScreen.java │ │ │ ├── PlaybackScreen.java │ │ │ ├── WrapperScreen.java │ │ │ └── parameters │ │ │ ├── BasicLink.java │ │ │ ├── CheckBox.java │ │ │ ├── DataLink.java │ │ │ ├── DataList.java │ │ │ ├── HelpLink.java │ │ │ ├── ParameterLink.java │ │ │ ├── SelectionLink.java │ │ │ ├── SpecialButton.java │ │ │ ├── TextBox.java │ │ │ └── WrapperLink.java │ │ ├── common │ │ ├── MTCommonEntryPoint.java │ │ └── MTCommonEvents.java │ │ ├── config │ │ ├── ConfigRemapper.java │ │ ├── ConfigVersion.java │ │ ├── ConfigVersionManager.java │ │ ├── MTConfigV6.java │ │ └── MTConfigV7.java │ │ ├── core │ │ └── MTCoreEntryPoint.java │ │ ├── data │ │ ├── MTDataRef.java │ │ ├── audio │ │ │ ├── AudioHelper.java │ │ │ ├── AudioPool.java │ │ │ └── AudioRef.java │ │ ├── channel │ │ │ ├── ChannelAPI.java │ │ │ ├── ChannelData.java │ │ │ ├── ChannelElement.java │ │ │ ├── ChannelElementRunner.java │ │ │ ├── ChannelEventHandler.java │ │ │ ├── ChannelEventRunner.java │ │ │ ├── ChannelHelper.java │ │ │ ├── ChannelInfo.java │ │ │ ├── ChannelListener.java │ │ │ ├── ChannelSync.java │ │ │ ├── ChannelSyncable.java │ │ │ └── LoadTracker.java │ │ ├── command │ │ │ └── CommandElement.java │ │ ├── global │ │ │ ├── Debug.java │ │ │ ├── GlobalData.java │ │ │ ├── GlobalElement.java │ │ │ ├── GlobalEventRunner.java │ │ │ └── Toggle.java │ │ ├── jukebox │ │ │ └── RecordElement.java │ │ ├── log │ │ │ ├── LogMessage.java │ │ │ ├── LoggableAPI.java │ │ │ └── MTLogger.java │ │ ├── nbt │ │ │ ├── NBTHelper.java │ │ │ ├── NBTLoadable.java │ │ │ └── mode │ │ │ │ ├── NBTMode.java │ │ │ │ ├── NBTModeComparison.java │ │ │ │ ├── NBTModeEqual.java │ │ │ │ ├── NBTModeGreater.java │ │ │ │ ├── NBTModeInvert.java │ │ │ │ ├── NBTModeKeyPresent.java │ │ │ │ ├── NBTModeLesser.java │ │ │ │ └── NBTModeValPresent.java │ │ ├── parameter │ │ │ ├── Parameter.java │ │ │ ├── ParameterHelper.java │ │ │ ├── ParameterList.java │ │ │ ├── ParameterString.java │ │ │ ├── ParameterWrapper.java │ │ │ ├── UniversalParameters.java │ │ │ └── primitive │ │ │ │ ├── ParameterBool.java │ │ │ │ ├── ParameterByte.java │ │ │ │ ├── ParameterDouble.java │ │ │ │ ├── ParameterFloat.java │ │ │ │ ├── ParameterInt.java │ │ │ │ ├── ParameterLong.java │ │ │ │ ├── ParameterNumber.java │ │ │ │ └── ParameterShort.java │ │ ├── redirect │ │ │ └── RedirectElement.java │ │ ├── render │ │ │ ├── CardAPI.java │ │ │ ├── CardHelper.java │ │ │ ├── ImageElement.java │ │ │ └── TitleElement.java │ │ └── trigger │ │ │ ├── ResourceContext.java │ │ │ ├── TriggerAPI.java │ │ │ ├── TriggerCombination.java │ │ │ ├── TriggerContext.java │ │ │ ├── TriggerHelper.java │ │ │ ├── TriggerMerged.java │ │ │ ├── TriggerRegistry.java │ │ │ ├── TriggerSelector.java │ │ │ ├── TriggerSynced.java │ │ │ ├── basic │ │ │ ├── BasicTrigger.java │ │ │ ├── TriggerGeneric.java │ │ │ ├── TriggerLoading.java │ │ │ └── TriggerMenu.java │ │ │ ├── holder │ │ │ ├── HolderTrigger.java │ │ │ ├── TriggerAdvancement.java │ │ │ ├── TriggerBiome.java │ │ │ ├── TriggerBlockEntity.java │ │ │ ├── TriggerCommand.java │ │ │ ├── TriggerDifficulty.java │ │ │ ├── TriggerDimension.java │ │ │ ├── TriggerEffect.java │ │ │ ├── TriggerGUI.java │ │ │ ├── TriggerGamestage.java │ │ │ ├── TriggerHeight.java │ │ │ ├── TriggerInventory.java │ │ │ ├── TriggerLight.java │ │ │ ├── TriggerMob.java │ │ │ ├── TriggerMoon.java │ │ │ ├── TriggerPVP.java │ │ │ ├── TriggerRaid.java │ │ │ ├── TriggerRainIntensity.java │ │ │ ├── TriggerRiding.java │ │ │ ├── TriggerSeason.java │ │ │ ├── TriggerStatistic.java │ │ │ ├── TriggerStructure.java │ │ │ ├── TriggerTime.java │ │ │ ├── TriggerTornado.java │ │ │ ├── TriggerVictory.java │ │ │ └── TriggerZones.java │ │ │ └── simple │ │ │ ├── SimpleTrigger.java │ │ │ ├── TriggerAcidRain.java │ │ │ ├── TriggerAdventure.java │ │ │ ├── TriggerBlizzard.java │ │ │ ├── TriggerBloodmoon.java │ │ │ ├── TriggerBluemoon.java │ │ │ ├── TriggerCloudy.java │ │ │ ├── TriggerCreative.java │ │ │ ├── TriggerDead.java │ │ │ ├── TriggerDrowning.java │ │ │ ├── TriggerElytra.java │ │ │ ├── TriggerFishing.java │ │ │ ├── TriggerHarvestmoon.java │ │ │ ├── TriggerHome.java │ │ │ ├── TriggerHurricane.java │ │ │ ├── TriggerLightRain.java │ │ │ ├── TriggerLowHP.java │ │ │ ├── TriggerPet.java │ │ │ ├── TriggerRaining.java │ │ │ ├── TriggerSandstorm.java │ │ │ ├── TriggerSnowing.java │ │ │ ├── TriggerSpectator.java │ │ │ ├── TriggerStarShower.java │ │ │ ├── TriggerStorming.java │ │ │ └── TriggerUnderwater.java │ │ ├── network │ │ ├── ChannelHelperMessage.java │ │ ├── MTNetwork.java │ │ ├── MessageCurrentSong.java │ │ ├── MessageCurrentStructure.java │ │ ├── MessageFinishedInit.java │ │ ├── MessageInitChannels.java │ │ ├── MessageNBTCheck.java │ │ ├── MessageReload.java │ │ ├── MessageRequestChannels.java │ │ ├── MessageSeekSong.java │ │ ├── MessageSkipSong.java │ │ ├── MessageToggleDebugParameter.java │ │ ├── MessageTriggerStates.java │ │ └── PlayerMessage.java │ │ ├── registry │ │ ├── MTBlockEntityRegistry.java │ │ ├── MTBlockRegistry.java │ │ ├── MTItemRegistry.java │ │ └── MTRegistryHandler.java │ │ └── server │ │ ├── ChannelServer.java │ │ ├── MTCommands.java │ │ ├── MTServerEvents.java │ │ └── TriggerContextServer.java │ └── resources │ ├── assets │ └── musictriggers │ │ ├── blockstates │ │ └── music_recorder.json │ │ ├── lang │ │ ├── en_us.json │ │ ├── en_us.lang │ │ ├── es_ar.json │ │ ├── es_es.json │ │ ├── es_mx.json │ │ ├── es_uy.json │ │ ├── es_ve.json │ │ ├── eu_es.json │ │ ├── zh_cn.json │ │ └── zh_cn.lang │ │ ├── models │ │ ├── block │ │ │ ├── music_recorder.json │ │ │ ├── music_recorder_active.json │ │ │ └── music_recorder_inverted.json │ │ ├── item │ │ │ ├── music_recorder.json │ │ │ ├── record.json │ │ │ ├── record_acidrain.json │ │ │ ├── record_adventure.json │ │ │ ├── record_biome.json │ │ │ ├── record_blank.json │ │ │ ├── record_blizzard.json │ │ │ ├── record_bloodmoon.json │ │ │ ├── record_bluemoon.json │ │ │ ├── record_cloudy.json │ │ │ ├── record_command.json │ │ │ ├── record_creative.json │ │ │ ├── record_custom.json │ │ │ ├── record_dead.json │ │ │ ├── record_difficulty.json │ │ │ ├── record_dimension.json │ │ │ ├── record_effect.json │ │ │ ├── record_elytra.json │ │ │ ├── record_fallingstars.json │ │ │ ├── record_fishing.json │ │ │ ├── record_gamestages.json │ │ │ ├── record_generic.json │ │ │ ├── record_gui.json │ │ │ ├── record_harvestmoon.json │ │ │ ├── record_height.json │ │ │ ├── record_hurricane.json │ │ │ ├── record_light.json │ │ │ ├── record_loading.json │ │ │ ├── record_lowhp.json │ │ │ ├── record_menu.json │ │ │ ├── record_mob.json │ │ │ ├── record_pet.json │ │ │ ├── record_pvp.json │ │ │ ├── record_raining.json │ │ │ ├── record_rainintensity.json │ │ │ ├── record_riding.json │ │ │ ├── record_sandstorm.json │ │ │ ├── record_season.json │ │ │ ├── record_snowing.json │ │ │ ├── record_spectator.json │ │ │ ├── record_storming.json │ │ │ ├── record_structure.json │ │ │ ├── record_time.json │ │ │ ├── record_tornado.json │ │ │ ├── record_underwater.json │ │ │ ├── record_victory.json │ │ │ └── record_zones.json │ │ ├── music_recorder.json │ │ ├── music_recorder_active.json │ │ └── music_recorder_inverted.json │ │ └── textures │ │ ├── block │ │ ├── recorder_side.png │ │ ├── recorder_side_active.png │ │ ├── recorder_side_inverted.png │ │ ├── recorder_top.png │ │ ├── recorder_top_active.png │ │ └── recorder_top_inverted.png │ │ ├── gui │ │ ├── hover │ │ │ └── icon │ │ │ │ ├── channel_info.png │ │ │ │ ├── channels.png │ │ │ │ ├── checked.png │ │ │ │ ├── commands.png │ │ │ │ ├── config.png │ │ │ │ ├── debug.png │ │ │ │ ├── edit.png │ │ │ │ ├── help.png │ │ │ │ ├── jukebox.png │ │ │ │ ├── log.png │ │ │ │ ├── main.png │ │ │ │ ├── playback.png │ │ │ │ ├── redirect.png │ │ │ │ ├── registration.png │ │ │ │ ├── reload.png │ │ │ │ ├── renders.png │ │ │ │ ├── reset_song.png │ │ │ │ ├── skip_song.png │ │ │ │ ├── toggles.png │ │ │ │ └── unchecked.png │ │ └── icon │ │ │ ├── channel_info.png │ │ │ ├── channels.png │ │ │ ├── checked.png │ │ │ ├── commands.png │ │ │ ├── debug.png │ │ │ ├── edit.png │ │ │ ├── help.png │ │ │ ├── jukebox.png │ │ │ ├── log.png │ │ │ ├── main.png │ │ │ ├── playback.png │ │ │ ├── redirect.png │ │ │ ├── registration.png │ │ │ ├── reload.png │ │ │ ├── renders.png │ │ │ ├── reset_song.png │ │ │ ├── skip_song.png │ │ │ ├── toggles.png │ │ │ └── unchecked.png │ │ ├── item │ │ ├── record_acidrain.png │ │ ├── record_advancement.png │ │ ├── record_biome.png │ │ ├── record_biome.png.mcmeta │ │ ├── record_blank.png │ │ ├── record_blizzard.png │ │ ├── record_bloodmoon.png │ │ ├── record_bluemoon.png │ │ ├── record_cloudy.png │ │ ├── record_command.png │ │ ├── record_command.png.mcmeta │ │ ├── record_creative.png │ │ ├── record_dead.png │ │ ├── record_difficulty.png │ │ ├── record_dimension.png │ │ ├── record_drowning.png │ │ ├── record_effect.png │ │ ├── record_elytra.png │ │ ├── record_fallingstars.png │ │ ├── record_fishing.png │ │ ├── record_gamestages.png │ │ ├── record_generic.png │ │ ├── record_gui.png │ │ ├── record_harvestmoon.png │ │ ├── record_height.png │ │ ├── record_home.png │ │ ├── record_hurricane.png │ │ ├── record_light.png │ │ ├── record_lightrain.png │ │ ├── record_loading.png │ │ ├── record_lowhp.png │ │ ├── record_menu.png │ │ ├── record_mob.png │ │ ├── record_pet.png │ │ ├── record_pvp.png │ │ ├── record_raining.png │ │ ├── record_rainintensity.png │ │ ├── record_riding.png │ │ ├── record_sandstorm.png │ │ ├── record_season.png │ │ ├── record_snowing.png │ │ ├── record_spectator.png │ │ ├── record_statistic.png │ │ ├── record_storming.png │ │ ├── record_structure.png │ │ ├── record_time.png │ │ ├── record_tornado.png │ │ ├── record_underwater.png │ │ ├── record_victory.png │ │ └── record_zones.png │ │ └── logo.png │ ├── data │ └── musictriggers │ │ └── loot_tables │ │ └── blocks │ │ └── music_recorder.json │ ├── logo.png │ └── pack.mcmeta ├── build.gradle ├── changelogs ├── 7.0.0.txt ├── 7.0.1.txt ├── 7.0.2.txt ├── 7.0.3.txt ├── 7.0.4.txt └── 7.0.5.txt ├── docs └── musictriggers │ ├── .assets │ └── item │ │ └── musictriggers │ │ └── logo.png │ ├── _meta.json │ ├── important_concepts │ └── file_structure.mdx │ ├── introduction.mdx │ ├── issues.mdx │ ├── sinytra-wiki.json │ └── triggers │ ├── _meta.json │ ├── _overview.mdx │ ├── basic_triggers │ ├── _meta.json │ ├── _overview.mdx │ ├── generic.mdx │ ├── loading.mdx │ └── menu.mdx │ ├── holder_triggers │ ├── _meta.json │ ├── _overview.mdx │ ├── advancement.mdx │ ├── biome.mdx │ ├── blockentity.mdx │ ├── command.mdx │ ├── difficulty.mdx │ ├── dimension.mdx │ ├── effect.mdx │ ├── gamestage.mdx │ ├── gui.mdx │ ├── height.mdx │ ├── inventory.mdx │ ├── light.mdx │ ├── mob.mdx │ ├── moon.mdx │ ├── pvp.mdx │ ├── raid.mdx │ ├── rainintensity.mdx │ ├── riding.mdx │ ├── season.mdx │ ├── statistic.mdx │ ├── structure.mdx │ ├── time.mdx │ ├── tornado.mdx │ ├── victory.mdx │ └── zones.mdx │ ├── identifiers.mdx │ ├── parameters.mdx │ ├── priority_defaults.mdx │ └── simple_triggers │ ├── _meta.json │ ├── _overview.mdx │ ├── acidrain.mdx │ ├── adventure.mdx │ ├── blizzard.mdx │ ├── bloodmoon.mdx │ ├── bluemoon.mdx │ ├── cloudy.mdx │ ├── creative.mdx │ ├── dead.mdx │ ├── drowning.mdx │ ├── elytra.mdx │ ├── fishing.mdx │ ├── harvestmoon.mdx │ ├── home.mdx │ ├── hurricane.mdx │ ├── lightrain.mdx │ ├── lowhp.mdx │ ├── pet.mdx │ ├── raining.mdx │ ├── sandstorm.mdx │ ├── snowing.mdx │ ├── spectator.mdx │ ├── starshower.mdx │ ├── storming.mdx │ └── underwater.mdx ├── gradle.properties ├── gradle ├── java21-module.gradle ├── java21.gradle ├── java24.gradle ├── java8-module.gradle ├── java8.gradle ├── lavaplayer-libs.gradle ├── lavaplayer.gradle ├── lombok.gradle ├── runtime-module.gradle ├── shaded-deps.gradle ├── shadow-relocate.gradle ├── shadow.gradle ├── til-compile.gradle ├── til.gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── legacy ├── build.gradle └── cleanroom │ ├── build.gradle │ └── src │ └── main │ └── java │ └── mods │ └── thecomputerizer │ └── musictriggers │ └── legacy │ └── v12 │ └── m2 │ ├── client │ └── MTClientEntryPoint1_12_2.java │ └── common │ └── MTCommonEntryPoint1_12_2.java └── settings.gradle /.gitattributes: -------------------------------------------------------------------------------- 1 | # Disable autocrlf on generated files, they always generate with LF 2 | # Add any extra files or paths here to make git stop saying they 3 | # are changed when only line endings change. 4 | src/generated/**/.cache/cache text eol=lf 5 | src/generated/**/*.json text eol=lf 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse 2 | bin 3 | *.launch 4 | .settings 5 | .metadata 6 | .classpath 7 | .project 8 | 9 | # idea 10 | out 11 | *.ipr 12 | *.iws 13 | *.iml 14 | .idea 15 | 16 | # gradle 17 | build 18 | .gradle 19 | 20 | # other 21 | eclipse 22 | lib 23 | libs 24 | mcp 25 | run 26 | run_client 27 | run_server 28 | tokens.txt 29 | Multiversion-Project-Helper -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Music-Triggers 2 | This is a Minecraft mod that will allow you to set the music based on in game triggers 3 | 4 | Here is a link to the curseforge project https://www.curseforge.com/minecraft/mc-mods/music-triggers 5 | 6 | Alternatively, here is a link to the Modrinth project https://modrinth.com/mod/music-triggers 7 | 8 | (Multiversion branch) 9 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/MTRef.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api; 2 | 3 | import mods.thecomputerizer.theimpossiblelibrary.api.core.annotation.IndirectCallers; 4 | import mods.thecomputerizer.theimpossiblelibrary.api.resource.ResourceHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.resource.ResourceLocationAPI; 6 | import org.apache.logging.log4j.Level; 7 | import org.apache.logging.log4j.LogManager; 8 | import org.apache.logging.log4j.Logger; 9 | 10 | import static org.apache.logging.log4j.Level.*; 11 | 12 | public class MTRef { 13 | 14 | public static final String BASE_PACKAGE = "mods.thecomputerizer.musictriggers"; 15 | public static final String CONFIG_PATH = "config/MusicTriggers"; 16 | public static final String CONFIG_PATH_BACKUP = "config/MusicTriggersBackup"; 17 | public static final String DESCRIPTION = "Multiversion mod for playing music and sounds based on in-game triggers."; 18 | public static final String GLOBAL_CONFIG = "config/MusicTriggers/global"; 19 | public static final Logger LOGGER = LogManager.getLogger("Music Triggers"); 20 | public static final String MODID = "musictriggers"; 21 | public static final String NAME = "Music Triggers"; 22 | public static final String VERSION = "7.0.5"; 23 | 24 | public static void log(Level level, String msg, Object ... args) { 25 | LOGGER.log(level,msg,args); 26 | } 27 | 28 | public static void logDebug(String msg, Object ... args) { 29 | log(DEBUG,msg,args); 30 | } 31 | 32 | public static void logError(String msg, Object ... args) { 33 | log(ERROR,msg,args); 34 | } 35 | 36 | public static void logFatal(String msg, Object ... args) { 37 | log(FATAL,msg,args); 38 | } 39 | 40 | public static void logInfo(String msg, Object ... args) { 41 | log(INFO,msg,args); 42 | } 43 | 44 | @IndirectCallers 45 | public static void logTrace(String msg, Object ... args) { 46 | log(TRACE,msg,args); 47 | } 48 | 49 | public static void logWarn(String msg, Object ... args) { 50 | log(WARN,msg,args); 51 | } 52 | 53 | public static ResourceLocationAPI res(String path) { 54 | return ResourceHelper.getResource(MODID,path); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/client/MTClientEntryPoint.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.client; 2 | 3 | import mods.thecomputerizer.musictriggers.api.MTRef; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 5 | import mods.thecomputerizer.musictriggers.api.network.MTNetwork; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.client.ClientHelper; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.client.DelegatingClientEntryPoint; 8 | import mods.thecomputerizer.theimpossiblelibrary.api.client.input.KeyHelper; 9 | 10 | import java.util.Objects; 11 | 12 | import static mods.thecomputerizer.musictriggers.api.MTRef.MODID; 13 | import static mods.thecomputerizer.musictriggers.api.MTRef.NAME; 14 | import static mods.thecomputerizer.musictriggers.api.client.gui.MTGUIScreen.GUI_KEY; 15 | 16 | public class MTClientEntryPoint extends DelegatingClientEntryPoint { 17 | 18 | private static MTClientEntryPoint INSTANCE; 19 | 20 | public static MTClientEntryPoint getInstance() { 21 | return Objects.nonNull(INSTANCE) ? INSTANCE : new MTClientEntryPoint(); 22 | } 23 | 24 | private MTClientEntryPoint() { 25 | INSTANCE = this; 26 | } 27 | 28 | @Override protected String getModID() { 29 | return MODID; 30 | } 31 | 32 | @Override protected String getModName() { 33 | return NAME; 34 | } 35 | 36 | @Override public void onClientSetup() { 37 | ChannelHelper.onResourcesLoaded(); 38 | } 39 | 40 | @Override public void onCommonSetup() { 41 | ChannelHelper.initClient(); 42 | super.onCommonSetup(); 43 | } 44 | 45 | @Override public void onConstructed() { 46 | KeyHelper.register(GUI_KEY); 47 | MTNetwork.initClient(); 48 | super.onConstructed(); 49 | } 50 | 51 | @Override public void onPreRegistration() { 52 | MTClientEvents.init(); 53 | super.onPreRegistration(); 54 | } 55 | 56 | @Override public void onLoadComplete() { 57 | MTRef.logInfo("Minecraft instance (LoadComplete) is",ClientHelper.getMinecraft()); 58 | super.onLoadComplete(); 59 | } 60 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/client/audio/resource/ResourceAudioTrack.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.client.audio.resource; 2 | 3 | import com.sedmelluq.discord.lavaplayer.container.MediaContainerDescriptor; 4 | import com.sedmelluq.discord.lavaplayer.source.AudioSourceManager; 5 | import com.sedmelluq.discord.lavaplayer.track.AudioTrack; 6 | import com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo; 7 | import com.sedmelluq.discord.lavaplayer.track.DelegatedAudioTrack; 8 | import com.sedmelluq.discord.lavaplayer.track.InternalAudioTrack; 9 | import com.sedmelluq.discord.lavaplayer.track.playback.LocalAudioTrackExecutor; 10 | import lombok.Getter; 11 | import mods.thecomputerizer.theimpossiblelibrary.api.resource.ResourceHelper; 12 | import mods.thecomputerizer.theimpossiblelibrary.api.resource.ResourceLocationAPI; 13 | 14 | public class ResourceAudioTrack extends DelegatedAudioTrack { 15 | 16 | private final ResourceLocationAPI location; 17 | @Getter private final MediaContainerDescriptor trackFactory; 18 | private final ResourceAudioSourceManager manager; 19 | 20 | public ResourceAudioTrack(AudioTrackInfo info, MediaContainerDescriptor trackFactory, 21 | ResourceAudioSourceManager manager) { 22 | super(info); 23 | this.location = ResourceHelper.getResource(info.identifier); 24 | this.trackFactory = trackFactory; 25 | this.manager = manager; 26 | } 27 | 28 | @Override public AudioSourceManager getSourceManager() { 29 | return manager; 30 | } 31 | 32 | @Override protected AudioTrack makeShallowClone() { 33 | return new ResourceAudioTrack(this.trackInfo,this.trackFactory,this.manager); 34 | } 35 | 36 | @Override public void process(LocalAudioTrackExecutor executor) throws Exception { 37 | try(ResourceSeekableInputStream stream = ResourceSeekableInputStream.get(this.manager.getChannel(),this.location)) { 38 | processDelegate((InternalAudioTrack)this.trackFactory.createTrack(this.trackInfo,stream),executor); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/client/channel/ChannelJukebox.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.client.channel; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 4 | import mods.thecomputerizer.theimpossiblelibrary.api.shapes.vectors.Vector3; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.toml.Toml; 6 | 7 | public final class ChannelJukebox extends ChannelClientSpecial { 8 | 9 | public ChannelJukebox(ChannelHelper helper, Toml table) { 10 | super(helper,table); 11 | this.setMasterVolume(1f); 12 | this.setCategoryVolume(1f); 13 | this.setTrackVolume(1f); 14 | } 15 | 16 | @Override public boolean checkJukebox(boolean jukebox) { 17 | return true; 18 | } 19 | 20 | @Override public void checkStop(Vector3 pos) { 21 | if(this.playingPos==pos || this.playingPos.distance(pos)<=2) 22 | stop(); //In case the position moves or there is a rounding error? 23 | } 24 | 25 | @Override public String getLogType() { 26 | return "JUKEBOX"; 27 | } 28 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/client/channel/ChannelPreview.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.client.channel; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 4 | import mods.thecomputerizer.theimpossiblelibrary.api.shapes.vectors.Vector3; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.toml.Toml; 6 | 7 | public final class ChannelPreview extends ChannelClientSpecial { 8 | 9 | public ChannelPreview(ChannelHelper helper, Toml table) { 10 | super(helper,table); 11 | } 12 | 13 | @Override public void checkStop(Vector3 pos) { 14 | stop(); 15 | } 16 | 17 | @Override public String getLogType() { 18 | return "PREVIEW"; 19 | } 20 | 21 | @Override public boolean showDebugSongInfo() { 22 | return false; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/client/gui/parameters/BasicLink.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.client.gui.parameters; 2 | 3 | import mods.thecomputerizer.theimpossiblelibrary.api.text.TextAPI; 4 | import mods.thecomputerizer.theimpossiblelibrary.api.toml.Toml; 5 | 6 | public class BasicLink extends DataLink { 7 | 8 | public BasicLink() { 9 | super(false); 10 | } 11 | 12 | @Override public TextAPI getDescription() { 13 | return null; 14 | } 15 | 16 | @Override public TextAPI getDisplayName() { 17 | return null; 18 | } 19 | 20 | @Override public void populateToml(Toml toml) {} 21 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/client/gui/parameters/DataLink.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.client.gui.parameters; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import mods.thecomputerizer.musictriggers.api.client.gui.MTScreenInfo; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.text.TextAPI; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.toml.Toml; 8 | 9 | public abstract class DataLink { 10 | 11 | protected final boolean dual; 12 | @Getter @Setter protected MTScreenInfo type; 13 | @Getter protected boolean modified; 14 | 15 | protected DataLink(boolean dual) { 16 | this.dual = dual; 17 | } 18 | 19 | public abstract TextAPI getDescription(); 20 | 21 | public abstract TextAPI getDisplayName(); 22 | 23 | public String getTypeName() { 24 | return this.type.getType(); 25 | } 26 | 27 | public abstract void populateToml(Toml toml); 28 | 29 | public void recalculateHoverText() { 30 | 31 | } 32 | 33 | public void setModified(boolean modified) { 34 | if(modified) this.type.enableApplyButton(); 35 | this.modified = modified; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/client/gui/parameters/SpecialButton.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.client.gui.parameters; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.client.gui.widget.Button; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.client.gui.widget.ShapeWidget; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.client.gui.widget.TextWidget; 8 | import mods.thecomputerizer.theimpossiblelibrary.api.client.gui.widget.Widget; 9 | 10 | import javax.annotation.Nullable; 11 | 12 | @Getter @Setter 13 | public class SpecialButton extends Button { 14 | 15 | private boolean deleting; 16 | 17 | public SpecialButton(@Nullable ShapeWidget shape, @Nullable TextWidget text, @Nullable Widget hover) { 18 | super(shape,text,hover); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/common/MTCommonEvents.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.common; 2 | 3 | import mods.thecomputerizer.musictriggers.api.MTRef; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.common.event.EventHelper; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.common.event.events.CustomTickEventWrapper; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.util.CustomTick; 8 | 9 | import static mods.thecomputerizer.theimpossiblelibrary.api.common.event.CommonEventWrapper.CommonType.CUSTOM_TICK; 10 | 11 | public class MTCommonEvents { 12 | 13 | public static void init() { 14 | MTRef.logInfo("Initializing common event invokers"); 15 | EventHelper.addListener(CUSTOM_TICK,MTCommonEvents::onCustomTick); 16 | CustomTick.addCustomTickTPS(ChannelHelper.getTickRate()); 17 | } 18 | 19 | private static void onCustomTick(CustomTickEventWrapper wrapper) { 20 | try { 21 | ChannelHelper.tick(wrapper.getTicker()); 22 | } catch(Throwable t) { 23 | ChannelHelper.logGlobalError("Failed to post custom tick!",t); 24 | throw t; 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/config/ConfigRemapper.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.config; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.MTDataRef.TableRef; 4 | import mods.thecomputerizer.theimpossiblelibrary.api.toml.Toml; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.toml.Toml.TomlEntry; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.toml.TomlRemapper; 7 | 8 | import javax.annotation.Nullable; 9 | import java.util.Objects; 10 | 11 | public abstract class ConfigRemapper extends TomlRemapper { 12 | 13 | final TableRef ref; 14 | 15 | public ConfigRemapper(TableRef ref) { 16 | this.ref = ref; 17 | } 18 | 19 | public abstract TomlRemapper getNextRemapper(TableRef next); 20 | 21 | @Nullable @Override public TomlRemapper getNextRemapper(String table) { 22 | TableRef next = this.ref.findChild(table); 23 | return Objects.nonNull(next) ? getNextRemapper(next) : null; 24 | } 25 | 26 | @Override public String remapTable(String name) { 27 | return name; 28 | } 29 | 30 | @Override public TomlEntry remapEntry(Toml parent, TomlEntry entry) { 31 | return entry; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/channel/ChannelEventHandler.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.channel; 2 | 3 | public interface ChannelEventHandler { 4 | 5 | void activate(); //trigger becomes active 6 | void close(); //the channel is getting closed and unregistered 7 | void deactivate(); //trigger is no longer active 8 | void play(boolean unpaused); //audio has started playing 9 | void playable(); //trigger parameters are met 10 | void playing(boolean unpaused); //while audio is playing 11 | void queue(); //queue audio to play 12 | void stop(); //stop playing audio 13 | void stopped(); //audio stopped playing 14 | void tickActive(boolean unpaused); //trigger is active 15 | void tickPlayable(boolean unpaused); //trigger is playable 16 | void unplayable(); //trigger is no longer playable 17 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/channel/ChannelSync.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.channel; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.MTDataRef.TableRef; 4 | import mods.thecomputerizer.musictriggers.api.data.parameter.ParameterWrapper; 5 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerAPI; 6 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerCombination; 7 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerMerged; 8 | import mods.thecomputerizer.musictriggers.api.network.MessageTriggerStates; 9 | 10 | import java.util.Collection; 11 | import java.util.HashSet; 12 | 13 | public class ChannelSync extends ChannelElement { 14 | 15 | private final Collection triggersToSync; 16 | 17 | public ChannelSync(ChannelAPI channel) { 18 | super(channel,"channel_sync"); 19 | this.triggersToSync = new HashSet<>(); 20 | } 21 | 22 | @Override protected String getSubTypeName() { 23 | return "Sync"; 24 | } 25 | 26 | @Override public boolean isResource() { 27 | return false; 28 | } 29 | 30 | public void queueTriggerSync(TriggerAPI trigger) { 31 | if(!trigger.isSynced() && !(trigger instanceof TriggerCombination) && !(trigger instanceof TriggerMerged)) 32 | this.triggersToSync.add(trigger); 33 | } 34 | 35 | public void addSynced(MessageTriggerStates msg) { 36 | if(!this.triggersToSync.isEmpty()) { 37 | msg.addStates(this.triggersToSync); 38 | this.triggersToSync.clear(); 39 | } 40 | } 41 | 42 | @Override public void close() { 43 | this.triggersToSync.clear(); 44 | } 45 | 46 | @Override public TableRef getReferenceData() { 47 | return null; 48 | } 49 | 50 | @Override public Class getTypeClass() { 51 | return ChannelSync.class; 52 | } 53 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/channel/ChannelSyncable.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.channel; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | 5 | public interface ChannelSyncable { 6 | 7 | void encode(ByteBuf buf); 8 | } 9 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/channel/LoadTracker.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.channel; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | @Setter 7 | public class LoadTracker { 8 | 9 | private boolean resourcesLoaded; 10 | @Getter private boolean loading = true; 11 | @Getter private boolean client; 12 | @Getter private boolean connected; 13 | 14 | public boolean areResourcesLoaded() { 15 | return this.resourcesLoaded; 16 | } 17 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/global/GlobalElement.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.global; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.parameter.ParameterWrapper; 4 | 5 | public abstract class GlobalElement extends ParameterWrapper { 6 | 7 | protected GlobalElement(String name) { 8 | super(name); 9 | } 10 | 11 | @Override public Class getTypeClass() { 12 | return GlobalElement.class; 13 | } 14 | 15 | @Override protected String getLogPrefix() { 16 | return "Global"; 17 | } 18 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/log/LogMessage.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.log; 2 | 3 | import mods.thecomputerizer.musictriggers.api.MTRef; 4 | import mods.thecomputerizer.theimpossiblelibrary.api.client.render.ColorCache; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.client.render.ColorHelper; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.io.LogHelper; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.io.LogHelper.ModLogger; 8 | import org.apache.logging.log4j.Level; 9 | 10 | public class LogMessage { 11 | 12 | private final Level level; 13 | private final String msg; 14 | private final Object[] args; 15 | 16 | public LogMessage(Level level, String msg, Object ... args) { 17 | this.level = level; 18 | this.msg = msg; 19 | this.args = args; 20 | } 21 | 22 | public ColorCache getColor() { 23 | switch(this.level.name()) { 24 | case "DEBUG": return ColorHelper.GRAY; 25 | case "ERROR": return ColorHelper.RED; 26 | case "FATAL": return ColorHelper.DARK_RED; 27 | case "TRACE": return ColorHelper.DARK_GRAY; 28 | case "WARN": return ColorHelper.GOLD; 29 | default: return ColorHelper.WHITE; 30 | } 31 | } 32 | 33 | public String getDisplay() { 34 | return LogHelper.injectParameters("["+getLevelName()+"] "+this.msg,args); 35 | } 36 | 37 | public String getLevelName() { 38 | return String.format("%-5s",level.name()); 39 | } 40 | 41 | public LogMessage log(ModLogger logger) { 42 | MTRef.log(this.level,this.msg,this.args); 43 | logger.log(this.level,this.msg,this.args); 44 | return this; 45 | } 46 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/log/LoggableAPI.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.log; 2 | 3 | public interface LoggableAPI { 4 | 5 | void logDebug(String msg, Object ...args); 6 | void logError(String msg, Object ...args); 7 | void logFatal(String msg, Object ...args); 8 | void logInfo(String msg, Object ...args); 9 | void logTrace(String msg, Object ...args); 10 | void logWarn(String msg, Object ...args); 11 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/nbt/NBTLoadable.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.nbt; 2 | 3 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.CompoundTagAPI; 4 | 5 | public interface NBTLoadable { 6 | 7 | boolean hasDataToSave(); 8 | void onConnected(CompoundTagAPI worldData); 9 | void onLoaded(CompoundTagAPI globalData); 10 | void saveGlobalTo(CompoundTagAPI globalData); 11 | void saveWorldTo(CompoundTagAPI worldData); 12 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/nbt/mode/NBTModeEqual.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.nbt.mode; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.nbt.NBTHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.BaseTagAPI; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.CompoundTagAPI; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.text.TextHelper; 8 | 9 | import javax.annotation.Nonnull; 10 | import java.util.Collection; 11 | import java.util.Collections; 12 | import java.util.Objects; 13 | import java.util.function.Supplier; 14 | 15 | public class NBTModeEqual extends NBTModeComparison { 16 | 17 | public NBTModeEqual(String name) { 18 | super(name); 19 | } 20 | 21 | @Override protected boolean checkMatchChild(ChannelAPI channel, CompoundTagAPI tag, boolean parentResult) { 22 | return parentResult || checkMatchInner(channel,tag); 23 | } 24 | 25 | @Override protected boolean checkMatchInner(ChannelAPI channel, CompoundTagAPI tag) { 26 | BaseTagAPI val = stepToTag(tag,this.split.length); 27 | if(Objects.isNull(val)) return TextHelper.isBlank(this.comparison); 28 | if(val.isPrimitive()) return comparePrimitive(val.asPrimitiveTag())==0; 29 | if(val.isString()) return compareString(val.asStringTag())==0; 30 | return false; 31 | } 32 | 33 | @Override public @Nonnull Collection> getPotentialChildren() { 34 | return Collections.singletonList(() -> NBTHelper.getMode("INVERT")); 35 | } 36 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/nbt/mode/NBTModeGreater.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.nbt.mode; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.nbt.NBTHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.BaseTagAPI; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.CompoundTagAPI; 7 | 8 | import javax.annotation.Nonnull; 9 | import java.util.Arrays; 10 | import java.util.Collection; 11 | import java.util.Objects; 12 | import java.util.function.Supplier; 13 | 14 | public class NBTModeGreater extends NBTModeComparison { 15 | 16 | public NBTModeGreater(String name) { 17 | super(name); 18 | } 19 | 20 | @Override protected boolean checkMatchChild(ChannelAPI channel, CompoundTagAPI tag, boolean parentResult) { 21 | return parentResult && checkMatchInner(channel,tag); 22 | } 23 | 24 | @Override protected boolean checkMatchInner(ChannelAPI channel, CompoundTagAPI tag) { 25 | BaseTagAPI val = stepToTag(tag,this.split.length); 26 | if(Objects.isNull(val)) return false; 27 | if(val.isPrimitive()) return comparePrimitive(val.asPrimitiveTag())>0; 28 | if(val.isString()) return compareString(val.asStringTag())>0; 29 | return false; 30 | } 31 | 32 | @Override public @Nonnull Collection> getPotentialChildren() { 33 | return Arrays.asList(() -> NBTHelper.getMode("EQUAL"),() -> NBTHelper.getMode("INVERT")); 34 | } 35 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/nbt/mode/NBTModeInvert.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.nbt.mode; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.BaseTagAPI; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.CompoundTagAPI; 6 | 7 | import javax.annotation.Nonnull; 8 | import java.util.Collection; 9 | import java.util.Collections; 10 | import java.util.Objects; 11 | import java.util.function.Supplier; 12 | 13 | public class NBTModeInvert extends NBTMode { 14 | 15 | public NBTModeInvert(String name) { 16 | super(name); 17 | } 18 | 19 | @Override protected boolean checkMatchChild(ChannelAPI channel, CompoundTagAPI tag, boolean parentResult) { 20 | return !parentResult; 21 | } 22 | 23 | @Override protected boolean checkMatchInner(ChannelAPI channel, CompoundTagAPI tag) { 24 | BaseTagAPI val = stepToTag(tag,this.split.length); 25 | return Objects.isNull(val) || (val.isPrimitive() && !val.asPrimitiveTag().asBoolean()); 26 | } 27 | 28 | @Override public @Nonnull Collection> getPotentialChildren() { 29 | return Collections.emptyList(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/nbt/mode/NBTModeKeyPresent.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.nbt.mode; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.nbt.NBTHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.BaseTagAPI; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.CompoundTagAPI; 7 | 8 | import javax.annotation.Nonnull; 9 | import java.util.Collection; 10 | import java.util.Collections; 11 | import java.util.Objects; 12 | import java.util.function.Supplier; 13 | 14 | public class NBTModeKeyPresent extends NBTModeComparison { 15 | 16 | public NBTModeKeyPresent(String name) { 17 | super(name); 18 | } 19 | 20 | @Override protected boolean checkMatchChild(ChannelAPI channel, CompoundTagAPI tag, boolean parentResult) { 21 | return parentResult && checkMatchInner(channel,tag); 22 | } 23 | 24 | @Override protected boolean checkMatchInner(ChannelAPI channel, CompoundTagAPI tag) { 25 | BaseTagAPI val = stepToTag(tag,this.split.length); 26 | return Objects.nonNull(val) && val.isCompound(); 27 | } 28 | 29 | @Override public @Nonnull Collection> getPotentialChildren() { 30 | return Collections.singletonList(() -> NBTHelper.getMode("INVERT")); 31 | } 32 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/nbt/mode/NBTModeLesser.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.nbt.mode; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.nbt.NBTHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.BaseTagAPI; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.CompoundTagAPI; 7 | 8 | import javax.annotation.Nonnull; 9 | import java.util.*; 10 | import java.util.function.Supplier; 11 | 12 | public class NBTModeLesser extends NBTModeComparison { 13 | 14 | public NBTModeLesser(String name) { 15 | super(name); 16 | } 17 | 18 | @Override protected boolean checkMatchChild(ChannelAPI channel, CompoundTagAPI tag, boolean parentResult) { 19 | return parentResult && checkMatchInner(channel,tag); 20 | } 21 | 22 | @Override protected boolean checkMatchInner(ChannelAPI channel, CompoundTagAPI tag) { 23 | BaseTagAPI val = stepToTag(tag,this.split.length); 24 | if(Objects.isNull(val)) return false; 25 | if(val.isPrimitive()) return comparePrimitive(val.asPrimitiveTag())<0; 26 | if(val.isString()) return compareString(val.asStringTag())<0; 27 | return false; 28 | } 29 | 30 | @Override public @Nonnull Collection> getPotentialChildren() { 31 | return Arrays.asList(() -> NBTHelper.getMode("EQUAL"),() -> NBTHelper.getMode("INVERT")); 32 | } 33 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/nbt/mode/NBTModeValPresent.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.nbt.mode; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.nbt.NBTHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.CompoundTagAPI; 6 | 7 | import javax.annotation.Nonnull; 8 | import java.util.Collection; 9 | import java.util.Collections; 10 | import java.util.Objects; 11 | import java.util.function.Supplier; 12 | 13 | public class NBTModeValPresent extends NBTModeComparison { 14 | 15 | public NBTModeValPresent(String name) { 16 | super(name); 17 | } 18 | 19 | @Override protected boolean checkMatchChild(ChannelAPI channel, CompoundTagAPI tag, boolean parentResult) { 20 | return parentResult && checkMatchInner(channel,tag); 21 | } 22 | 23 | @Override protected boolean checkMatchInner(ChannelAPI channel, CompoundTagAPI tag) { 24 | return Objects.nonNull(stepToTag(tag,this.split.length)); 25 | } 26 | 27 | @Override public @Nonnull Collection> getPotentialChildren() { 28 | return Collections.singletonList(() -> NBTHelper.getMode("INVERT")); 29 | } 30 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/parameter/Parameter.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.parameter; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Getter; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.network.NetworkHelper; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.util.GenericUtils; 7 | 8 | import javax.annotation.Nullable; 9 | 10 | @Getter 11 | public abstract class Parameter { 12 | 13 | protected final T defaultValue; 14 | protected T value; 15 | 16 | protected Parameter(T defaultValue) { 17 | this.defaultValue = defaultValue; 18 | this.value = defaultValue; 19 | } 20 | 21 | protected Parameter(ByteBuf buf) { 22 | this.defaultValue = read(buf); 23 | this.value = read(buf); 24 | } 25 | 26 | public abstract Parameter copy(); 27 | 28 | @Override public boolean equals(Object other) { 29 | return other instanceof Parameter && GenericUtils.matches(this.value,((Parameter)other).value); 30 | } 31 | 32 | public abstract boolean isBool(); 33 | public abstract boolean isByte(); 34 | 35 | public boolean isDefault() { 36 | return GenericUtils.matches(this.value,this.defaultValue); 37 | } 38 | 39 | public abstract boolean isDouble(); 40 | public abstract boolean isFloat(); 41 | public abstract boolean isInt(); 42 | public abstract boolean isList(); 43 | public abstract boolean isLong(); 44 | public abstract boolean isNumber(); 45 | public abstract boolean isPrimitive(); 46 | public abstract boolean isShort(); 47 | public abstract boolean isString(); 48 | 49 | protected abstract T read(ByteBuf buf); 50 | public abstract void setValue(@Nullable Object value); 51 | 52 | @Override public String toString() { 53 | return String.valueOf(this.value); 54 | } 55 | 56 | public void write(ByteBuf buf) { 57 | NetworkHelper.writeString(buf,getClass().getName()); 58 | write(buf,this.defaultValue); 59 | write(buf,this.value); 60 | } 61 | 62 | protected abstract void write(ByteBuf buf, T val); 63 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/parameter/ParameterString.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.parameter; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.theimpossiblelibrary.api.network.NetworkHelper; 5 | 6 | import javax.annotation.Nullable; 7 | import java.util.Objects; 8 | 9 | public class ParameterString extends Parameter { 10 | 11 | public ParameterString(String defaultValue) { 12 | super(defaultValue); 13 | } 14 | 15 | @SuppressWarnings("unused") //See ParameterHelper#parse 16 | public ParameterString(ByteBuf buf) { 17 | super(buf); 18 | } 19 | 20 | @Override public ParameterString copy() { 21 | ParameterString copy = new ParameterString(this.defaultValue); 22 | copy.value = this.value; 23 | return copy; 24 | } 25 | 26 | @Override public boolean isBool() { 27 | return false; 28 | } 29 | 30 | @Override public boolean isByte() { 31 | return false; 32 | } 33 | 34 | @Override public boolean isDouble() { 35 | return false; 36 | } 37 | 38 | @Override public boolean isFloat() { 39 | return false; 40 | } 41 | 42 | @Override public boolean isInt() { 43 | return false; 44 | } 45 | 46 | @Override public boolean isList() { 47 | return false; 48 | } 49 | 50 | @Override public boolean isLong() { 51 | return false; 52 | } 53 | 54 | @Override public boolean isNumber() { 55 | return false; 56 | } 57 | 58 | @Override public boolean isPrimitive() { 59 | return false; 60 | } 61 | 62 | @Override public boolean isShort() { 63 | return false; 64 | } 65 | 66 | @Override public boolean isString() { 67 | return true; 68 | } 69 | 70 | @Override protected String read(ByteBuf buf) { 71 | return NetworkHelper.readString(buf); 72 | } 73 | 74 | @Override public void setValue(@Nullable Object value) { 75 | this.value = Objects.nonNull(value) ? value.toString() : null; 76 | } 77 | 78 | @Override protected void write(ByteBuf buf, String val) { 79 | NetworkHelper.writeString(buf,val); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/parameter/UniversalParameters.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.parameter; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.MTDataRef.TableRef; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 5 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelElement; 6 | 7 | public class UniversalParameters extends ChannelElement { 8 | 9 | public static UniversalParameters get(ChannelAPI channel, TableRef ref) { 10 | return new UniversalParameters(channel,ref); 11 | } 12 | 13 | private final TableRef ref; 14 | 15 | public UniversalParameters(ChannelAPI channel, TableRef ref) { 16 | super(channel,ref.getName(),ref); 17 | this.ref = ref; 18 | } 19 | 20 | @Override public void close() {} 21 | 22 | @Override public TableRef getReferenceData() { 23 | return this.ref; 24 | } 25 | 26 | @Override public Class getTypeClass() { 27 | return UniversalParameters.class; 28 | } 29 | 30 | @Override protected String getSubTypeName() { 31 | return "Universal"; 32 | } 33 | 34 | @Override public boolean isResource() { 35 | return false; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/parameter/primitive/ParameterByte.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.parameter.primitive; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | 5 | import javax.annotation.Nullable; 6 | import java.util.Objects; 7 | 8 | public class ParameterByte extends ParameterNumber { 9 | 10 | public ParameterByte(byte defaultValue) { 11 | super(defaultValue); 12 | } 13 | 14 | @SuppressWarnings("unused") //See ParameterHelper#parse 15 | public ParameterByte(ByteBuf buf) { 16 | super(buf); 17 | } 18 | 19 | @Override public ParameterByte copy() { 20 | ParameterByte copy = new ParameterByte(this.defaultValue); 21 | copy.value = this.value; 22 | return copy; 23 | } 24 | 25 | @Override public boolean isByte() { 26 | return true; 27 | } 28 | 29 | @Override public boolean isDouble() { 30 | return false; 31 | } 32 | 33 | @Override public boolean isFloat() { 34 | return false; 35 | } 36 | 37 | @Override public boolean isInt() { 38 | return false; 39 | } 40 | 41 | @Override public boolean isLong() { 42 | return false; 43 | } 44 | 45 | @Override public boolean isShort() { 46 | return false; 47 | } 48 | 49 | @Override protected Byte read(ByteBuf buf) { 50 | return buf.readByte(); 51 | } 52 | 53 | @Override public void setValue(@Nullable Object value) { 54 | if(Objects.isNull(value)) this.value = 0; 55 | else if(value instanceof Boolean) this.value = (Boolean)value ? (byte)1 : 0; 56 | else if(value instanceof Number) this.value = ((Number)value).byteValue(); 57 | else { 58 | try { 59 | this.value = Byte.parseByte(value.toString()); 60 | } catch(NumberFormatException ignored) {} 61 | } 62 | } 63 | 64 | @Override protected void write(ByteBuf buf, Byte val) { 65 | buf.writeByte(val); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/parameter/primitive/ParameterDouble.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.parameter.primitive; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | 5 | import javax.annotation.Nullable; 6 | import java.util.Objects; 7 | 8 | public class ParameterDouble extends ParameterNumber { 9 | 10 | public ParameterDouble(double defaultValue) { 11 | super(defaultValue); 12 | } 13 | 14 | @SuppressWarnings("unused") //See ParameterHelper#parse 15 | public ParameterDouble(ByteBuf buf) { 16 | super(buf); 17 | } 18 | 19 | @Override public ParameterDouble copy() { 20 | ParameterDouble copy = new ParameterDouble(this.defaultValue); 21 | copy.value = this.value; 22 | return copy; 23 | } 24 | 25 | @Override public boolean isByte() { 26 | return false; 27 | } 28 | 29 | @Override public boolean isDouble() { 30 | return true; 31 | } 32 | 33 | @Override public boolean isFloat() { 34 | return false; 35 | } 36 | 37 | @Override public boolean isInt() { 38 | return false; 39 | } 40 | 41 | @Override public boolean isLong() { 42 | return false; 43 | } 44 | 45 | @Override public boolean isShort() { 46 | return false; 47 | } 48 | 49 | @Override protected Double read(ByteBuf buf) { 50 | return buf.readDouble(); 51 | } 52 | 53 | @Override public void setValue(@Nullable Object value) { 54 | if(Objects.isNull(value)) this.value = 0d; 55 | else if(value instanceof Boolean) this.value = (Boolean)value ? 1d : 0d; 56 | else if(value instanceof Number) this.value = ((Number)value).doubleValue(); 57 | else { 58 | try { 59 | this.value = Double.parseDouble(value.toString()); 60 | } catch(NumberFormatException ignored) {} 61 | } 62 | } 63 | 64 | @Override protected void write(ByteBuf buf, Double val) { 65 | buf.writeDouble(val); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/parameter/primitive/ParameterFloat.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.parameter.primitive; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | 5 | import javax.annotation.Nullable; 6 | import java.util.Objects; 7 | 8 | public class ParameterFloat extends ParameterNumber { 9 | 10 | public ParameterFloat(float defaultValue) { 11 | super(defaultValue); 12 | } 13 | 14 | @SuppressWarnings("unused") //See ParameterHelper#parse 15 | public ParameterFloat(ByteBuf buf) { 16 | super(buf); 17 | } 18 | 19 | @Override public ParameterFloat copy() { 20 | ParameterFloat copy = new ParameterFloat(this.defaultValue); 21 | copy.value = this.value; 22 | return copy; 23 | } 24 | 25 | @Override public boolean isByte() { 26 | return false; 27 | } 28 | 29 | @Override public boolean isDouble() { 30 | return false; 31 | } 32 | 33 | @Override public boolean isFloat() { 34 | return true; 35 | } 36 | 37 | @Override public boolean isInt() { 38 | return false; 39 | } 40 | 41 | @Override public boolean isLong() { 42 | return false; 43 | } 44 | 45 | @Override public boolean isShort() { 46 | return false; 47 | } 48 | 49 | @Override protected Float read(ByteBuf buf) { 50 | return buf.readFloat(); 51 | } 52 | 53 | @Override public void setValue(@Nullable Object value) { 54 | if(Objects.isNull(value)) this.value = 0f; 55 | else if(value instanceof Boolean) this.value = (Boolean)value ? 1f : 0f; 56 | else if(value instanceof Number) this.value = ((Number)value).floatValue(); 57 | else { 58 | try { 59 | this.value = Float.parseFloat(value.toString()); 60 | } catch(NumberFormatException ignored) {} 61 | } 62 | } 63 | 64 | @Override protected void write(ByteBuf buf, Float val) { 65 | buf.writeFloat(val); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/parameter/primitive/ParameterInt.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.parameter.primitive; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | 5 | import javax.annotation.Nullable; 6 | import java.util.Objects; 7 | 8 | public class ParameterInt extends ParameterNumber { 9 | 10 | public ParameterInt(int defaultValue) { 11 | super(defaultValue); 12 | } 13 | 14 | @SuppressWarnings("unused") //See ParameterHelper#parse 15 | public ParameterInt(ByteBuf buf) { 16 | super(buf); 17 | } 18 | 19 | @Override public ParameterInt copy() { 20 | ParameterInt copy = new ParameterInt(this.defaultValue); 21 | copy.value = this.value; 22 | return copy; 23 | } 24 | 25 | @Override public boolean isByte() { 26 | return false; 27 | } 28 | 29 | @Override public boolean isDouble() { 30 | return false; 31 | } 32 | 33 | @Override public boolean isFloat() { 34 | return false; 35 | } 36 | 37 | @Override public boolean isInt() { 38 | return true; 39 | } 40 | 41 | @Override public boolean isLong() { 42 | return false; 43 | } 44 | 45 | @Override public boolean isShort() { 46 | return false; 47 | } 48 | 49 | @Override protected Integer read(ByteBuf buf) { 50 | return buf.readInt(); 51 | } 52 | 53 | @Override public void setValue(@Nullable Object value) { 54 | if(Objects.isNull(value)) this.value = 0; 55 | else if(value instanceof Boolean) this.value = (Boolean)value ? 1 : 0; 56 | else if(value instanceof Number) this.value = ((Number)value).intValue(); 57 | else { 58 | try { 59 | this.value = Integer.parseInt(value.toString()); 60 | } catch(NumberFormatException ignored) {} 61 | } 62 | } 63 | 64 | @Override protected void write(ByteBuf buf, Integer val) { 65 | buf.writeInt(val); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/parameter/primitive/ParameterLong.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.parameter.primitive; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | 5 | import javax.annotation.Nullable; 6 | import java.util.Objects; 7 | 8 | public class ParameterLong extends ParameterNumber { 9 | 10 | public ParameterLong(long defaultValue) { 11 | super(defaultValue); 12 | } 13 | 14 | @SuppressWarnings("unused") //See ParameterHelper#parse 15 | public ParameterLong(ByteBuf buf) { 16 | super(buf); 17 | } 18 | 19 | @Override public ParameterLong copy() { 20 | ParameterLong copy = new ParameterLong(this.defaultValue); 21 | copy.value = this.value; 22 | return copy; 23 | } 24 | 25 | @Override public boolean isByte() { 26 | return false; 27 | } 28 | 29 | @Override public boolean isDouble() { 30 | return false; 31 | } 32 | 33 | @Override public boolean isFloat() { 34 | return false; 35 | } 36 | 37 | @Override public boolean isInt() { 38 | return false; 39 | } 40 | 41 | @Override public boolean isLong() { 42 | return true; 43 | } 44 | 45 | @Override public boolean isShort() { 46 | return false; 47 | } 48 | 49 | @Override protected Long read(ByteBuf buf) { 50 | return buf.readLong(); 51 | } 52 | 53 | @Override public void setValue(@Nullable Object value) { 54 | if(Objects.isNull(value)) this.value = 0L; 55 | else if(value instanceof Boolean) this.value = (Boolean)value ? 1L : 0L; 56 | else if(value instanceof Number) this.value = ((Number)value).longValue(); 57 | else { 58 | try { 59 | this.value = Long.parseLong(value.toString()); 60 | } catch(NumberFormatException ignored) {} 61 | } 62 | } 63 | 64 | @Override protected void write(ByteBuf buf, Long val) { 65 | buf.writeLong(val); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/parameter/primitive/ParameterNumber.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.parameter.primitive; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.musictriggers.api.data.parameter.Parameter; 5 | 6 | @SuppressWarnings("unused") 7 | public abstract class ParameterNumber extends Parameter { 8 | 9 | protected ParameterNumber(N defaultValue) { 10 | super(defaultValue); 11 | } 12 | 13 | protected ParameterNumber(ByteBuf buf) { 14 | super(buf); 15 | } 16 | 17 | public byte byteValue() { 18 | return this.value.byteValue(); 19 | } 20 | 21 | @Override public abstract ParameterNumber copy(); 22 | 23 | public byte defaultByteValue() { 24 | return this.defaultValue.byteValue(); 25 | } 26 | 27 | public double defaultDoubleValue() { 28 | return this.defaultValue.doubleValue(); 29 | } 30 | 31 | public float defaultFloatValue() { 32 | return this.defaultValue.floatValue(); 33 | } 34 | 35 | public int defaultIntValue() { 36 | return this.defaultValue.intValue(); 37 | } 38 | 39 | public long defaultLongValue() { 40 | return this.defaultValue.longValue(); 41 | } 42 | 43 | public short defaultShortValue() { 44 | return this.defaultValue.shortValue(); 45 | } 46 | 47 | public double doubleValue() { 48 | return this.value.doubleValue(); 49 | } 50 | 51 | public float floatValue() { 52 | return this.value.floatValue(); 53 | } 54 | 55 | public int intValue() { 56 | return this.value.intValue(); 57 | } 58 | 59 | @Override public boolean isBool() { 60 | return false; 61 | } 62 | 63 | @Override public boolean isList() { 64 | return false; 65 | } 66 | 67 | @Override public boolean isNumber() { 68 | return true; 69 | } 70 | 71 | @Override public boolean isPrimitive() { 72 | return true; 73 | } 74 | 75 | @Override public boolean isString() { 76 | return false; 77 | } 78 | 79 | public long longValue() { 80 | return this.value.longValue(); 81 | } 82 | 83 | public short shortValue() { 84 | return this.value.shortValue(); 85 | } 86 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/parameter/primitive/ParameterShort.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.parameter.primitive; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | 5 | import javax.annotation.Nullable; 6 | import java.util.Objects; 7 | 8 | public class ParameterShort extends ParameterNumber { 9 | 10 | public ParameterShort(short defaultValue) { 11 | super(defaultValue); 12 | } 13 | 14 | @SuppressWarnings("unused") //See ParameterHelper#parse 15 | public ParameterShort(ByteBuf buf) { 16 | super(buf); 17 | } 18 | 19 | @Override public ParameterShort copy() { 20 | ParameterShort copy = new ParameterShort(this.defaultValue); 21 | copy.value = this.value; 22 | return copy; 23 | } 24 | 25 | @Override public boolean isByte() { 26 | return false; 27 | } 28 | 29 | @Override public boolean isDouble() { 30 | return false; 31 | } 32 | 33 | @Override public boolean isFloat() { 34 | return false; 35 | } 36 | 37 | @Override public boolean isInt() { 38 | return false; 39 | } 40 | 41 | @Override public boolean isLong() { 42 | return false; 43 | } 44 | 45 | @Override public boolean isShort() { 46 | return true; 47 | } 48 | 49 | @Override protected Short read(ByteBuf buf) { 50 | return buf.readShort(); 51 | } 52 | 53 | @Override public void setValue(@Nullable Object value) { 54 | if(Objects.isNull(value)) this.value = 0; 55 | else if(value instanceof Boolean) this.value = (Boolean)value ? (short)1 : 0; 56 | else if(value instanceof Number) this.value = ((Number)value).shortValue(); 57 | else { 58 | try { 59 | this.value = Short.parseShort(value.toString()); 60 | } catch(NumberFormatException ignored) {} 61 | } 62 | } 63 | 64 | @Override protected void write(ByteBuf buf, Short val) { 65 | buf.writeLong(val); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/render/CardAPI.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.render; 2 | 3 | import lombok.Getter; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 5 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelElement; 6 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelElementRunner; 7 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerAPI; 8 | import mods.thecomputerizer.theimpossiblelibrary.api.toml.Toml; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | @Getter 14 | public abstract class CardAPI extends ChannelElementRunner { 15 | 16 | private final List triggers; 17 | 18 | protected CardAPI(ChannelAPI channel, String name) { 19 | super(channel,name); 20 | this.triggers = new ArrayList<>(); 21 | } 22 | 23 | @Override public void close() { 24 | this.triggers.clear(); 25 | } 26 | 27 | @Override public Class getTypeClass() { 28 | return CardAPI.class; 29 | } 30 | 31 | @Override public boolean isClient() { 32 | return true; 33 | } 34 | 35 | @Override public boolean isServer() { 36 | return true; 37 | } 38 | 39 | @Override public boolean isResource() { 40 | return true; 41 | } 42 | 43 | @Override public boolean parse(Toml table) { 44 | return super.parse(table) && parseTriggers(this.channel,this.triggers); 45 | } 46 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/render/CardHelper.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.render; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.theimpossiblelibrary.api.toml.Toml; 5 | 6 | import java.util.Collection; 7 | import java.util.Objects; 8 | 9 | public class CardHelper { 10 | 11 | public static void parseImageCards(ChannelAPI channel, Collection cards, Toml ... images) { 12 | if(Objects.nonNull(images)) { 13 | for(Toml image : images) { 14 | ImageElement element = new ImageElement(channel); 15 | if(element.parse(image)) cards.add(element); 16 | } 17 | } 18 | } 19 | 20 | public static void parseTitleCards(ChannelAPI channel, Collection cards, Toml ... titles) { 21 | if(Objects.nonNull(titles)) { 22 | for(Toml title : titles) { 23 | TitleElement element = new TitleElement(channel); 24 | if(element.parse(title)) cards.add(element); 25 | } 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/render/ImageElement.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.render; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.MTDataRef.TableRef; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.client.render.RenderHelper; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.common.CommonAPI; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.core.TILRef; 8 | import mods.thecomputerizer.theimpossiblelibrary.api.resource.ResourceAPI; 9 | 10 | import static mods.thecomputerizer.musictriggers.api.data.MTDataRef.IMAGE_CARD; 11 | 12 | public class ImageElement extends CardAPI { 13 | 14 | public ImageElement(ChannelAPI channel) { 15 | super(channel,"image_card"); 16 | } 17 | 18 | @Override public String getName() { 19 | return getParameterAsString("name"); 20 | } 21 | 22 | @Override protected String getSubTypeName() { 23 | return "Image_Card"; 24 | } 25 | 26 | @Override public TableRef getReferenceData() { 27 | return IMAGE_CARD; 28 | } 29 | 30 | @Override public void run() { 31 | super.run(); 32 | ResourceAPI api = TILRef.getCommonSubAPI(CommonAPI::getResource); 33 | RenderHelper.addRenderable(RenderHelper.initPNG(api.getLocation(getParameterAsString("name")),asValueMap())); 34 | } 35 | 36 | @Override public boolean verifyRequiredParameters() { 37 | return hasParameter("name"); 38 | } 39 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/render/TitleElement.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.render; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.MTDataRef.TableRef; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.client.render.RenderHelper; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.client.render.RenderableText; 7 | 8 | import static mods.thecomputerizer.musictriggers.api.data.MTDataRef.TITLE_CARD; 9 | 10 | public class TitleElement extends CardAPI { 11 | 12 | public TitleElement(ChannelAPI channel) { 13 | super(channel,"title_card"); 14 | } 15 | 16 | @Override protected String getSubTypeName() { 17 | return "Title_Card"; 18 | } 19 | 20 | @Override public TableRef getReferenceData() { 21 | return TITLE_CARD; 22 | } 23 | 24 | @Override public void run() { 25 | super.run(); 26 | RenderHelper.addRenderable(new RenderableText(asValueMap())); 27 | } 28 | 29 | @Override public boolean verifyRequiredParameters() { 30 | return hasParameter("titles"); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/basic/BasicTrigger.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.basic; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.parameter.Parameter; 5 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerAPI; 6 | 7 | import javax.annotation.Nullable; 8 | 9 | public abstract class BasicTrigger extends TriggerAPI { 10 | 11 | protected BasicTrigger(ChannelAPI channel, String name) { 12 | super(channel, name); 13 | } 14 | 15 | @Override protected @Nullable Parameter initParameter(String parameter, Parameter defaultParameter) { 16 | return parameter.equals("priority") ? null : defaultParameter; 17 | } 18 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/basic/TriggerGeneric.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.basic; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerGeneric extends BasicTrigger { 7 | 8 | public TriggerGeneric(ChannelAPI channel) { 9 | super(channel,"generic"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveGeneric(); 14 | } 15 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/basic/TriggerLoading.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.basic; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerLoading extends BasicTrigger { 7 | 8 | public TriggerLoading(ChannelAPI channel) { 9 | super(channel,"loading"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveLoading(); 14 | } 15 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/basic/TriggerMenu.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.basic; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerMenu extends BasicTrigger { 7 | 8 | public TriggerMenu(ChannelAPI channel) { 9 | super(channel,"menu"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveMenu(); 14 | } 15 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/HolderTrigger.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerAPI; 5 | 6 | public abstract class HolderTrigger extends TriggerAPI { 7 | 8 | protected HolderTrigger(ChannelAPI channel, String name) { 9 | super(channel,name); 10 | } 11 | 12 | @Override public String getNameWithID() { 13 | return getName()+"-"+getIdentifier(); 14 | } 15 | 16 | protected boolean hasValidIdentifier() { 17 | if(hasNonDefaultParameter("identifier")) return true; 18 | logMissingParameter("identifier"); 19 | return false; 20 | } 21 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerAdvancement.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerAdvancement extends HolderTrigger { 7 | 8 | public TriggerAdvancement(ChannelAPI channel) { 9 | super(channel,"advancement"); 10 | } 11 | 12 | @Override public boolean imply(String id) { 13 | logError("Trigger must be explicitly defined"); 14 | return false; 15 | } 16 | 17 | @Override public boolean isPlayableContext(TriggerContext ctx) { 18 | return ctx.isActiveAdvancement(getResourceCtx()); 19 | } 20 | 21 | @Override public boolean verifyRequiredParameters() { 22 | String[] parameters = new String[]{"identifier","persistence"}; 23 | if(hasAllNonDefaultParameter(parameters)) { 24 | parameters = new String[]{"display_name","resource_name"}; 25 | if(hasAnyNonDefaultParameter(parameters)) return true; 26 | logMissingPotentialParameter(parameters); 27 | } else logMissingParameters(parameters); 28 | return false; 29 | } 30 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerBiome.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import lombok.Getter; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 5 | import mods.thecomputerizer.musictriggers.api.data.trigger.ResourceContext; 6 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 7 | 8 | import java.util.Collections; 9 | import java.util.List; 10 | 11 | @Getter 12 | public class TriggerBiome extends HolderTrigger { 13 | 14 | private ResourceContext tagCtx; 15 | 16 | public TriggerBiome(ChannelAPI channel) { 17 | super(channel,"biome"); 18 | } 19 | 20 | @Override public boolean imply(String id) { 21 | setExistingParameterValue("resource_name",Collections.singletonList(id)); 22 | return super.imply(id); 23 | } 24 | 25 | @Override public boolean isPlayableContext(TriggerContext ctx) { 26 | return ctx.isActiveBiome(this); 27 | } 28 | 29 | @SuppressWarnings("unchecked") 30 | @Override public void successfullyParsed() { 31 | super.successfullyParsed(); 32 | List resourceName = (List)getParameterAsList("biome_tag"); 33 | List displayeName = Collections.emptyList(); 34 | String resourceMatcher = getParameterAsString("biome_tag_matcher"); 35 | String displayMatcher = "EXACT"; 36 | this.tagCtx = new ResourceContext(resourceName,displayeName,resourceMatcher,displayMatcher); 37 | this.tagCtx.setAnyReturns(false); 38 | } 39 | 40 | @Override public boolean verifyRequiredParameters() { 41 | if(hasValidIdentifier()) { 42 | String[] parameters = new String[]{"biome_rainfall","biome_tag","biome_temperature","display_name", 43 | "rain_type","resource_name"}; 44 | if(hasAnyNonDefaultParameter(parameters)) return true; 45 | logMissingPotentialParameter(parameters); 46 | } 47 | return false; 48 | } 49 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerBlockEntity.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | 8 | public class TriggerBlockEntity extends HolderTrigger { 9 | 10 | public TriggerBlockEntity(ChannelAPI channel) { 11 | super(channel,"blockentity"); 12 | } 13 | 14 | @Override public boolean imply(String id) { 15 | setExistingParameterValue("resource_name", Collections.singletonList(id)); 16 | return super.imply(id); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveBlockEntity(getResourceCtx(),getParameterAsInt("detection_range"), 21 | getParameterAsFloat("detection_y_ratio")); 22 | } 23 | 24 | @Override public boolean verifyRequiredParameters() { 25 | if(hasValidIdentifier()) { 26 | String[] parameters = new String[]{"display_name","resource_name"}; 27 | if(hasAnyNonDefaultParameter(parameters)) return true; 28 | logMissingPotentialParameter(parameters); 29 | } 30 | return false; 31 | } 32 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerCommand.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerCommand extends HolderTrigger { 7 | 8 | /** 9 | * The number of active slow ticks this trigger has left 10 | */ 11 | private int activeCount; 12 | 13 | public TriggerCommand(ChannelAPI channel) { 14 | super(channel,"command"); 15 | } 16 | 17 | public void decrement() { 18 | if(hasCount()) this.activeCount--; 19 | } 20 | 21 | public boolean hasCount() { 22 | return this.activeCount>0; 23 | } 24 | 25 | @Override public boolean imply(String id) { 26 | try { 27 | int persistence = Integer.parseInt(id); 28 | if(persistence<=0) throw new NumberFormatException("Integer must be positive"); 29 | setExistingParameterValue("persistence",persistence); 30 | } catch(NumberFormatException ex) { 31 | logError("Failed to imply persistance from identifier {} (must be a positive integer)",id,ex); 32 | } 33 | return super.imply(id); 34 | } 35 | 36 | @Override public boolean isPlayableContext(TriggerContext ctx) { 37 | return ctx.isActiveCommand(this); 38 | } 39 | 40 | @Override public boolean isServer() { 41 | return true; 42 | } 43 | 44 | public void onCommandExecuted() { 45 | this.activeCount = 2; 46 | } 47 | 48 | @Override public boolean verifyRequiredParameters() { 49 | String[] parameters = new String[]{"identifier","persistence"}; 50 | if(hasAllNonDefaultParameter(parameters)) return true; 51 | logMissingParameters(parameters); 52 | return false; 53 | } 54 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerDifficulty.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerDifficulty extends HolderTrigger { 7 | 8 | public TriggerDifficulty(ChannelAPI channel) { 9 | super(channel,"difficulty"); 10 | } 11 | 12 | @Override public boolean imply(String id) { 13 | int level = -1; 14 | switch(id) { 15 | case "0": 16 | case "1": 17 | case "2": 18 | case "3": 19 | case "4": { 20 | level = Integer.parseInt(id); 21 | break; 22 | } 23 | case "easy": { 24 | level = 1; 25 | break; 26 | } 27 | case "hard": { 28 | level = 3; 29 | break; 30 | } 31 | case "hardcore": { 32 | level = 4; 33 | break; 34 | } 35 | case "normal": { 36 | level = 2; 37 | break; 38 | } 39 | case "peaceful": { 40 | level = 0; 41 | break; 42 | } 43 | } 44 | if(level!=-1) { 45 | setExistingParameterValue("level",level); 46 | return super.imply(id); 47 | } 48 | logError("Unable to imply level from identifier {} (Accepts 0,1,2,3,4,peaceful,easy,normal,hard,hardcore)",id); 49 | return false; 50 | } 51 | 52 | @Override public boolean isPlayableContext(TriggerContext ctx) { 53 | return ctx.isActiveDifficulty(getParameterAsInt("level")); 54 | } 55 | 56 | @Override public boolean verifyRequiredParameters() { 57 | String[] parameters = new String[]{"identifier","level"}; 58 | if(hasAllNonDefaultParameter(parameters)) return true; 59 | logMissingParameters(parameters); 60 | return false; 61 | } 62 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerDimension.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | 8 | public class TriggerDimension extends HolderTrigger { 9 | 10 | public TriggerDimension(ChannelAPI channel) { 11 | super(channel,"dimension"); 12 | } 13 | 14 | @Override public boolean imply(String id) { 15 | setExistingParameterValue("resource_name", Collections.singletonList(id)); 16 | return super.imply(id); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveDimension(getResourceCtx()); 21 | } 22 | 23 | @Override public boolean verifyRequiredParameters() { 24 | if(hasValidIdentifier()) { 25 | String[] parameters = new String[]{"display_name","resource_name"}; 26 | if(hasAnyNonDefaultParameter(parameters)) return true; 27 | logMissingPotentialParameter(parameters); 28 | } 29 | return false; 30 | } 31 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerEffect.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | 8 | public class TriggerEffect extends HolderTrigger { 9 | 10 | public TriggerEffect(ChannelAPI channel) { 11 | super(channel,"effect"); 12 | } 13 | 14 | @Override public boolean imply(String id) { 15 | setExistingParameterValue("resource_name", Collections.singletonList(id)); 16 | return super.imply(id); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveEffect(getResourceCtx()); 21 | } 22 | 23 | @Override public boolean verifyRequiredParameters() { 24 | if(hasValidIdentifier()) { 25 | String[] parameters = new String[]{"display_name","resource_name"}; 26 | if(hasAnyNonDefaultParameter(parameters)) return true; 27 | logMissingPotentialParameter(parameters); 28 | } 29 | return false; 30 | } 31 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerGUI.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | 8 | public class TriggerGUI extends HolderTrigger { 9 | 10 | public TriggerGUI(ChannelAPI channel) { 11 | super(channel,"gui"); 12 | } 13 | 14 | @Override public boolean imply(String id) { 15 | setExistingParameterValue("resource_name",Collections.singletonList(id)); 16 | return super.imply(id); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveGUI(getResourceCtx()); 21 | } 22 | 23 | @Override public boolean verifyRequiredParameters() { 24 | if(hasValidIdentifier()) { 25 | String[] parameters = new String[]{"display_name","resource_name"}; 26 | if(hasAnyNonDefaultParameter(parameters)) return true; 27 | logMissingPotentialParameter(parameters); 28 | } 29 | return false; 30 | } 31 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerGamestage.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerGamestage extends HolderTrigger { 10 | 11 | public TriggerGamestage(ChannelAPI channel) { 12 | super(channel,"gamestage"); 13 | } 14 | 15 | @Override public boolean imply(String id) { 16 | setExistingParameterValue("resource_name",Collections.singletonList(id)); 17 | return super.imply(id); 18 | } 19 | 20 | @Override public List getRequiredMods() { 21 | return Collections.singletonList("gamestages"); 22 | } 23 | 24 | @Override public boolean isPlayableContext(TriggerContext ctx) { 25 | return ctx.isActiveGamestage(getResourceCtx(),getParameterAsBoolean("is_whitelist")); 26 | } 27 | 28 | @Override public boolean verifyRequiredParameters() { 29 | if(hasValidIdentifier()) { 30 | String[] parameters = new String[]{"display_name","resource_name"}; 31 | if(hasAnyNonDefaultParameter(parameters)) return true; 32 | logMissingPotentialParameter(parameters); 33 | } 34 | return false; 35 | } 36 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerHeight.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerHeight extends HolderTrigger { 7 | 8 | public TriggerHeight(ChannelAPI channel) { 9 | super(channel,"height"); 10 | } 11 | 12 | @Override public boolean imply(String id) { 13 | try { 14 | int level = Integer.parseInt(id); 15 | setExistingParameterValue("level",level); 16 | } catch(NumberFormatException ex) { 17 | logError("Failed to imply level from identifier {} (must be an integer)",id,ex); 18 | } 19 | return super.imply(id); 20 | } 21 | 22 | @Override public boolean isPlayableContext(TriggerContext ctx) { 23 | return ctx.isActiveHeight(getParameterAsInt("level"),getParameterAsBoolean("check_for_sky"), 24 | getParameterAsBoolean("check_above_level")); 25 | } 26 | 27 | @Override public boolean verifyRequiredParameters() { 28 | String[] parameters = new String[]{"identifier","level"}; 29 | if(hasAllNonDefaultParameter(parameters)) return true; 30 | logMissingParameters(parameters); 31 | return false; 32 | } 33 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerInventory.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerInventory extends HolderTrigger { 10 | 11 | public TriggerInventory(ChannelAPI channel) { 12 | super(channel,"inventory"); 13 | } 14 | 15 | @Override public boolean imply(String id) { 16 | setExistingParameterValue("items",Collections.singletonList(id)); 17 | return super.imply(id); 18 | } 19 | 20 | @SuppressWarnings("unchecked") 21 | @Override public boolean isPlayableContext(TriggerContext ctx) { 22 | return ctx.isActiveInventory((List)getParameterAsList("items"), 23 | (List)getParameterAsList("slots")); 24 | } 25 | 26 | @Override public boolean verifyRequiredParameters() { 27 | String[] parameters = new String[]{"identifier","items"}; 28 | if(hasAllNonDefaultParameter(parameters)) return true; 29 | logMissingParameters(parameters); 30 | return false; 31 | } 32 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerLight.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerLight extends HolderTrigger { 7 | 8 | public TriggerLight(ChannelAPI channel) { 9 | super(channel,"light"); 10 | } 11 | 12 | @Override public boolean imply(String id) { 13 | try { 14 | int level = Integer.parseInt(id); 15 | if(level<0 || level>15) throw new NumberFormatException("Integer must be in the bounds [0,15]"); 16 | setExistingParameterValue("level",level); 17 | } catch(NumberFormatException ex) { 18 | logError("Failed to imply level from identifier {} (must be a bounded integer between [0,15])",id,ex); 19 | } 20 | return super.imply(id); 21 | } 22 | 23 | @Override public boolean isPlayableContext(TriggerContext ctx) { 24 | return ctx.isActiveLight(getParameterAsInt("level"),getParameterAsString("light_type").toLowerCase()); 25 | } 26 | 27 | @Override public boolean verifyRequiredParameters() { 28 | if(hasValidIdentifier()) return true; 29 | logMissingParameter("identifier"); 30 | return false; 31 | } 32 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerMoon.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerMoon extends HolderTrigger { 10 | 11 | public TriggerMoon(ChannelAPI channel) { 12 | super(channel,"moon"); 13 | } 14 | 15 | @Override public boolean imply(String id) { 16 | setExistingParameterValue("resource_name",Collections.singletonList(id)); 17 | return super.imply(id); 18 | } 19 | 20 | @Override public List getRequiredMods() { 21 | return Collections.singletonList("enhancedcelestials"); 22 | } 23 | 24 | @Override public boolean isPlayableContext(TriggerContext ctx) { 25 | return ctx.isActiveMoon(getResourceCtx()); 26 | } 27 | 28 | @Override public boolean verifyRequiredParameters() { 29 | if(hasValidIdentifier()) { 30 | String[] parameters = new String[]{"display_name","resource_name"}; 31 | if(hasAnyNonDefaultParameter(parameters)) return true; 32 | logMissingPotentialParameter(parameters); 33 | } 34 | return false; 35 | } 36 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerPVP.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerPVP extends HolderTrigger { 7 | 8 | public TriggerPVP(ChannelAPI channel) { 9 | super(channel,"pvp"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActivePVP(); 14 | } 15 | 16 | @Override public boolean isServer() { 17 | return true; 18 | } 19 | 20 | @Override public boolean verifyRequiredParameters() { 21 | return hasValidIdentifier(); 22 | } 23 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerRaid.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerRaid extends HolderTrigger { 7 | 8 | public TriggerRaid(ChannelAPI channel) { 9 | super(channel,"raid"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveRaid(getParameterAsList("raid_status"),getParameterAsInt("wave")); 14 | } 15 | 16 | @Override public boolean isServer() { 17 | return true; 18 | } 19 | 20 | @Override public boolean verifyRequiredParameters() { 21 | return hasValidIdentifier(); 22 | } 23 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerRainIntensity.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerRainIntensity extends HolderTrigger { 10 | 11 | public TriggerRainIntensity(ChannelAPI channel) { 12 | super(channel,"rainintensity"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Collections.singletonList("dsurround"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveRainIntensity(getParameterAsFloat("level")); 21 | } 22 | 23 | @Override public boolean verifyRequiredParameters() { 24 | return hasValidIdentifier(); 25 | } 26 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerRiding.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | 8 | public class TriggerRiding extends HolderTrigger { 9 | 10 | public TriggerRiding(ChannelAPI channel) { 11 | super(channel,"riding"); 12 | } 13 | 14 | @Override public boolean imply(String id) { 15 | setExistingParameterValue("resource_name", Collections.singletonList(id)); 16 | return super.imply(id); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveRiding(getResourceCtx()); 21 | } 22 | 23 | @Override public boolean verifyRequiredParameters() { 24 | if(hasValidIdentifier()) { 25 | String[] parameters = new String[]{"display_name","resource_name"}; 26 | if(hasAnyNonDefaultParameter(parameters)) return true; 27 | logMissingPotentialParameter(parameters); 28 | } 29 | return false; 30 | } 31 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerSeason.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerSeason extends HolderTrigger { 10 | 11 | public TriggerSeason(ChannelAPI channel) { 12 | super(channel,"season"); 13 | } 14 | 15 | @Override public boolean imply(String id) { 16 | int season = -1; 17 | switch(id) { 18 | case "0": 19 | case "1": 20 | case "2": 21 | case "3": { 22 | season = Integer.parseInt(id); 23 | break; 24 | } 25 | case "autumn": 26 | case "fall": { 27 | season = 2; 28 | break; 29 | } 30 | case "spring": { 31 | season = 0; 32 | break; 33 | } 34 | case "summer": { 35 | season = 1; 36 | break; 37 | } 38 | case "winter": { 39 | season = 3; 40 | break; 41 | } 42 | } 43 | if(season!=-1) { 44 | setExistingParameterValue("season",season); 45 | return super.imply(id); 46 | } 47 | logError("Unable to imply season from identifier {} (accepts 0,1,2,3,spring,summer,autumn,fall,winter)",id); 48 | return false; 49 | } 50 | 51 | @Override public List getRequiredMods() { 52 | return Collections.singletonList("sereneseasons"); 53 | } 54 | 55 | @Override public boolean isPlayableContext(TriggerContext ctx) { 56 | return ctx.isActiveSeason(getParameterAsInt("season")); 57 | } 58 | 59 | @Override public boolean verifyRequiredParameters() { 60 | return hasValidIdentifier(); 61 | } 62 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerStatistic.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | 8 | public class TriggerStatistic extends HolderTrigger { 9 | 10 | public TriggerStatistic(ChannelAPI channel) { 11 | super(channel,"statistic"); 12 | } 13 | 14 | @Override public boolean imply(String id) { 15 | setExistingParameterValue("resource_name",Collections.singletonList(id)); 16 | return super.imply(id); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveStatistic(getResourceCtx(),getParameterAsInt("level")); 21 | } 22 | 23 | @Override public boolean verifyRequiredParameters() { 24 | if(hasValidIdentifier()) { 25 | String[] parameters = new String[]{"display_name","resource_name"}; 26 | if(hasAnyNonDefaultParameter(parameters)) return true; 27 | logMissingPotentialParameter(parameters); 28 | } 29 | return false; 30 | } 31 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerStructure.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | 8 | public class TriggerStructure extends HolderTrigger { 9 | 10 | public TriggerStructure(ChannelAPI channel) { 11 | super(channel,"structure"); 12 | } 13 | 14 | @Override public boolean imply(String id) { 15 | setExistingParameterValue("resource_name",Collections.singletonList(id)); 16 | return super.imply(id); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveStructure(getResourceCtx()); 21 | } 22 | 23 | @Override public boolean isServer() { 24 | return true; 25 | } 26 | 27 | @Override public boolean verifyRequiredParameters() { 28 | if(hasValidIdentifier()) { 29 | String[] parameters = new String[]{"display_name","resource_name"}; 30 | if(hasAnyNonDefaultParameter(parameters)) return true; 31 | logMissingPotentialParameter(parameters); 32 | } 33 | return false; 34 | } 35 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerTornado.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerTornado extends HolderTrigger { 10 | 11 | public TriggerTornado(ChannelAPI channel) { 12 | super(channel,"tornado"); 13 | } 14 | 15 | @Override public boolean imply(String id) { 16 | setExistingParameterValue("level",1); 17 | return super.imply(id); 18 | } 19 | 20 | @Override public List getRequiredMods() { 21 | return Collections.singletonList("weather2"); 22 | } 23 | 24 | @Override public boolean isPlayableContext(TriggerContext ctx) { 25 | return ctx.isActiveTornado(getParameterAsInt("detection_range"),getParameterAsInt("level")); 26 | } 27 | 28 | @Override public boolean verifyRequiredParameters() { 29 | return hasValidIdentifier(); 30 | } 31 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerVictory.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerVictory extends HolderTrigger { 7 | 8 | public TriggerVictory(ChannelAPI channel) { 9 | super(channel,"victory"); 10 | } 11 | 12 | @Override public boolean imply(String id) { 13 | try { 14 | int persistence = Integer.parseInt(id); 15 | if(persistence<=0) throw new NumberFormatException("Integer must be positive"); 16 | setExistingParameterValue("persistence",persistence); 17 | } catch(NumberFormatException ex) { 18 | logError("Failed to imply persistance from identifier {} (must be a positive integer)",id,ex); 19 | } 20 | return super.imply(id); 21 | } 22 | 23 | @Override public boolean isPlayableContext(TriggerContext ctx) { 24 | return ctx.isActiveVictory(getParameterAsInt("victory_timeout")); 25 | } 26 | 27 | @Override public boolean isServer() { 28 | return true; 29 | } 30 | 31 | /** 32 | * Input is millis since this the last tick cycle 33 | */ 34 | public void tick(long millis) { 35 | 36 | } 37 | 38 | @Override public boolean verifyRequiredParameters() { 39 | String[] parameters = new String[]{"identifier","persistence"}; 40 | if(hasAllNonDefaultParameter(parameters)) return true; 41 | logMissingParameters(parameters); 42 | return false; 43 | } 44 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/holder/TriggerZones.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.holder; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerZones extends HolderTrigger { 7 | 8 | public TriggerZones(ChannelAPI channel) { 9 | super(channel,"zones"); 10 | } 11 | 12 | @Override public boolean imply(String id) { 13 | logError("Trigger must be explicitly defined"); 14 | return false; 15 | } 16 | 17 | @Override public boolean isPlayableContext(TriggerContext ctx) { 18 | return ctx.isActiveZones(getParameterAsInt("zone_min_x"),getParameterAsInt("zone_min_y"), 19 | getParameterAsInt("zone_min_z"),getParameterAsInt("zone_max_x"), 20 | getParameterAsInt("zone_max_y"),getParameterAsInt("zone_max_z")); 21 | } 22 | 23 | @Override public boolean verifyRequiredParameters() { 24 | if(hasValidIdentifier()) { 25 | String[] parameters = new String[]{"zone_min_x","zone_max_x","zone_min_y", 26 | "zone_max_y","zone_min_z","zone_max_z"}; 27 | if(hasAnyNonDefaultParameter(parameters)) return true; 28 | logMissingPotentialParameter(parameters); 29 | } 30 | return false; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/SimpleTrigger.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerAPI; 5 | 6 | public abstract class SimpleTrigger extends TriggerAPI { 7 | 8 | protected SimpleTrigger(ChannelAPI channel, String name) { 9 | super(channel,name); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerAcidRain.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerAcidRain extends SimpleTrigger { 10 | 11 | public TriggerAcidRain(ChannelAPI channel) { 12 | super(channel,"acidrain"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Collections.singletonList("betterweather"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveAcidRain(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerAdventure.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerAdventure extends SimpleTrigger { 7 | 8 | public TriggerAdventure(ChannelAPI channel) { 9 | super(channel,"adventure"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveAdventure(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerBlizzard.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerBlizzard extends SimpleTrigger { 10 | 11 | public TriggerBlizzard(ChannelAPI channel) { 12 | super(channel,"blizzard"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Collections.singletonList("betterweather"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveBlizzard(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerBloodmoon.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Arrays; 7 | import java.util.List; 8 | 9 | public class TriggerBloodmoon extends SimpleTrigger { 10 | 11 | public TriggerBloodmoon(ChannelAPI channel) { 12 | super(channel,"bloodmoon"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Arrays.asList("bloodmoon","enhancedcelestials","nyx"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveBloodMoon(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerBluemoon.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerBluemoon extends SimpleTrigger { 10 | 11 | public TriggerBluemoon(ChannelAPI channel) { 12 | super(channel,"bluemoon"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Collections.singletonList("enhancedcelestials"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveBlueMoon(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerCloudy.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerCloudy extends SimpleTrigger { 10 | 11 | public TriggerCloudy(ChannelAPI channel) { 12 | super(channel,"cloudy"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Collections.singletonList("betterweather"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveCloudy(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerCreative.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerCreative extends SimpleTrigger { 7 | 8 | public TriggerCreative(ChannelAPI channel) { 9 | super(channel,"creative"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveCreative(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerDead.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerDead extends SimpleTrigger { 7 | 8 | public TriggerDead(ChannelAPI channel) { 9 | super(channel,"dead"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveDead(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerDrowning.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerDrowning extends SimpleTrigger { 7 | 8 | public TriggerDrowning(ChannelAPI channel) { 9 | super(channel,"drowning"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveDrowning(getParameterAsInt("level")); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerElytra.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerElytra extends SimpleTrigger { 7 | 8 | public TriggerElytra(ChannelAPI channel) { 9 | super(channel,"elytra"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveElytra(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerFishing.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerFishing extends SimpleTrigger { 7 | 8 | public TriggerFishing(ChannelAPI channel) { 9 | super(channel,"fishing"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveFishing(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerHarvestmoon.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Arrays; 7 | import java.util.List; 8 | 9 | public class TriggerHarvestmoon extends SimpleTrigger { 10 | 11 | public TriggerHarvestmoon(ChannelAPI channel) { 12 | super(channel,"harvestmoon"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Arrays.asList("enhancedcelestials","nyx"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveHarvestMoon(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerHome.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerHome extends SimpleTrigger { 7 | 8 | public TriggerHome(ChannelAPI channel) { 9 | super(channel,"home"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveHome(getParameterAsInt("detection_range"),getParameterAsFloat("detection_y_ratio")); 14 | } 15 | 16 | @Override protected boolean isServer() { 17 | return true; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerHurricane.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerHurricane extends SimpleTrigger { 10 | 11 | public TriggerHurricane(ChannelAPI channel) { 12 | super(channel,"hurricane"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Collections.singletonList("weather2"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveHurricane(getParameterAsInt("detection_range")); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerLightRain.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerLightRain extends SimpleTrigger { 10 | 11 | public TriggerLightRain(ChannelAPI channel) { 12 | super(channel,"lightrain"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Collections.singletonList("betterweather"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveLightRain(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerLowHP.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerLowHP extends SimpleTrigger { 7 | 8 | public TriggerLowHP(ChannelAPI channel) { 9 | super(channel,"lowhp"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | float min = getParameterAsFloat("min_health_percentage")/100f; 14 | float max = getParameterAsFloat("max_health_percentage")/100f; 15 | return ctx.isActiveLowHP(min,max); 16 | } 17 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerPet.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerPet extends SimpleTrigger { 7 | 8 | public TriggerPet(ChannelAPI channel) { 9 | super(channel,"pet"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActivePet(getParameterAsInt("detection_range"),getParameterAsFloat("detection_y_ratio")); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerRaining.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerRaining extends SimpleTrigger { 7 | 8 | public TriggerRaining(ChannelAPI channel) { 9 | super(channel,"raining"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveRaining(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerSandstorm.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerSandstorm extends SimpleTrigger { 10 | 11 | public TriggerSandstorm(ChannelAPI channel) { 12 | super(channel,"sandstorm"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Collections.singletonList("weather2"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveSandstorm(getParameterAsInt("detection_range")); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerSnowing.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerSnowing extends SimpleTrigger { 7 | 8 | public TriggerSnowing(ChannelAPI channel) { 9 | super(channel,"snowing"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveSnowing(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerSpectator.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerSpectator extends SimpleTrigger { 7 | 8 | public TriggerSpectator(ChannelAPI channel) { 9 | super(channel,"spectator"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveSpectator(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerStarShower.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | import java.util.Collections; 7 | import java.util.List; 8 | 9 | public class TriggerStarShower extends SimpleTrigger { 10 | 11 | public TriggerStarShower(ChannelAPI channel) { 12 | super(channel,"starshower"); 13 | } 14 | 15 | @Override public List getRequiredMods() { 16 | return Collections.singletonList("nyx"); 17 | } 18 | 19 | @Override public boolean isPlayableContext(TriggerContext ctx) { 20 | return ctx.isActiveStarShower(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerStorming.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerStorming extends SimpleTrigger { 7 | 8 | public TriggerStorming(ChannelAPI channel) { 9 | super(channel,"storming"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveStorming(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/data/trigger/simple/TriggerUnderwater.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.data.trigger.simple; 2 | 3 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 4 | import mods.thecomputerizer.musictriggers.api.data.trigger.TriggerContext; 5 | 6 | public class TriggerUnderwater extends SimpleTrigger { 7 | 8 | public TriggerUnderwater(ChannelAPI channel) { 9 | super(channel,"underwater"); 10 | } 11 | 12 | @Override public boolean isPlayableContext(TriggerContext ctx) { 13 | return ctx.isActiveUnderwater(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/ChannelHelperMessage.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 5 | 6 | public abstract class ChannelHelperMessage extends PlayerMessage { 7 | 8 | protected final ChannelHelper helper; 9 | 10 | protected ChannelHelperMessage(ChannelHelper helper) { 11 | super(helper.getPlayerID()); 12 | this.helper = helper; 13 | } 14 | 15 | protected ChannelHelperMessage(ByteBuf buf) { 16 | super(buf); 17 | this.helper = ChannelHelper.getHelper(this.uuid,!buf.readBoolean()); 18 | } 19 | 20 | @Override public void encode(ByteBuf buf) { 21 | super.encode(buf); 22 | buf.writeBoolean(this.helper.isClient()); 23 | } 24 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/MessageCurrentSong.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.musictriggers.api.MTRef; 5 | import mods.thecomputerizer.musictriggers.api.data.audio.AudioHelper; 6 | import mods.thecomputerizer.musictriggers.api.data.audio.AudioRef; 7 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelAPI; 8 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 9 | import mods.thecomputerizer.musictriggers.api.server.ChannelServer; 10 | import mods.thecomputerizer.theimpossiblelibrary.api.network.message.MessageAPI; 11 | 12 | public class MessageCurrentSong extends ChannelHelperMessage { 13 | 14 | private final ChannelAPI channel; 15 | private final AudioRef song; 16 | 17 | public MessageCurrentSong(ChannelHelper helper, ChannelAPI channel, AudioRef song) { 18 | super(helper); 19 | this.channel = channel; 20 | this.song = song; 21 | } 22 | 23 | public MessageCurrentSong(ByteBuf buf) { 24 | super(buf); 25 | this.channel = this.helper.decodeChannel(buf); 26 | this.song = AudioHelper.decodeAudio(this.channel,buf); 27 | } 28 | 29 | @Override public void encode(ByteBuf buf) { 30 | super.encode(buf); 31 | this.channel.encode(buf); 32 | this.song.encode(buf); 33 | } 34 | 35 | @Override public MessageAPI handle(CTX ctx) { 36 | if(this.channel instanceof ChannelServer) { 37 | ((ChannelServer)this.channel).setCurrentSong(this.song); 38 | } else MTRef.logError("Tried to handle MessageCurrentSong on the client side which shouldn't be possible??"); 39 | return null; 40 | } 41 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/MessageCurrentStructure.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.network.NetworkHelper; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.network.message.MessageAPI; 7 | 8 | public class MessageCurrentStructure extends ChannelHelperMessage { 9 | 10 | private final String structureName; 11 | private final String structureID; 12 | 13 | public MessageCurrentStructure(ChannelHelper helper, String structureName, String structureID) { 14 | super(helper); 15 | this.structureName = structureName; 16 | this.structureID = structureID; 17 | } 18 | 19 | public MessageCurrentStructure(ByteBuf buf) { 20 | super(buf); 21 | this.structureName = NetworkHelper.readString(buf); 22 | this.structureID = NetworkHelper.readString(buf); 23 | } 24 | 25 | @Override public void encode(ByteBuf buf) { 26 | super.encode(buf); 27 | NetworkHelper.writeString(buf,this.structureName); 28 | NetworkHelper.writeString(buf,this.structureID); 29 | } 30 | 31 | @Override public MessageAPI handle(CTX ctx) { 32 | this.helper.getDebugInfo().updateStructure(this.structureName,this.structureID); 33 | return null; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/MessageFinishedInit.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.network.NetworkHelper; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.network.message.MessageAPI; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.tag.CompoundTagAPI; 8 | 9 | import java.util.Objects; 10 | 11 | public class MessageFinishedInit extends ChannelHelperMessage { 12 | 13 | final boolean hasWorldData; 14 | final CompoundTagAPI worldData; 15 | 16 | public MessageFinishedInit(ChannelHelper helper, CompoundTagAPI worldData) { 17 | super(helper); 18 | this.hasWorldData = Objects.isNull(worldData) || worldData.isEmpty(); 19 | this.worldData = worldData; 20 | } 21 | 22 | public MessageFinishedInit(ByteBuf buf) { 23 | super(buf); 24 | this.hasWorldData = buf.readBoolean(); 25 | this.worldData = this.hasWorldData ? NetworkHelper.readTag(buf) : null; 26 | } 27 | 28 | @Override public void encode(ByteBuf buf) { 29 | super.encode(buf); 30 | buf.writeBoolean(this.hasWorldData); 31 | if(this.hasWorldData) NetworkHelper.writeTag(buf,this.worldData); 32 | } 33 | 34 | @Override public MessageAPI handle(CTX ctx) { 35 | if(Objects.nonNull(this.worldData)) this.helper.onConnected(this.worldData); 36 | this.helper.setSyncable(true); 37 | return null; 38 | } 39 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/MessageNBTCheck.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.musictriggers.api.client.MTClient; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.network.message.MessageAPI; 6 | 7 | public class MessageNBTCheck extends MessageAPI { 8 | 9 | private final boolean placebo; //Some loaders/versions complain about empty packets 10 | 11 | public MessageNBTCheck() { 12 | this.placebo = true; 13 | } 14 | 15 | public MessageNBTCheck(ByteBuf buf) { 16 | this.placebo = buf.readBoolean(); 17 | } 18 | 19 | @Override public void encode(ByteBuf buf) { 20 | buf.writeBoolean(this.placebo); 21 | } 22 | 23 | @Override public MessageAPI handle(CTX ctx) { 24 | MTClient.runNBTCheck(); 25 | return null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/MessageReload.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.musictriggers.api.client.MTClientEvents; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.client.ClientAPI; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.core.TILRef; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.network.message.MessageAPI; 8 | 9 | public class MessageReload extends MessageAPI { 10 | 11 | final int ticks; 12 | 13 | public MessageReload(int ticks) { 14 | this.ticks = ticks; 15 | } 16 | 17 | public MessageReload(ByteBuf buf) { 18 | this.ticks = buf.readInt(); 19 | } 20 | 21 | @Override public void encode(ByteBuf buf) { 22 | buf.writeInt(this.ticks); 23 | } 24 | 25 | @Override public MessageAPI handle(CTX ctx) { 26 | MTClientEvents.queueReload(TILRef.getClientSubAPI(ClientAPI::getMinecraft),this.ticks); 27 | return null; 28 | } 29 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/MessageRequestChannels.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Getter; 5 | import mods.thecomputerizer.musictriggers.api.MTRef; 6 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.network.message.MessageAPI; 8 | 9 | @Getter 10 | public class MessageRequestChannels extends PlayerMessage { 11 | 12 | //final CompoundTagAPI tag; 13 | final boolean client; 14 | 15 | public MessageRequestChannels(String uuid, boolean client) { 16 | super(uuid); 17 | //this.tag = client ? TagHelper.makeCompoundTag() : NBTHelper.readWorldData(uuid); 18 | this.client = client; 19 | } 20 | 21 | public MessageRequestChannels(ByteBuf buf) { 22 | super(buf); 23 | //this.tag = NetworkHelper.readTag(buf); 24 | this.client = !buf.readBoolean(); 25 | } 26 | 27 | @Override public void encode(ByteBuf buf) { 28 | super.encode(buf); 29 | //this.tag.write(buf); 30 | buf.writeBoolean(this.client); 31 | } 32 | 33 | @SuppressWarnings("unchecked") 34 | @Override public MessageAPI handle(CTX ctx) { 35 | MTRef.logInfo("Handling incoming channels request for UUID {}",this.uuid); 36 | return (MessageAPI)ChannelHelper.processChannelsRequest(this); 37 | } 38 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/MessageSeekSong.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.network.NetworkHelper; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.network.message.MessageAPI; 7 | 8 | import java.util.Objects; 9 | 10 | public class MessageSeekSong extends MessageAPI { 11 | 12 | private final String channel; 13 | private final long seconds; 14 | 15 | public MessageSeekSong(String channel, long seconds) { 16 | this.channel = Objects.nonNull(channel) && !channel.isEmpty() ? channel : "-"; 17 | this.seconds = seconds; 18 | } 19 | 20 | public MessageSeekSong(ByteBuf buf) { 21 | this.channel = NetworkHelper.readString(buf); 22 | this.seconds = buf.readLong(); 23 | } 24 | 25 | @Override public void encode(ByteBuf buf) { 26 | NetworkHelper.writeString(buf,this.channel); 27 | buf.writeLong(this.seconds); 28 | } 29 | 30 | @Override public MessageAPI handle(CTX ctx) { 31 | ChannelHelper helper = ChannelHelper.getClientHelper(); 32 | if(Objects.nonNull(helper)) helper.seek(this.channel,this.seconds); 33 | return null; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/MessageSkipSong.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.network.message.MessageAPI; 6 | 7 | import java.util.Objects; 8 | 9 | public class MessageSkipSong extends MessageAPI { 10 | 11 | public MessageSkipSong() {} 12 | 13 | public MessageSkipSong(ByteBuf buf) { 14 | buf.readBoolean(); 15 | } 16 | 17 | @Override public void encode(ByteBuf buf) { 18 | buf.writeBoolean(true); 19 | } 20 | 21 | @Override public MessageAPI handle(CTX ctx) { 22 | ChannelHelper helper = ChannelHelper.getClientHelper(); 23 | if(Objects.nonNull(helper)) helper.forEachChannel(channel -> { 24 | if(channel.isClientChannel()) channel.stopped(); 25 | }); 26 | return null; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/MessageToggleDebugParameter.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import mods.thecomputerizer.musictriggers.api.data.channel.ChannelHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.network.NetworkHelper; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.network.message.MessageAPI; 7 | 8 | public class MessageToggleDebugParameter extends MessageAPI { 9 | 10 | final boolean client; 11 | final String name; 12 | final boolean value; 13 | 14 | public MessageToggleDebugParameter(boolean client, String name) { 15 | this.client = client; 16 | this.name = name; 17 | ChannelHelper.flipDebugParameter(this.client,this.name); 18 | this.value = ChannelHelper.getDebugBool(this.name); 19 | } 20 | 21 | public MessageToggleDebugParameter(ByteBuf buf) { 22 | this.client = !buf.readBoolean(); 23 | this.name = NetworkHelper.readString(buf); 24 | this.value = buf.readBoolean(); 25 | } 26 | 27 | @Override public void encode(ByteBuf buf) { 28 | buf.writeBoolean(this.client); 29 | NetworkHelper.writeString(buf,this.name); 30 | buf.writeBoolean(this.value); 31 | } 32 | 33 | @Override public MessageAPI handle(CTX ctx) { 34 | ChannelHelper.setDebugParameter(this.client,this.name,this.value); 35 | return null; 36 | } 37 | } -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/network/PlayerMessage.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.network; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.network.NetworkHelper; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.network.message.MessageAPI; 8 | 9 | @Setter @Getter 10 | public abstract class PlayerMessage extends MessageAPI { 11 | 12 | protected boolean login; 13 | protected String uuid; 14 | 15 | protected PlayerMessage(String uuid) { 16 | this.uuid = uuid; 17 | } 18 | 19 | protected PlayerMessage(ByteBuf buf) { 20 | this.uuid = NetworkHelper.readString(buf); 21 | this.login = buf.readBoolean(); 22 | } 23 | 24 | @Override public void encode(ByteBuf buf) { 25 | NetworkHelper.writeString(buf,this.uuid); 26 | buf.writeBoolean(this.login); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /api/src/main/java/mods/thecomputerizer/musictriggers/api/registry/MTRegistryHandler.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.api.registry; 2 | 3 | import mods.thecomputerizer.musictriggers.api.MTRef; 4 | import mods.thecomputerizer.theimpossiblelibrary.api.common.event.EventHelper; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.common.event.events.RegisterBlockEntitiesEventWrapper; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.common.event.events.RegisterBlocksEventWrapper; 7 | import mods.thecomputerizer.theimpossiblelibrary.api.common.event.events.RegisterItemsEventWrapper; 8 | 9 | import static mods.thecomputerizer.musictriggers.api.registry.MTBlockEntityRegistry.MUSIC_RECORDER_ENTITY; 10 | import static mods.thecomputerizer.musictriggers.api.registry.MTBlockRegistry.MUSIC_RECORDER; 11 | import static mods.thecomputerizer.musictriggers.api.registry.MTItemRegistry.ENHANCED_MUSIC_DISC; 12 | import static mods.thecomputerizer.theimpossiblelibrary.api.common.event.CommonEventWrapper.CommonType.REGISTER_BLOCKS; 13 | import static mods.thecomputerizer.theimpossiblelibrary.api.common.event.CommonEventWrapper.CommonType.REGISTER_BLOCK_ENTITIES; 14 | import static mods.thecomputerizer.theimpossiblelibrary.api.common.event.CommonEventWrapper.CommonType.REGISTER_ITEMS; 15 | 16 | public class MTRegistryHandler { 17 | 18 | public static void init() { 19 | MTRef.logInfo("Initializing registry events"); 20 | EventHelper.addListener(REGISTER_BLOCKS,MTRegistryHandler::onRegisterBlocks); 21 | EventHelper.addListener(REGISTER_BLOCK_ENTITIES,MTRegistryHandler::onRegisterBlockEntities); 22 | EventHelper.addListener(REGISTER_ITEMS,MTRegistryHandler::onRegisterItems); 23 | } 24 | 25 | public static void onRegisterBlocks(RegisterBlocksEventWrapper wrapper) { 26 | wrapper.register(MUSIC_RECORDER); 27 | } 28 | 29 | public static void onRegisterBlockEntities(RegisterBlockEntitiesEventWrapper wrapper) { 30 | wrapper.register(MUSIC_RECORDER_ENTITY); 31 | } 32 | 33 | public static void onRegisterItems(RegisterItemsEventWrapper wrapper) { 34 | wrapper.register(ENHANCED_MUSIC_DISC); 35 | wrapper.register(MTItemRegistry.MUSIC_RECORDER); 36 | } 37 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/blockstates/music_recorder.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "recording=false,recording_special=false": { "model": "musictriggers:music_recorder" }, 4 | "recording=false,recording_special=true": { "model": "musictriggers:music_recorder_inverted" }, 5 | "recording=true,recording_special=false": { "model": "musictriggers:music_recorder_active" }, 6 | "recording=true,recording_special=true": { "model": "musictriggers:music_recorder_inverted" } 7 | } 8 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/block/music_recorder.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/cube_top", 3 | "textures": { 4 | "particle": "musictriggers:block/recorder_side", 5 | "top": "musictriggers:block/recorder_top", 6 | "side": "musictriggers:block/recorder_side" 7 | } 8 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/block/music_recorder_active.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/cube_top", 3 | "textures": { 4 | "particle": "musictriggers:block/recorder_side_active", 5 | "top": "musictriggers:block/recorder_top_active", 6 | "side": "musictriggers:block/recorder_side_active" 7 | } 8 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/block/music_recorder_inverted.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/cube_top", 3 | "textures": { 4 | "particle": "musictriggers:block/recorder_side_inverted", 5 | "top": "musictriggers:block/recorder_top_inverted", 6 | "side": "musictriggers:block/recorder_side_inverted" 7 | } 8 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/music_recorder.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/cube_top", 3 | "textures": { 4 | "particle": "musictriggers:block/recorder_side", 5 | "top": "musictriggers:block/recorder_top", 6 | "side": "musictriggers:block/recorder_side" 7 | } 8 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_acidrain.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_acidrain" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_adventure.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_blank" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_biome" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_blank.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_blank" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_blizzard.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_blizzard" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_bloodmoon.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_bloodmoon" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_bluemoon.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_bluemoon" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_cloudy.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_cloudy" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_command.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_command" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_creative.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_creative" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_custom.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_blank" 5 | }, 6 | "overrides": [] 7 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_dead.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_dead" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_difficulty.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_difficulty" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_dimension.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_dimension" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_effect.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_effect" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_elytra.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_elytra" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_fallingstars.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_fallingstars" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_fishing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_fishing" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_gamestages.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_gamestages" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_generic.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_generic" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_gui.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_gui" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_harvestmoon.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_harvestmoon" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_height.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_height" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_hurricane.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_hurricane" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_light.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_light" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_loading.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_loading" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_lowhp.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_lowhp" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_menu.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_menu" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_mob.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_mob" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_pet.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_pet" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_pvp.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_pvp" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_raining.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_raining" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_rainintensity.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_rainintensity" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_riding.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_riding" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_sandstorm.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_sandstorm" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_season.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_season" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_snowing.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_snowing" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_spectator.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_spectator" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_storming.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_storming" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_structure.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_structure" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_time.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_time" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_tornado.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_tornado" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_underwater.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_underwater" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_victory.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_victory" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/item/record_zones.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "musictriggers:item/record_zones" 5 | } 6 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/music_recorder.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "musictriggers:block/music_recorder" 3 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/music_recorder_active.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "musictriggers:block/music_recorder_active" 3 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/models/music_recorder_inverted.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "musictriggers:block/music_recorder_inverted" 3 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/block/recorder_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/block/recorder_side.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/block/recorder_side_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/block/recorder_side_active.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/block/recorder_side_inverted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/block/recorder_side_inverted.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/block/recorder_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/block/recorder_top.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/block/recorder_top_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/block/recorder_top_active.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/block/recorder_top_inverted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/block/recorder_top_inverted.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/channel_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/channel_info.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/channels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/channels.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/checked.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/commands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/commands.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/config.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/debug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/debug.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/edit.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/help.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/jukebox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/jukebox.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/log.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/main.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/playback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/playback.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/redirect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/redirect.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/registration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/registration.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/reload.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/renders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/renders.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/reset_song.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/reset_song.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/skip_song.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/skip_song.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/toggles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/toggles.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/hover/icon/unchecked.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/channel_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/channel_info.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/channels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/channels.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/checked.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/commands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/commands.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/debug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/debug.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/edit.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/help.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/jukebox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/jukebox.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/log.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/main.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/playback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/playback.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/redirect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/redirect.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/registration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/registration.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/reload.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/renders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/renders.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/reset_song.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/reset_song.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/skip_song.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/skip_song.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/toggles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/toggles.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/gui/icon/unchecked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/gui/icon/unchecked.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_acidrain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_acidrain.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_advancement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_advancement.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_biome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_biome.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_biome.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "frametime": 4 4 | } 5 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_blank.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_blizzard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_blizzard.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_bloodmoon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_bloodmoon.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_bluemoon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_bluemoon.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_cloudy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_cloudy.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_command.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_command.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "frametime": 1 4 | } 5 | } -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_creative.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_creative.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_dead.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_dead.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_difficulty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_difficulty.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_dimension.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_dimension.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_drowning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_drowning.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_effect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_effect.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_elytra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_elytra.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_fallingstars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_fallingstars.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_fishing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_fishing.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_gamestages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_gamestages.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_generic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_generic.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_gui.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_harvestmoon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_harvestmoon.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_height.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_height.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_home.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_hurricane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_hurricane.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_light.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_lightrain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_lightrain.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_loading.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_lowhp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_lowhp.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_menu.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_mob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_mob.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_pet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_pet.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_pvp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_pvp.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_raining.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_raining.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_rainintensity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_rainintensity.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_riding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_riding.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_sandstorm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_sandstorm.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_season.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_season.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_snowing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_snowing.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_spectator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_spectator.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_statistic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_statistic.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_storming.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_storming.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_structure.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_time.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_tornado.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_tornado.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_underwater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_underwater.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_victory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_victory.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/item/record_zones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/item/record_zones.png -------------------------------------------------------------------------------- /api/src/main/resources/assets/musictriggers/textures/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/assets/musictriggers/textures/logo.png -------------------------------------------------------------------------------- /api/src/main/resources/data/musictriggers/loot_tables/blocks/music_recorder.json: -------------------------------------------------------------------------------- 1 | { 2 | "pools": [ 3 | { 4 | "rolls": 1, 5 | "entries": [{ 6 | "type": "minecraft:item", 7 | "name": "musictriggers:music_recorder" 8 | }] 9 | }] 10 | } -------------------------------------------------------------------------------- /api/src/main/resources/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/api/src/main/resources/logo.png -------------------------------------------------------------------------------- /api/src/main/resources/pack.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "pack": { 3 | "description": "musictriggers resources", 4 | "pack_format": 4 5 | } 6 | } -------------------------------------------------------------------------------- /changelogs/7.0.1.txt: -------------------------------------------------------------------------------- 1 | - Added a gui_fuzz debug parameter to disable the line generator in the GUI in case it is annoying and/or not rendering correctly 2 | - Added a min_health parameter to the mob trigger 3 | - Added a min_health_percentage parameter to the lowhp trigger 4 | - Added caching for some frequently checked mob trigger parameters 5 | - Renamed the health parameter for the mob trigger to max_health 6 | - Renamed the health_percentage parameter for the lowhp trigger to max_health_percentage 7 | - Fixed the health (now max_health/min_health), horde_health_percentage, horde_targeting_percentage parameters not being applied for the mob trigger 8 | - Fixed the not parameter being implemented incorrectly 9 | - Fixed an uncommon crash when GUI changes were applied 10 | - Updated the config remapper to account for the parameter name changes: 11 | + (6.3.1) [lowhp] level -> max_health_percentage 12 | + (6.3.1) [mob] health -> max_health 13 | + (7.0.0) [lowhp] health_percentage -> max_health_percentage 14 | + (7.0.0) [mob] health -> max_health 15 | - Updated the wiki: 16 | + Added an Identifiers & Implied Triggers page to the Triggers section 17 | + Added any new parameters that needed to be added 18 | + Updated some parameter descriptions that got changed -------------------------------------------------------------------------------- /changelogs/7.0.2.txt: -------------------------------------------------------------------------------- 1 | - The Impossible Library 0.4.2+ is now required 2 | - Trigger names are no longer case sensitive. This applies to both the table name and referenced triggers. Lowercase names are still used internally and will be written by the GUI 3 | - To avoid potential confusion, identifiers will now filter out the trigger name followed by "-". This means "name-" (where name is the name of the trigger) is now automatically removed from identifiers 4 | - Dedicated servers now generate the global config files when starting up 5 | - The mob_targeting paremeter of the mob trigger is now automatically passed for non hostile mobs 6 | - Reimplemented the gui trigger where the ID is the name of the current screen class and the display name is simple name of the current screen class. Both are passed in as null if there is no current screen 7 | - Fixed some issues with triggers that use display_name & resource_name parameters 8 | - Reworked how null resource IDs & display names are handled: 9 | + If both the ID & display name are null, check both 10 | + If both the ID & display name are not null, check both 11 | + If either the ID or the the display name is null while the other is not, check whichever is not null 12 | + A null ID or display name is now allowed to match empty entries (such as resource_name = [ "" ] ) for all matching strategies 13 | - Added elements to the Help screen 14 | + alpha_warning 15 | + channel_interaction 16 | + channels 17 | + identifiers 18 | + removing_triggers -------------------------------------------------------------------------------- /changelogs/7.0.3.txt: -------------------------------------------------------------------------------- 1 | - Updated any of the included libraries that could be updated 2 | - Vanilla & blocked music is now stopped while loading & reloading 3 | - Fixed a rare concurrency issue that could randomly make audio tracks fail to load 4 | - Fixed issues with default display_name & resource_name parameters always getting passed when only 1 is set 5 | - Fixed an issue with the current gui screen not being retrieved properly 6 | - Fixed vanilla music not being blocked in 1.12.2 when galacticraft is loaded -------------------------------------------------------------------------------- /changelogs/7.0.4.txt: -------------------------------------------------------------------------------- 1 | - Reimplemented the command trigger as a server trigger 2 | - Updated the youtube source & reordered its clients so that it breaks less often 3 | - Temporarily disable the mob trigger cache to fix persistance issues 4 | - Removed the unused health_reversal parameter from the mob trigger 5 | - The min_health parameter for the mob trigger is now exclusive rather than inclusive 6 | - Reimplemented the MOB case of the mob trigger ('resource_name = [ "MOB" ]' will check for any hostile mob) 7 | - Fixed trigger names still being case-sensitive in some places 8 | - Fixed trigger combinations not working with synced triggers 9 | - Fixed empty trigger combinations being able to get registered 10 | - Fixed reverse fading not working (when a fading out trigger is reactivated) 11 | - Fixed an issue with the music ticker injection that would sometimes cause vanilla music blocking to fail 12 | - Fixed server channels sometimes not being initialized for joining players 13 | - Fixed the default value for the passive_persistence parameter being '0' (which gets parsed as 'false') instead of 'true' 14 | - Fixed the defaults for the biome_rainfall & biome_temperature parameters being set to the wrong minimum values 15 | - Fixed an uncommon crash when teleporting or moving too quickly 16 | - Fixed vanilla music not being blocked in 1.12.2 when Space Ambient is loaded 17 | - Fixed incorrect remapping of the dimension trigger in 1.12.2 18 | - Fixed some issues with the GUI: 19 | + Empty trigger lists will no longer be filtered out when writing to the config (leading to songs, toggles, & other elements seeming to disappear for no reason) 20 | + Fixed a crash when applying changes after adding a new song 21 | + Fixed trigger removals from songs not being written to the config 22 | + Fixed removing elements from a parameter list not playing the button click sound -------------------------------------------------------------------------------- /changelogs/7.0.5.txt: -------------------------------------------------------------------------------- 1 | - WIP -------------------------------------------------------------------------------- /docs/musictriggers/.assets/item/musictriggers/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/docs/musictriggers/.assets/item/musictriggers/logo.png -------------------------------------------------------------------------------- /docs/musictriggers/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "introduction.mdx": "Introduction", 3 | "important_concepts": "Important Concepts", 4 | "file_structure": "File Structure", 5 | "gui": "GUI", 6 | "triggers": "Triggers", 7 | "misc": "Miscellaneous Features", 8 | "issues.mdx": "Issues & Support" 9 | } -------------------------------------------------------------------------------- /docs/musictriggers/important_concepts/file_structure.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: File Structure 3 | hide_meta: true 4 | --- -------------------------------------------------------------------------------- /docs/musictriggers/introduction.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introduction 3 | id: musictriggers:logo 4 | type: other 5 | --- 6 | 7 | WIP wiki rewrite for 7.0. For information pertaining to 6.3.1 see 8 | [here](https://github.com/TheComputerizer/Music-Triggers/wiki/English). -------------------------------------------------------------------------------- /docs/musictriggers/issues.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Issues & Support 3 | hide_meta: true 4 | --- 5 | 6 | If you have an issue or are confused about something, don't hesitate to let me know! You can do so by 7 | [submitting an issue](https://github.com/TheComputerizer/Music-Triggers/issues) if you notice something not working 8 | correctly, or joining the [Discord server](https://discord.gg/FZHXFYp8fc) as I am very active there. Even if I am not 9 | online, there will almost certainly be someone willing to help you out in setting things up. -------------------------------------------------------------------------------- /docs/musictriggers/sinytra-wiki.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "musictriggers", 3 | "platform": "curseforge", 4 | "slug": "music-triggers" 5 | } -------------------------------------------------------------------------------- /docs/musictriggers/triggers/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "_overview.mdx": "Triggers Overview", 3 | "parameters.mdx": "Common Parameters", 4 | "identifiers.mdx": "Identifiers & Implied Triggers", 5 | "priority_defaults.mdx": "Default Priority Values", 6 | "basic_triggers": "Basic Triggers", 7 | "simple_triggers": "Simple Triggers", 8 | "holder_triggers": "Holder Triggers" 9 | } -------------------------------------------------------------------------------- /docs/musictriggers/triggers/_overview.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Triggers Overview 3 | hide_meta: true 4 | --- 5 | 6 | There are **52** different triggers Split into **3** basic triggers, **24** basic triggers, and **25** holder triggers. -------------------------------------------------------------------------------- /docs/musictriggers/triggers/basic_triggers/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "_overview.mdx": "Basic Triggers Overview", 3 | "generic.mdx": "generic", 4 | "loading.mdx": "loading", 5 | "menu.mdx": "menu" 6 | } -------------------------------------------------------------------------------- /docs/musictriggers/triggers/basic_triggers/_overview.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Basic Triggers Overview 3 | hide_meta: true 4 | --- 5 | 6 | A Basic Trigger is a special type of Simple Trigger that has very specific activation conditions. These specific types 7 | of conditions make Basic Triggers unable to be used in trigger combinations. These triggers also do not have unique 8 | parameters and are not affected by the priority system. 9 | 10 | The **3** basic triggers are `generic`, `loading`, and `menu`. -------------------------------------------------------------------------------- /docs/musictriggers/triggers/holder_triggers/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "_overview.mdx": "Holder Triggers Overview", 3 | "advancement.mdx": "advancement", 4 | "biome.mdx": "biome", 5 | "blockentity.mdx": "blockentity", 6 | "command.mdx": "command", 7 | "difficulty.mdx": "difficulty", 8 | "dimension.mdx": "dimension", 9 | "effect.mdx": "effect", 10 | "gamestage.mdx": "gamestage", 11 | "gui.mdx": "gui", 12 | "height.mdx": "height", 13 | "inventory.mdx": "inventory", 14 | "light.mdx": "light", 15 | "mob.mdx": "mob", 16 | "moon.mdx": "moon", 17 | "pvp.mdx": "pvp", 18 | "raid.mdx": "raid", 19 | "rainintensity.mdx": "rainintensity", 20 | "riding.mdx": "riding", 21 | "season.mdx": "season", 22 | "statistic.mdx": "statistic", 23 | "structure.mdx": "structure", 24 | "time.mdx": "time", 25 | "tornado.mdx": "tornado", 26 | "victory.mdx": "victory", 27 | "zones.mdx": "zones" 28 | } -------------------------------------------------------------------------------- /docs/musictriggers/triggers/holder_triggers/_overview.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Holder Triggers Overview 3 | hide_meta: true 4 | --- 5 | 6 | A holder trigger is a type of trigger that can have sub-triggers. These sub-triggers are denoted by the use of the 7 | `identifier` parameter. What this means is that these types of triggers cover a wide variety of use cases 8 | and as such are (within the same channel) allowed to have multiple parameter sets. Using 2 different identifiers on the 9 | same holder trigger is like using 2 different simple triggers that have virtually the same effect. On the other hand, 10 | using the same identifier for the same holder trigger is like reusing the same simple trigger. Identifier are unique 11 | for both triggers and channels. This means that something like `dimension-battle` will always be different from 12 | something like `mob-battle`. It also means that adding `dimension-battle` on 2 different channels will still define 2 13 | separate triggers. 14 | 15 | Outside of the implied trigger system, identifiers do not have an effect on whether a trigger can activate. As such, 16 | identifier parameters can be set to any string value. For example, a `time` trigger with an identifier of `night` 17 | (`time-night`) will not necessarily be active during the night. In this case, the `time_bundle` or `start_hour` & 18 | `end_hour`parameters are what determines that. 19 | 20 | The **25** trigger holders are `advancement`, `biome`, `blockentity`, `command`, `difficulty`, `dimension`, `effect`, 21 | `gamestage`, `gui`, `height`, `inventory`, `light`, `mob`, `moon`, `pvp`, `raid`, `rainintensity`, `riding`, `season`, 22 | `statistic`, `structure`, `time`, `tornado`, `victory`, and `zones` -------------------------------------------------------------------------------- /docs/musictriggers/triggers/priority_defaults.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Default Priority Values 3 | hide_meta: true 4 | --- 5 | 6 | ``` 7 | acidrain 1600 | 0 adventure 8 | advancement 3500 | 0 creative 9 | adventure 0 | 0 difficulty 10 | biome 600 | 0 gamestage 11 | blizzard 2600 | 0 generic 12 | blockentity 3400 | 0 loading 13 | bloodmoon 2500 | 0 menu 14 | bluemoon 2200 | 0 spectator 15 | cloudy 500 | 100 dimension 16 | creative 0 | 200 season 17 | command 3600 | 300 statistic 18 | dead 4400 | 400 pet 19 | difficulty 0 | 500 cloudy 20 | dimension 100 | 600 biome 21 | drowning 4300 | 700 fishing 22 | effect 1300 | 800 time 23 | elytra 1200 | 900 light 24 | fishing 700 | 1000 lightrain 25 | gamestage 0 | 1100 home 26 | generic 0 | 1200 elytra 27 | gui 3700 | 1300 effect 28 | harvestmoon 2100 | 1400 inventory 29 | height 2900 | 1500 riding 30 | home 1100 | 1600 acidrain 31 | hurricane 2700 | 1700 starshower 32 | inventory 1400 | 1800 raining 33 | light 900 | 1900 rainintensity 34 | lightrain 1000 | 2000 snowing 35 | loading 0 | 2100 harvestmoon 36 | lowhp 4000 | 2200 bluemoon 37 | menu 0 | 2300 moon 38 | mob 3800 | 2400 storming 39 | moon 2300 | 2500 bloodmoon 40 | pet 400 | 2600 blizzard 41 | pvp 3900 | 2700 hurricane 42 | raid 4100 | 2800 sandstorm 43 | raining 1800 | 2900 height 44 | rainintensity 1900 | 3000 tornado 45 | riding 1500 | 3100 underwater 46 | sandstorm 2800 | 3200 structure 47 | season 200 | 3300 zones 48 | snowing 2000 | 3400 blockentity 49 | spectator 0 | 3500 advancement 50 | starshower 1700 | 3600 command 51 | statistic 300 | 3700 gui 52 | storming 2400 | 3800 mob 53 | structure 3200 | 3900 pvp 54 | time 800 | 4000 lowhp 55 | tornado 3000 | 4100 raid 56 | underwater 3100 | 4200 victory 57 | victory 4200 | 4300 drowning 58 | zones 3300 | 4400 dead 59 | ``` -------------------------------------------------------------------------------- /docs/musictriggers/triggers/simple_triggers/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "_overview.mdx": "Simple Triggers Overview", 3 | "acidrain.mdx": "acidrain", 4 | "adventure.mdx": "adventure", 5 | "blizzard.mdx": "blizzard", 6 | "bloodmoon.mdx": "bloodmoon", 7 | "bluemoon.mdx": "bluemoon", 8 | "cloudy.mdx": "cloudy", 9 | "creative.mdx": "creative", 10 | "dead.mdx": "dead", 11 | "drowning.mdx": "drowning", 12 | "elytra.mdx": "elytra", 13 | "fishing.mdx": "fishing", 14 | "harvestmoon.mdx": "harvestmoon", 15 | "home.mdx": "home", 16 | "hurricane.mdx": "hurricane", 17 | "lightrain.mdx": "lightrain", 18 | "lowhp.mdx": "lowhp", 19 | "pet.mdx": "pet", 20 | "raining.mdx": "raining", 21 | "sandstorm.mdx": "sandstorm", 22 | "snowing.mdx": "snowing", 23 | "spectator.mdx": "spectator", 24 | "starshower.mdx": "starshower", 25 | "storming.mdx": "storming", 26 | "underwater.mdx": "underwater" 27 | } -------------------------------------------------------------------------------- /docs/musictriggers/triggers/simple_triggers/_overview.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Simple Triggers Overview 3 | hide_meta: true 4 | --- 5 | 6 | A Simple Trigger is a type of trigger that usually does not have any unique paramteters and rarely has any parameter 7 | requirements. These are generally the easiest to use "as is". 8 | 9 | The **24** simple triggers are `acidrain`, `adventure`, `blizzard`, `bloodmoon`, `bluemoon`, `cloudy`, `creative`, 10 | `dead`, `drowning`, `elytra`, `fishing`, `harvestmoon`, `home`, `hurricane`, `lightrain`, `lowhp`, `pet`, `raining`, 11 | `sandstorm`, `snowing`, `spectator`, `starshower`, `storming`, and `underwater`. -------------------------------------------------------------------------------- /gradle/java21-module.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file('gradle\\java21.gradle') 2 | apply from: rootProject.file('gradle\\runtime-module.gradle') -------------------------------------------------------------------------------- /gradle/java21.gradle: -------------------------------------------------------------------------------- 1 | import static org.gradle.api.file.DuplicatesStrategy.EXCLUDE 2 | 3 | plugins.apply 'idea' 4 | plugins.apply 'java-library' 5 | 6 | group = base_package 7 | version = mod_version 8 | 9 | compileJava { 10 | options.deprecation = false //We don't need to log all of the deprecated stuff when compiling 11 | options.encoding = 'UTF-8' 12 | options.release = 21 13 | } 14 | 15 | idea { 16 | module { 17 | downloadJavadoc = true 18 | downloadSources = true 19 | inheritOutputDirs = true 20 | } 21 | } 22 | 23 | jar { 24 | duplicatesStrategy = EXCLUDE 25 | setArchiveBaseName mod_id 26 | } 27 | 28 | java { 29 | toolchain.languageVersion = JavaLanguageVersion.of 21 30 | } 31 | 32 | processResources { 33 | duplicatesStrategy = EXCLUDE 34 | } -------------------------------------------------------------------------------- /gradle/java24.gradle: -------------------------------------------------------------------------------- 1 | import static org.gradle.api.file.DuplicatesStrategy.EXCLUDE 2 | 3 | plugins.apply 'idea' 4 | plugins.apply 'java-library' 5 | 6 | group = base_package 7 | version = mod_version 8 | 9 | compileJava { 10 | options.deprecation = false //We don't need to log all of the deprecated stuff when compiling 11 | options.encoding = 'UTF-8' 12 | options.release = 24 13 | } 14 | 15 | idea { 16 | module { 17 | downloadJavadoc = true 18 | downloadSources = true 19 | inheritOutputDirs = true 20 | } 21 | } 22 | 23 | jar { 24 | duplicatesStrategy = EXCLUDE 25 | setArchiveBaseName mod_id 26 | } 27 | 28 | processResources { 29 | duplicatesStrategy = EXCLUDE 30 | } -------------------------------------------------------------------------------- /gradle/java8-module.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file('gradle\\java8.gradle') 2 | apply from: rootProject.file('gradle\\runtime-module.gradle') -------------------------------------------------------------------------------- /gradle/java8.gradle: -------------------------------------------------------------------------------- 1 | import static org.gradle.api.file.DuplicatesStrategy.EXCLUDE 2 | 3 | plugins.apply 'idea' 4 | plugins.apply 'java-library' 5 | 6 | group = base_package 7 | version = mod_version 8 | 9 | compileJava { 10 | options.deprecation = false //We don't need to log all of the deprecated stuff when compiling 11 | options.encoding = 'UTF-8' 12 | options.release = 8 13 | } 14 | 15 | idea { 16 | module { 17 | downloadJavadoc = true 18 | downloadSources = true 19 | inheritOutputDirs = true 20 | } 21 | } 22 | 23 | jar { 24 | duplicatesStrategy = EXCLUDE 25 | setArchiveBaseName mod_id 26 | } 27 | 28 | processResources { 29 | duplicatesStrategy = EXCLUDE 30 | } -------------------------------------------------------------------------------- /gradle/lavaplayer-libs.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file('gradle\\shaded-deps.gradle') 2 | 3 | repositories { 4 | mavenCentral() { 5 | content { 6 | [ 'com.fasterxml.jackson.core', 'com.grack', 'net.iharder', 'org.apache.httpcomponents', 'org.json', 7 | 'org.jsoup', 'org.mozilla', 'org.slf4j' ].forEach{ includeGroup it } 8 | } 9 | } 10 | maven { 11 | name = 'LavaLink' 12 | url = uri 'https://maven.arbjerg.dev/releases' 13 | content { 14 | includeGroup 'dev.arbjerg' 15 | } 16 | } 17 | } 18 | 19 | dependencies { //TODO Do all of these need to have transitive dependencies disabled? 20 | shaded("com.fasterxml.jackson.core:jackson-annotations:$jackson_version") { transitive = false } 21 | shaded("com.fasterxml.jackson.core:jackson-core:$jackson_version") { transitive = false } 22 | shaded("com.fasterxml.jackson.core:jackson-databind:$jackson_version") { transitive = false } 23 | shaded("com.grack:nanojson:$nanojson_version") { transitive = false } 24 | shaded("net.iharder:base64:$harder_version") { transitive = false } 25 | shaded("org.apache.httpcomponents:httpclient:$httpclient_version") { transitive = false } 26 | shaded("org.apache.httpcomponents:httpcore:$httpcore_version") { transitive = false } 27 | shaded("org.json:json:$json_version") { transitive = false } 28 | shaded("org.jsoup:jsoup:$jsoup_version") { transitive = false } 29 | shaded("org.mozilla:rhino:$rhino_version") { transitive = false } 30 | shaded("org.mozilla:rhino-engine:$rhino_version") { transitive = false } 31 | shaded("org.mozilla:rhino-runtime:$rhino_version") { transitive = false } 32 | shaded("org.slf4j:slf4j-api:$slf4j_version") { transitive = false } 33 | } -------------------------------------------------------------------------------- /gradle/lavaplayer.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file('gradle\\lavaplayer-libs.gradle') 2 | 3 | repositories { 4 | maven { 5 | name = 'JitPack' 6 | url = uri 'https://jitpack.io' 7 | content { 8 | [ 'com.github.JustRed23','com.github.devoxin', 'com.github.devoxin.lavaplayer', 'com.github.natanbc', 9 | 'com.github.walkyst', 'com.github.walkyst.JAADec-fork' ].forEach { includeGroup it } 10 | } 11 | } 12 | maven { 13 | name = 'LavaLink' 14 | url = uri 'https://maven.lavalink.dev/releases' 15 | content { 16 | includeGroup 'dev.lavalink.youtube' 17 | } 18 | } 19 | maven { 20 | name = 'LavaLink Snapshots' 21 | url = uri 'https://maven.lavalink.dev/snapshots' 22 | content { 23 | includeGroup 'dev.lavalink.youtube' 24 | } 25 | } 26 | } 27 | 28 | dependencies { //TODO Do all of these need to have transitive dependencies disabled? 29 | //lavaplayer base 30 | 31 | //lavaplayer dependencies 32 | shaded("com.github.devoxin:lavaplayer-natives-fork:$lava_natives_version") { transitive = false } 33 | shaded("com.github.devoxin.lavaplayer:lava-common:$lava_version") { transitive = false } 34 | shaded("com.github.devoxin.lavaplayer:lavaplayer:$lava_version") { transitive = false } 35 | shaded("com.github.devoxin.lavaplayer:lavaplayer-ext-format-xm:$lava_version") { transitive = false } 36 | shaded("com.github.devoxin.lavaplayer:lavaplayer-ext-youtube-rotator:$lava_version") { transitive = false } 37 | shaded("com.github.devoxin.lavaplayer:lavaplayer-stream-merger:$lava_version") { transitive = false } 38 | shaded("com.github.devoxin:LavaDSPX:$lava_dspx_version") { transitive = false } 39 | shaded("com.github.natanbc:native-loader:$native_loader_version") { transitive = false } 40 | shaded("com.github.walkyst:ibxm-fork:$ibxm_version") { transitive = false } 41 | shaded("com.github.walkyst.JAADec-fork:jaadec-ext-aac:$jaadec_version") { transitive = false } 42 | shaded("com.github.JustRed23:lavadsp:$lava_dsp_version") { transitive = false } 43 | shaded("com.github.JustRed23:lavadsp-natives:$lava_dsp_version") { transitive = false } 44 | shaded("dev.lavalink.youtube:common:$youtube_source_version") { transitive = false } 45 | } -------------------------------------------------------------------------------- /gradle/lombok.gradle: -------------------------------------------------------------------------------- 1 | repositories { 2 | mavenCentral() { 3 | content { 4 | includeGroup 'org.projectlombok' 5 | } 6 | } 7 | } 8 | 9 | dependencies { 10 | //lombok 11 | annotationProcessor 'org.projectlombok:lombok:1.+' 12 | compileOnly 'org.projectlombok:lombok:1.+' 13 | } -------------------------------------------------------------------------------- /gradle/runtime-module.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file('gradle\\lombok.gradle') -------------------------------------------------------------------------------- /gradle/shaded-deps.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file('gradle\\shadow-relocate.gradle') 2 | 3 | configurations { 4 | implementation.extendsFrom shaded 5 | } 6 | 7 | repositories { 8 | mavenCentral() { 9 | content { 10 | includeGroup 'io.github.kostaskougios' 11 | } 12 | } 13 | } 14 | 15 | dependencies { 16 | //other shaded 17 | shaded("io.github.kostaskougios:cloning:$cloning_version") { transitive = false } 18 | } -------------------------------------------------------------------------------- /gradle/shadow-relocate.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file('gradle\\shadow.gradle') 2 | 3 | shadowJar { 4 | //relocate shaded dependencies to the shadow package to prevent library conflicts 5 | [ 'certificates', 6 | 'com.fasterxml.jackson', 7 | 'com.grack.nanojson', 8 | 'com.sedmelluq.discord.lavaplayer.container', //As far as I know the natives can't be relocated 9 | 'com.sedmelluq.discord.lavaplayer.filter', 10 | 'com.sedmelluq.discord.lavaplayer.format', 11 | 'com.sedmelluq.discord.lavaplayer.player', 12 | 'com.sedmelluq.discord.lavaplayer.remote', 13 | 'com.sedmelluq.discord.lavaplayer.source', 14 | 'com.sedmelluq.discord.lavaplayer.tools', 15 | 'com.sedmelluq.discord.lavaplayer.track', 16 | 'com.sedmelluq.lava.common.tools', 17 | 'com.sedmelluq.lava.extensions', 18 | 'com.sedmelluq.lava.player', 19 | 'com.sedmelluq.lavaplayer.extensions', 20 | 'com.rits.cloning', 21 | 'com.rits.perspectives', 22 | 'dev.lavalink.youtube', 23 | 'ibxm', 24 | 'mozilla', 25 | 'me.devoxin.lavadspx', 26 | 'net.iharder', 27 | 'net.sourceforge.jaad.aac', 28 | 'org.apache.http', 29 | 'org.json', 30 | 'org.jsoup', 31 | 'org.mozilla.classfile', 32 | 'org.slf4j' 33 | ].forEach {pkg -> 34 | relocate pkg, "${shadow_package}.$pkg" 35 | } 36 | } -------------------------------------------------------------------------------- /gradle/shadow.gradle: -------------------------------------------------------------------------------- 1 | import static org.gradle.api.file.DuplicatesStrategy.EXCLUDE 2 | 3 | plugins.apply 'com.gradleup.shadow' 4 | 5 | configurations { 6 | shadow.extendsFrom shaded 7 | } 8 | 9 | shadowJar { 10 | duplicatesStrategy = EXCLUDE 11 | configurations = [ project.configurations.shadow ] 12 | setArchiveBaseName mod_id 13 | setArchiveClassifier '' 14 | mergeServiceFiles() 15 | exclude '**/LICENSE', '**/LICENSE.txt', 'META-INF/**/*.class', 'META-INF/*.RSA', 'META-INF/*.SF', 16 | 'META-INF/MANIFSET.MF', 'META-INF/maven/**', 'META-INF/services/*.Processor', 'module-info.*' 17 | } -------------------------------------------------------------------------------- /gradle/til-compile.gradle: -------------------------------------------------------------------------------- 1 | repositories { 2 | maven { 3 | name = 'Modrinth' 4 | url = uri 'https://api.modrinth.com/maven' 5 | content { 6 | includeGroup 'maven.modrinth' 7 | } 8 | } 9 | } 10 | 11 | dependencies { 12 | compileOnly "maven.modrinth:the-impossible-library:$til_version" 13 | //compileOnly "maven.modrinth:the-impossible-library:${til_version}:javadoc" 14 | //compileOnly "maven.modrinth:the-impossible-library:${til_version}:sources" 15 | } -------------------------------------------------------------------------------- /gradle/til.gradle: -------------------------------------------------------------------------------- 1 | repositories { 2 | maven { 3 | name = 'Modrinth' 4 | url = uri 'https://api.modrinth.com/maven' 5 | content { 6 | includeGroup 'maven.modrinth' 7 | } 8 | } 9 | } 10 | 11 | configurations { 12 | implementation.resolutionStrategy { 13 | 14 | } 15 | } 16 | 17 | dependencies { 18 | implementation "maven.modrinth:the-impossible-library:$til_version" 19 | //implementation "maven.modrinth:the-impossible-library:${til_version}:javadoc" 20 | //implementation "maven.modrinth:the-impossible-library:${til_version}:sources" 21 | } 22 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheComputerizer/Music-Triggers/3ddbf0e1871456c0ea3593ef3f338f9979ca797c/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-rc-1-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /legacy/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: rootProject.file('gradle\\java8.gradle') 2 | 3 | def base = project ':api' 4 | 5 | jar { 6 | from(base.shadowJar.archiveFile.collect { 7 | include 'mods/**' 8 | zipTree it 9 | }) 10 | } 11 | 12 | processResources { 13 | from base.processResources.outputs 14 | } 15 | 16 | processTestResources { 17 | from base.processTestResources.outputs 18 | } 19 | 20 | tasks.jar.dependsOn ':api:build' -------------------------------------------------------------------------------- /legacy/cleanroom/src/main/java/mods/thecomputerizer/musictriggers/legacy/v12/m2/common/MTCommonEntryPoint1_12_2.java: -------------------------------------------------------------------------------- 1 | package mods.thecomputerizer.musictriggers.legacy.v12.m2.common; 2 | 3 | import mods.thecomputerizer.musictriggers.api.MTRef; 4 | import mods.thecomputerizer.musictriggers.legacy.v12.m2.client.MTClientEntryPoint1_12_2; 5 | import mods.thecomputerizer.theimpossiblelibrary.api.client.ClientEntryPoint; 6 | import mods.thecomputerizer.theimpossiblelibrary.api.common.DelegatingCommonEntryPoint; 7 | 8 | import java.util.Objects; 9 | 10 | import static mods.thecomputerizer.musictriggers.api.MTRef.MODID; 11 | import static mods.thecomputerizer.musictriggers.api.MTRef.NAME; 12 | 13 | @SuppressWarnings("unused") 14 | public class MTCommonEntryPoint1_12_2 extends DelegatingCommonEntryPoint { 15 | 16 | private static MTCommonEntryPoint1_12_2 INSTANCE; 17 | 18 | public static MTCommonEntryPoint1_12_2 getInstance() { 19 | return Objects.nonNull(INSTANCE) ? INSTANCE : new MTCommonEntryPoint1_12_2(); 20 | } 21 | 22 | public MTCommonEntryPoint1_12_2() { 23 | INSTANCE = this; 24 | } 25 | 26 | @Override protected String getModID() { 27 | return MODID; 28 | } 29 | 30 | @Override protected String getModName() { 31 | return NAME; 32 | } 33 | 34 | @Override public void onConstructed() { 35 | MTRef.logInfo("Running version specific onConstructed for 1.12.2"); 36 | super.onConstructed(); 37 | } 38 | 39 | @Override public void onLoadComplete() { 40 | MTRef.logInfo("Running version onLoadComplete for 1.12.2"); 41 | super.onLoadComplete(); 42 | } 43 | 44 | @Override public ClientEntryPoint setDelegatedClientHandle() { 45 | return MTClientEntryPoint1_12_2.getInstance(); 46 | } 47 | } -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() { 4 | content { 5 | settings_plugin_content.split(';').each {grp -> 6 | includeGroup grp 7 | } 8 | } 9 | } 10 | } 11 | } 12 | 13 | plugins { 14 | id 'org.gradle.toolchains.foojay-resolver-convention' version '+' 15 | } 16 | 17 | rootProject.name = 'Music-Triggers' 18 | 19 | def paths = [ ':api', ':legacy:cleanroom' ] 20 | 21 | paths.forEach { 22 | include it 23 | } 24 | 25 | paths.forEach { 26 | String[] split = (it.startsWith(':') ? it.substring(1) : it).split(':') 27 | findProject(it)?.name = split.length>1 ? split.last() : split.first() 28 | } --------------------------------------------------------------------------------