Skip to content

Commit

Permalink
Added JingleNote classes - however not actively used anywhere yet.
Browse files Browse the repository at this point in the history
  • Loading branch information
me4502 committed Feb 13, 2017
1 parent af49acf commit eed7a55
Show file tree
Hide file tree
Showing 19 changed files with 814 additions and 7 deletions.
Expand Up @@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License along with this program. If not,
* see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.craftbook.sponge.util;
package com.sk89q.craftbook.core.util;

import java.util.regex.Pattern;

Expand Down
Expand Up @@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License along with this program. If not,
* see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.craftbook.sponge.util;
package com.sk89q.craftbook.core.util;

public enum TernaryState {
TRUE,FALSE,NONE;
Expand Down
@@ -0,0 +1,40 @@
/*
* CraftBook Copyright (C) 2010-2017 sk89q <http://www.sk89q.com>
* CraftBook Copyright (C) 2011-2017 me4502 <http://www.me4502.com>
* CraftBook Copyright (C) Contributors
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
* License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not,
* see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.craftbook.core.util.jinglenote;

public enum Instrument {
GUITAR, PIANO, BASS, BASS_GUITAR, STICKS, BASS_DRUM, SNARE_DRUM;

public static Instrument toMCSound(byte instrument) {
switch (instrument) {
case 1:
return Instrument.BASS_GUITAR;
case 2:
return Instrument.SNARE_DRUM;
case 3:
return Instrument.STICKS;
case 4:
return Instrument.BASS_DRUM;
case 5:
return Instrument.GUITAR;
case 6:
return Instrument.BASS;
default:
return Instrument.PIANO;
}
}
}
@@ -0,0 +1,65 @@
/*
* CraftBook Copyright (C) 2010-2017 sk89q <http://www.sk89q.com>
* CraftBook Copyright (C) 2011-2017 me4502 <http://www.me4502.com>
* CraftBook Copyright (C) Contributors
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
* License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not,
* see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.craftbook.core.util.jinglenote;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public abstract class JingleNoteManager {

/**
* List of instances.
*/
private final Map<UUID, JingleNotePlayer> instances = new HashMap<>();

public boolean isPlaying(UUID player) {
return instances.containsKey(player) && instances.get(player).isPlaying();
}

public boolean isPlaying() {
return !instances.isEmpty();
}

public void play(UUID player, JingleSequencer sequencer) {
// Existing player found!
if (instances.containsKey(player)) {
stop(player);
}

instances.put(player, createNotePlayer(player, sequencer));
}

protected abstract JingleNotePlayer createNotePlayer(UUID player, JingleSequencer sequencer);

public boolean stop(UUID player) {
// Existing player found!
if (instances.containsKey(player)) {
instances.remove(player).stop();
return true;
}
return false;
}

public void stopAll() {
for (JingleNotePlayer notePlayer : instances.values()) {
notePlayer.stop();
}

instances.clear();
}
}
@@ -0,0 +1,74 @@
/*
* CraftBook Copyright (C) 2010-2017 sk89q <http://www.sk89q.com>
* CraftBook Copyright (C) 2011-2017 me4502 <http://www.me4502.com>
* CraftBook Copyright (C) Contributors
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
* License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not,
* see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.craftbook.core.util.jinglenote;

import java.util.UUID;

public abstract class JingleNotePlayer implements Runnable {

protected final UUID player;
private JingleSequencer sequencer;

/**
* Constructs a new JingleNotePlayer
*
* @param player The player who is hearing this's name.
* @param seq The JingleSequencer to play.
*/
public JingleNotePlayer(UUID player, JingleSequencer seq) {
this.player = player;
sequencer = seq;
}

@Override
public void run() {
if(sequencer == null)
return;
try {
try {
sequencer.play(this);
} catch (Throwable t) {
t.printStackTrace();
}

while(isPlaying()){
Thread.sleep(10L);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
stop();
}
}

public boolean isPlaying() {
return sequencer != null && (sequencer.isPlaying() || !sequencer.hasPlayedBefore());
}

public UUID getPlayer() {
return player;
}

public void stop() {
if (sequencer != null) {
sequencer.stop(this);
sequencer = null;
}
}

public abstract void play(Note note);
}
@@ -0,0 +1,36 @@
/*
* CraftBook Copyright (C) 2010-2017 sk89q <http://www.sk89q.com>
* CraftBook Copyright (C) 2011-2017 me4502 <http://www.me4502.com>
* CraftBook Copyright (C) Contributors
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
* License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not,
* see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.craftbook.core.util.jinglenote;

import java.util.Set;

public interface JingleSequencer {

void run() throws InterruptedException;

void stop();

void stop(JingleNotePlayer player);

boolean isPlaying();

boolean hasPlayedBefore();

void play(JingleNotePlayer player);

Set<JingleNotePlayer> getPlayers();
}

0 comments on commit eed7a55

Please sign in to comment.