Skip to content

Commit 53481b4

Browse files
committed
Add note_play event
1 parent 56bbbe5 commit 53481b4

File tree

7 files changed

+193
-20
lines changed

7 files changed

+193
-20
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11

22
package com.laytonsmith.abstraction;
33

4+
import com.laytonsmith.abstraction.enums.MCTone;
5+
46
/**
57
*
68
*
79
*/
810
public interface MCNote extends AbstractionObject {
911

12+
public MCTone getTone();
13+
14+
public int getOctave();
15+
16+
public boolean isSharped();
17+
1018
}

src/main/java/com/laytonsmith/abstraction/bukkit/BukkitMCNote.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,25 @@ public BukkitMCNote(int octave, MCTone tone, boolean sharp) throws IllegalArgume
1616
n = new Note(octave, Note.Tone.valueOf(tone.name()), sharp);
1717
}
1818

19+
public BukkitMCNote(Note n) {
20+
this.n = n;
21+
}
22+
23+
@Override
24+
public MCTone getTone() {
25+
return MCTone.valueOf(n.getTone().toString());
26+
}
27+
28+
@Override
29+
public int getOctave() {
30+
return n.getOctave();
31+
}
32+
33+
@Override
34+
public boolean isSharped() {
35+
return n.isSharped();
36+
}
37+
1938
@Override
2039
public Object getHandle() {
2140
return n;

src/main/java/com/laytonsmith/abstraction/bukkit/events/BukkitBlockEvents.java

Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,23 @@
77
import com.laytonsmith.abstraction.MCEntity;
88
import com.laytonsmith.abstraction.MCItemStack;
99
import com.laytonsmith.abstraction.MCLocation;
10+
import com.laytonsmith.abstraction.MCNote;
1011
import com.laytonsmith.abstraction.MCPlayer;
1112
import com.laytonsmith.abstraction.blocks.MCBlock;
1213
import com.laytonsmith.abstraction.blocks.MCBlockFace;
1314
import com.laytonsmith.abstraction.blocks.MCBlockState;
1415
import com.laytonsmith.abstraction.bukkit.BukkitMCItemStack;
1516
import com.laytonsmith.abstraction.bukkit.BukkitMCLocation;
17+
import com.laytonsmith.abstraction.bukkit.BukkitMCNote;
1618
import com.laytonsmith.abstraction.bukkit.blocks.BukkitMCBlock;
1719
import com.laytonsmith.abstraction.bukkit.blocks.BukkitMCBlockState;
1820
import com.laytonsmith.abstraction.bukkit.entities.BukkitMCEntity;
1921
import com.laytonsmith.abstraction.bukkit.entities.BukkitMCPlayer;
2022
import com.laytonsmith.abstraction.enums.MCIgniteCause;
23+
import com.laytonsmith.abstraction.enums.MCInstrument;
2124
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCBlockFace;
2225
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCIgniteCause;
26+
import com.laytonsmith.abstraction.enums.bukkit.BukkitMCInstrument;
2327
import com.laytonsmith.abstraction.events.MCBlockBreakEvent;
2428
import com.laytonsmith.abstraction.events.MCBlockBurnEvent;
2529
import com.laytonsmith.abstraction.events.MCBlockDispenseEvent;
@@ -30,25 +34,17 @@
3034
import com.laytonsmith.abstraction.events.MCBlockPistonExtendEvent;
3135
import com.laytonsmith.abstraction.events.MCBlockPistonRetractEvent;
3236
import com.laytonsmith.abstraction.events.MCBlockPlaceEvent;
37+
import com.laytonsmith.abstraction.events.MCNotePlayEvent;
3338
import com.laytonsmith.abstraction.events.MCSignChangeEvent;
3439
import com.laytonsmith.annotations.abstraction;
3540
import com.laytonsmith.core.constructs.CArray;
3641
import com.laytonsmith.core.constructs.CString;
3742
import com.laytonsmith.core.constructs.Target;
3843
import com.laytonsmith.core.exceptions.ConfigRuntimeException;
3944
import com.laytonsmith.core.functions.Exceptions.ExceptionType;
45+
import org.bukkit.Note;
4046
import org.bukkit.block.Block;
41-
import org.bukkit.event.block.BlockBreakEvent;
42-
import org.bukkit.event.block.BlockBurnEvent;
43-
import org.bukkit.event.block.BlockDispenseEvent;
44-
import org.bukkit.event.block.BlockEvent;
45-
import org.bukkit.event.block.BlockGrowEvent;
46-
import org.bukkit.event.block.BlockIgniteEvent;
47-
import org.bukkit.event.block.BlockPistonEvent;
48-
import org.bukkit.event.block.BlockPistonExtendEvent;
49-
import org.bukkit.event.block.BlockPistonRetractEvent;
50-
import org.bukkit.event.block.BlockPlaceEvent;
51-
import org.bukkit.event.block.SignChangeEvent;
47+
import org.bukkit.event.block.*;
5248
import org.bukkit.util.Vector;
5349

5450
import java.util.ArrayList;
@@ -435,4 +431,44 @@ public MCBlockState getNewState() {
435431
return new BukkitMCBlockState(bge.getNewState());
436432
}
437433
}
434+
435+
@abstraction(type = Implementation.Type.BUKKIT)
436+
public static class BukkitMCNotePlayEvent implements MCNotePlayEvent {
437+
438+
NotePlayEvent npe;
439+
440+
public BukkitMCNotePlayEvent(NotePlayEvent event) {
441+
npe = event;
442+
}
443+
444+
@Override
445+
public Object _GetObject() {
446+
return npe;
447+
}
448+
449+
@Override
450+
public MCBlock getBlock() {
451+
return new BukkitMCBlock(npe.getBlock());
452+
}
453+
454+
@Override
455+
public MCNote getNote() {
456+
return new BukkitMCNote(npe.getNote());
457+
}
458+
459+
@Override
460+
public void setNote(MCNote note) {
461+
npe.setNote((Note) note.getHandle());
462+
}
463+
464+
@Override
465+
public MCInstrument getInstrument() {
466+
return BukkitMCInstrument.getConvertor().getAbstractedEnum(npe.getInstrument());
467+
}
468+
469+
@Override
470+
public void setInstrument(MCInstrument i) {
471+
npe.setInstrument(BukkitMCInstrument.getConvertor().getConcreteEnum(i));
472+
}
473+
}
438474
}

src/main/java/com/laytonsmith/abstraction/bukkit/events/drivers/BukkitBlockListener.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,7 @@
1111
import org.bukkit.event.EventHandler;
1212
import org.bukkit.event.EventPriority;
1313
import org.bukkit.event.Listener;
14-
import org.bukkit.event.block.BlockBreakEvent;
15-
import org.bukkit.event.block.BlockBurnEvent;
16-
import org.bukkit.event.block.BlockDispenseEvent;
17-
import org.bukkit.event.block.BlockGrowEvent;
18-
import org.bukkit.event.block.BlockIgniteEvent;
19-
import org.bukkit.event.block.BlockPistonExtendEvent;
20-
import org.bukkit.event.block.BlockPistonRetractEvent;
21-
import org.bukkit.event.block.BlockPlaceEvent;
22-
import org.bukkit.event.block.SignChangeEvent;
14+
import org.bukkit.event.block.*;
2315

2416
/**
2517
*
@@ -112,4 +104,10 @@ public void onBlockGrow(BlockGrowEvent e) {
112104
BukkitBlockEvents.BukkitMCBlockGrowEvent bge = new BukkitBlockEvents.BukkitMCBlockGrowEvent(e);
113105
EventUtils.TriggerListener(Driver.BLOCK_GROW, "block_grow", bge);
114106
}
107+
108+
@EventHandler(priority = EventPriority.LOWEST)
109+
public void onNotePlay(NotePlayEvent e) {
110+
BukkitBlockEvents.BukkitMCNotePlayEvent npe = new BukkitBlockEvents.BukkitMCNotePlayEvent(e);
111+
EventUtils.TriggerListener(Driver.NOTE_PLAY, "note_play", npe);
112+
}
115113
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.laytonsmith.abstraction.events;
2+
3+
import com.laytonsmith.abstraction.MCNote;
4+
import com.laytonsmith.abstraction.enums.MCInstrument;
5+
6+
public interface MCNotePlayEvent extends MCBlockEvent {
7+
8+
public MCNote getNote();
9+
10+
public void setNote(MCNote note);
11+
12+
public MCInstrument getInstrument();
13+
14+
public void setInstrument(MCInstrument i);
15+
}

src/main/java/com/laytonsmith/core/events/Driver.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public enum Driver {
2323
BLOCK_PLACE,
2424
SIGN_CHANGED,
2525
REDSTONE_CHANGED,
26+
NOTE_PLAY,
2627

2728
/**
2829
* Entity events

src/main/java/com/laytonsmith/core/events/drivers/BlockEvents.java

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import com.laytonsmith.abstraction.blocks.MCBlockState;
99
import com.laytonsmith.abstraction.bukkit.BukkitMCItemStack;
1010
import com.laytonsmith.abstraction.enums.MCIgniteCause;
11+
import com.laytonsmith.abstraction.enums.MCInstrument;
12+
import com.laytonsmith.abstraction.enums.MCTone;
1113
import com.laytonsmith.abstraction.events.MCBlockBreakEvent;
1214
import com.laytonsmith.abstraction.events.MCBlockBurnEvent;
1315
import com.laytonsmith.abstraction.events.MCBlockDispenseEvent;
@@ -17,6 +19,7 @@
1719
import com.laytonsmith.abstraction.events.MCBlockPistonExtendEvent;
1820
import com.laytonsmith.abstraction.events.MCBlockPistonRetractEvent;
1921
import com.laytonsmith.abstraction.events.MCBlockPlaceEvent;
22+
import com.laytonsmith.abstraction.events.MCNotePlayEvent;
2023
import com.laytonsmith.abstraction.events.MCSignChangeEvent;
2124
import com.laytonsmith.annotations.api;
2225
import com.laytonsmith.core.CHVersion;
@@ -36,10 +39,13 @@
3639
import com.laytonsmith.core.events.EventBuilder;
3740
import com.laytonsmith.core.events.Prefilters;
3841
import com.laytonsmith.core.events.Prefilters.PrefilterType;
42+
import com.laytonsmith.core.exceptions.ConfigRuntimeException;
3943
import com.laytonsmith.core.exceptions.EventException;
4044
import com.laytonsmith.core.exceptions.PrefilterNonMatchException;
45+
import com.laytonsmith.core.functions.Exceptions;
4146

4247
import java.util.Collection;
48+
import java.util.HashMap;
4349
import java.util.Iterator;
4450
import java.util.Map;
4551

@@ -1045,4 +1051,94 @@ public boolean modifyEvent(String key, Construct value, BindableEvent e) {
10451051
return false;
10461052
}
10471053
}
1054+
1055+
@api
1056+
public static class note_play extends AbstractEvent {
1057+
1058+
@Override
1059+
public String getName() {
1060+
return "note_play";
1061+
}
1062+
1063+
@Override
1064+
public Driver driver() {
1065+
return Driver.NOTE_PLAY;
1066+
}
1067+
1068+
@Override
1069+
public String docs() {
1070+
return "{}"
1071+
+ " This event is called when a noteblock is activated via player interaction or redstone."
1072+
+ " The instrument may be one of: " + StringUtils.Join(MCInstrument.values(), ", ", ", or ") + "."
1073+
+ " {location: The location of the noteblock | instrument: The name of the sound"
1074+
+ " | tone: The note played (eg. F#) | octave: The octave the tone was played (0 - 2)}"
1075+
+ " {instrument|tone|octave}"
1076+
+ " {}";
1077+
}
1078+
1079+
@Override
1080+
public CHVersion since() {
1081+
return CHVersion.V3_3_1;
1082+
}
1083+
1084+
@Override
1085+
public boolean matches(Map<String, Construct> prefilter, BindableEvent event) throws PrefilterNonMatchException {
1086+
return event instanceof MCNotePlayEvent;
1087+
}
1088+
1089+
@Override
1090+
public BindableEvent convert(CArray manualObject, Target t) {
1091+
return null;
1092+
}
1093+
1094+
@Override
1095+
public Map<String, Construct> evaluate(BindableEvent event) throws EventException {
1096+
if (event instanceof MCNotePlayEvent) {
1097+
MCNotePlayEvent e = (MCNotePlayEvent) event;
1098+
Map<String, Construct> map = new HashMap<>();
1099+
Target t = Target.UNKNOWN;
1100+
map.put("location", ObjectGenerator.GetGenerator().location(e.getBlock().getLocation(), false));
1101+
map.put("instrument", new CString(e.getInstrument().name(), t));
1102+
map.put("tone", new CString(e.getNote().getTone().name() + (e.getNote().isSharped() ? "#" : ""), t));
1103+
map.put("octave", new CInt(e.getNote().getOctave(), t));
1104+
return map;
1105+
} else {
1106+
throw new EventException("Cannot convert event to NotePlayEvent");
1107+
}
1108+
}
1109+
1110+
@Override
1111+
public boolean modifyEvent(String key, Construct value, BindableEvent e) {
1112+
if (e instanceof MCNotePlayEvent) {
1113+
MCNotePlayEvent event = (MCNotePlayEvent) e;
1114+
try {
1115+
if("instrument".equals(key)){
1116+
event.setInstrument(MCInstrument.valueOf(value.val()));
1117+
return true;
1118+
}
1119+
if("tone".equals(key)){
1120+
if(value.val().length() == 0){
1121+
return false;
1122+
}
1123+
int octave = event.getNote().getOctave();
1124+
MCTone tone = MCTone.valueOf(value.val().substring(0, 1));
1125+
boolean sharp = value.val().endsWith("#");
1126+
event.setNote(StaticLayer.GetConvertor().GetNote(octave, tone, sharp));
1127+
return true;
1128+
}
1129+
if("octave".equals(key)){
1130+
int octave = Static.getInt32(value, Target.UNKNOWN);
1131+
MCTone tone = event.getNote().getTone();
1132+
boolean sharp = event.getNote().isSharped();
1133+
event.setNote(StaticLayer.GetConvertor().GetNote(octave, tone, sharp));
1134+
return true;
1135+
}
1136+
} catch(IllegalArgumentException ex){
1137+
throw new ConfigRuntimeException("No " + key + " with the value " + value + " exists",
1138+
Exceptions.ExceptionType.IllegalArgumentException, Target.UNKNOWN, ex);
1139+
}
1140+
}
1141+
return false;
1142+
}
1143+
}
10481144
}

0 commit comments

Comments
 (0)