diff --git a/src/main/resources/plugin.yml b/plugin.yml
old mode 100755
new mode 100644
similarity index 93%
rename from src/main/resources/plugin.yml
rename to plugin.yml
index 62b09e7..ad05b75
--- a/src/main/resources/plugin.yml
+++ b/plugin.yml
@@ -1,6 +1,7 @@
name: BasicCircuits
main: org.redstonechips.basiccircuits.BasicCircuits
version: 0.97
+api-version: 1.15
author: eisental
description: Basic circuit library for RedstoneChips integrated circuits plugin.
website: eisental.github.com/RedstoneChips
diff --git a/pom.xml b/pom.xml
index 2d3a027..8a61cec 100755
--- a/pom.xml
+++ b/pom.xml
@@ -30,10 +30,17 @@
+
+ org.bukkit
+ bukkit
+ 1.15.2-R0.1-SNAPSHOT
+ jar
+ provided
+
org.redstonechips
RedstoneChips
- 1.0-SNAPSHOT
+ 1.1-SNAPSHOT
diff --git a/src/main/java/org/redstonechips/basiccircuits/BasicCircuits.java b/src/main/java/org/redstonechips/basiccircuits/BasicCircuits.java
index a6c210c..460e783 100755
--- a/src/main/java/org/redstonechips/basiccircuits/BasicCircuits.java
+++ b/src/main/java/org/redstonechips/basiccircuits/BasicCircuits.java
@@ -15,7 +15,7 @@ public Class[] getCircuitClasses() {
multiplexer.class, multiplier.class, or.class, pisoregister.class, print.class, random.class, receiver.class,
shiftregister.class, transmitter.class, xor.class, decoder.class, encoder.class, pixel.class, pulse.class, not.class,
synth.class, srnor.class, terminal.class, router.class, ringcounter.class, iptransmitter.class, ipreceiver.class,
- comparator.class, delay.class, repeater.class, nand.class, nor.class, xnor.class, segdriver.class, dregister.class,
+ comparator.class, delay.class, repeater.class, nand.class, nor.class, xnor.class, segdriver.class, dregister.class,
sram.class, bintobcd.class, display.class, burst.class, ramwatch.class };
}
diff --git a/src/main/java/org/redstonechips/basiccircuits/SignWriter.java b/src/main/java/org/redstonechips/basiccircuits/SignWriter.java
index 60a4659..e4afa8d 100755
--- a/src/main/java/org/redstonechips/basiccircuits/SignWriter.java
+++ b/src/main/java/org/redstonechips/basiccircuits/SignWriter.java
@@ -2,6 +2,7 @@
import java.util.ArrayList;
import java.util.List;
+
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
@@ -24,48 +25,48 @@ public enum DisplayMode {
}
public static final int LineWidth = 15;
-
+
private final Type type;
private final DisplayMode display;
-
+
private final StringBuffer textBuffer = new StringBuffer();
private String[] lines = new String[] { "", "", "", "" };
private int scrollPos = 0;
private final List signList;
-
+
public SignWriter(DisplayMode displayMode, Type type, List signList) {
this.type = type;
this.display = displayMode;
this.signList = signList;
}
-
+
public DisplayMode getDisplayMode() {
return display;
}
-
+
public String[] getLines() { return lines; }
-
- public void setLines(String[] lines) {
+
+ public void setLines(String[] lines) {
this.lines = lines;
}
-
+
public String getText() {
return textBuffer.toString();
}
-
+
public void setText(String text) {
textBuffer.setLength(0);
textBuffer.append(text.toString());
-
+
if (display==DisplayMode.scroll)
prepScrollLines();
else prepWrapLines();
updateSigns();
}
-
+
List getSigns() { return signList; }
-
+
public void write(String text) {
if (display==DisplayMode.add) {
add(text);
@@ -79,14 +80,14 @@ public void write(String text) {
add(text);
prepScrollLines();
}
-
+
updateSigns();
}
-
+
public void write(boolean[] bits, int start, int length) {
write(convertBits(bits, start, length));
}
-
+
public void clear() {
textBuffer.setLength(0);
scrollPos = 0;
@@ -94,7 +95,7 @@ public void clear() {
lines[1] = "";
lines[2] = "";
lines[3] = "";
- updateSigns();
+ updateSigns();
}
public void scroll(int amount) {
@@ -105,9 +106,9 @@ public void scroll(int amount) {
prepScrollLines();
- updateSigns();
+ updateSigns();
}
-
+
private void add(String text) {
if (type==Type.ascii || textBuffer.length()==0) {
textBuffer.append(text);
@@ -123,9 +124,9 @@ private void updateSigns() {
s.setLine(2, lines[2]);
s.setLine(3, lines[3]);
s.update();
- }
+ }
}
-
+
private void prepScrollLines() {
String window;
@@ -142,7 +143,7 @@ private void prepScrollLines() {
lines[2] = "";
lines[3] = "";
}
-
+
private void prepWrapLines() {
if (textBuffer.length()>LineWidth*3) {
String line4 = textBuffer.substring(LineWidth*3);
@@ -160,7 +161,7 @@ private void prepWrapLines() {
} else if (textBuffer.length()>LineWidth) {
lines[0] = textBuffer.substring(0,LineWidth);
lines[1] = textBuffer.substring(LineWidth);
- lines[2] = "";
+ lines[2] = "";
lines[3] = "";
} else {
lines[0] = textBuffer.toString();
@@ -169,7 +170,7 @@ private void prepWrapLines() {
lines[3] = "";
}
}
-
+
private String convertBits(boolean[] bits, int start, int length) {
String text = null;
@@ -191,7 +192,7 @@ private String convertBits(boolean[] bits, int start, int length) {
return text;
}
-
+
public static SignWriter getSignWriter(DisplayMode mode, Type type, Location... aroundBlocks) {
List signs = new ArrayList<>();
@@ -209,10 +210,10 @@ public static SignWriter getSignWriter(DisplayMode mode, Type type, Location...
if (checkBlock(i, east)) { signs.add(east); }
if (checkBlock(i, up)) { signs.add(up); }
}
-
- return new SignWriter(mode, type, signs);
+
+ return new SignWriter(mode, type, signs);
}
-
+
private static boolean checkBlock(Block i, Location s) {
// TODO: Check whether this method loads the chunk or not.
Block sign = s.getBlock();
@@ -223,5 +224,5 @@ private static boolean checkBlock(Block i, Location s) {
} else return false;
}
-
+
}
diff --git a/src/main/java/org/redstonechips/basiccircuits/adder.java b/src/main/java/org/redstonechips/basiccircuits/adder.java
index 3ca02bd..f882dd9 100755
--- a/src/main/java/org/redstonechips/basiccircuits/adder.java
+++ b/src/main/java/org/redstonechips/basiccircuits/adder.java
@@ -35,7 +35,7 @@ protected void bitSetChanged(int bitSetIdx, boolean[] set) {
if (constant != 0) {
output = BooleanArrays.add(output, constant, outputlen);
}
-
+
// write result
this.writeBits(output);
}
@@ -53,13 +53,13 @@ public Circuit init(String[] args) {
}
if ((inputlen % wordlength)==0) {
- int inBitSetCount = inputlen / wordlength;
- inputBitSets = new boolean[inBitSetCount][wordlength];
+ int inBitSetCount = inputlen / wordlength;
+ inputBitSets = new boolean[inBitSetCount][wordlength];
} else return error("Invalid number of inputs (" + inputlen + "). Number of inputs must be a multiple of the word length.");
if (args[args.length-1].equalsIgnoreCase("subtract"))
subtract = true;
-
+
if ((args.length>1 && !subtract) || (args.length>2)) {
try {
constant = Integer.decode(args[1]);
@@ -68,14 +68,14 @@ public Circuit init(String[] args) {
return error("Bad constant argument: " + args[1] + " expecting a number.");
}
}
-
+
int maxResult = ((int)Math.pow(2, wordlength)-1) * inputBitSets.length + constant;
int expectedOutputs = (int)Math.ceil(Math.log(maxResult)/Math.log(2));
- if (outputlen0) || (offDuration<50 && offDuration>0))
- return error("Clock frequency is currently limited to 50ms per state. Use a lower freq argument or try setting pulse-width to 0.");
+ return error("Clock frequency is currently limited to 50ms per state. Use a lower freq argument or try setting pulse-width to 0.");
if (channelArg!=null) {
try {
@@ -123,7 +124,7 @@ private void startClock() {
ticking = true;
currentState = true;
-
+
taskId = rc.getServer().getScheduler().scheduleSyncDelayedTask(rc, tickTask);
if (taskId==-1) {
if (chip.hasListeners()) debug("Tick task schedule failed!");
@@ -144,7 +145,7 @@ private void stopClock() {
public void disable() {
super.disable();
stopClock();
- }
+ }
@Override
public void enable() {
@@ -154,16 +155,16 @@ public void enable() {
} else if (!onBits.isEmpty())
startClock();
}
-
+
@Override
public void shutdown() {
stopClock();
}
boolean currentState = true;
-
+
private class TickTask implements Runnable {
-
+
@Override
public void run() {
diff --git a/src/main/java/org/redstonechips/basiccircuits/comparator.java b/src/main/java/org/redstonechips/basiccircuits/comparator.java
index 1daf02e..fd1fb49 100755
--- a/src/main/java/org/redstonechips/basiccircuits/comparator.java
+++ b/src/main/java/org/redstonechips/basiccircuits/comparator.java
@@ -18,7 +18,7 @@ public class comparator extends Circuit {
private int dataPin;
private boolean clocked;
-
+
private static final boolean[] lessThan = BooleanArrays.fromInt(1, 3);
private static final boolean[] equals = BooleanArrays.fromInt(2, 3);
private static final boolean[] greaterThan = BooleanArrays.fromInt(4, 3);
@@ -36,9 +36,9 @@ private void calc() {
} else {
compare(BooleanArrays.toUnsignedInt(inputs, dataPin, wordLength),
BooleanArrays.toUnsignedInt(inputs, dataPin+wordLength, wordLength));
- }
+ }
}
-
+
private void compare(long a, long b) {
if (identityMode) {
if (chip.hasListeners()) debug(a + " is " + (a==b?"":"not ") + "equal to " + b);
@@ -65,7 +65,7 @@ public Circuit init(String[] args) {
clocked = hasConstant = false;
dataPin = 0;
-
+
if (args.length>0) {
clocked = args[args.length-1].equalsIgnoreCase("clockpin");
dataPin = (clocked?1:0);
@@ -79,12 +79,12 @@ public Circuit init(String[] args) {
return error("Bad constant argument: " + args[0]);
}
}
- }
+ }
if (!hasConstant) {
- if ((inputlen-dataPin)%2!=0)
+ if ((inputlen-dataPin)%2!=0)
return error("Expecting an even number of inputs when a constant is not used.");
-
+
wordLength = (inputlen-dataPin)/2;
} else wordLength = inputlen - dataPin;
diff --git a/src/main/java/org/redstonechips/basiccircuits/counter.java b/src/main/java/org/redstonechips/basiccircuits/counter.java
index 3a200ad..0ff4181 100755
--- a/src/main/java/org/redstonechips/basiccircuits/counter.java
+++ b/src/main/java/org/redstonechips/basiccircuits/counter.java
@@ -2,6 +2,7 @@
import java.util.HashMap;
import java.util.Map;
+
import org.redstonechips.circuit.Circuit;
/**
@@ -138,7 +139,7 @@ public void setInternalState(Map state) {
@Override
public Map getInternalState() {
- Map state = new HashMap();
+ Map state = new HashMap<>();
state.put("count", Integer.toString(count));
state.put("direction", Integer.toString(direction));
return state;
diff --git a/src/main/java/org/redstonechips/basiccircuits/decoder.java b/src/main/java/org/redstonechips/basiccircuits/decoder.java
index 64de201..f1e97e5 100755
--- a/src/main/java/org/redstonechips/basiccircuits/decoder.java
+++ b/src/main/java/org/redstonechips/basiccircuits/decoder.java
@@ -1,6 +1,7 @@
package org.redstonechips.basiccircuits;
import java.util.Arrays;
+
import org.redstonechips.circuit.Circuit;
import org.redstonechips.util.BooleanArrays;
@@ -15,7 +16,7 @@ public class decoder extends Circuit {
public void input(boolean state, int inIdx) {
if (inIdx==0 && state) {
int i = (int)BooleanArrays.toUnsignedInt(inputs, 1, inputlen-1);
- Arrays.fill(register, false);
+ Arrays.fill(register, false);
register[i] = true;
this.writeBits(register);
}
@@ -28,7 +29,7 @@ public Circuit init(String[] args) {
return error("Bad number of outputs. Expecting up to " + (int)Math.pow(2, inputlen-1) + " outputs for " + inputlen + " inputs.");
register = new boolean[outputlen];
-
+
return this;
}
}
diff --git a/src/main/java/org/redstonechips/basiccircuits/demultiplexer.java b/src/main/java/org/redstonechips/basiccircuits/demultiplexer.java
index f467578..e169f8c 100755
--- a/src/main/java/org/redstonechips/basiccircuits/demultiplexer.java
+++ b/src/main/java/org/redstonechips/basiccircuits/demultiplexer.java
@@ -2,6 +2,7 @@
import java.util.Arrays;
+
import org.redstonechips.circuit.Circuit;
import org.redstonechips.util.BooleanArrays;
@@ -26,13 +27,13 @@ public Circuit init(String[] args) {
bitCount = outputlen/outcount;
int expectedInputs = bitCount + selectSize;
- if (inputlen!=expectedInputs)
+ if (inputlen!=expectedInputs)
return error("Wrong number of inputs. expecting " + expectedInputs + " inputs (including "+ selectSize + " select pins)");
output = new boolean[outputlen];
select = new boolean[selectSize];
inputBitSet = new boolean[bitCount];
-
+
return this;
} catch (NumberFormatException ne) {
return error("Bad argument: " + args[0] + " expecting a number.");
diff --git a/src/main/java/org/redstonechips/basiccircuits/display.java b/src/main/java/org/redstonechips/basiccircuits/display.java
index 488dec3..955b9fa 100755
--- a/src/main/java/org/redstonechips/basiccircuits/display.java
+++ b/src/main/java/org/redstonechips/basiccircuits/display.java
@@ -4,7 +4,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import org.redstonechips.parsing.Parsing;
+
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.redstonechips.basiccircuits.screen.Screen;
@@ -12,6 +12,7 @@
import org.redstonechips.memory.Memory;
import org.redstonechips.memory.Ram;
import org.redstonechips.memory.RamListener;
+import org.redstonechips.parsing.Parsing;
import org.redstonechips.util.BooleanArrays;
import org.redstonechips.util.BooleanSubset;
import org.redstonechips.wireless.Receiver;
@@ -23,19 +24,19 @@
public class display extends Circuit {
private Screen screen;
private int xWordlength, yWordlength, colorWordlength;
-
+
private Receiver receiver;
-
+
private Ram ram;
private RamListener ramListener;
-
+
private long ramPage = 0;
private int ramPageLength;
-
+
@Override
public void input(boolean state, int inIdx) {
if (!inputs[0]) return;
-
+
if (ram==null) {
// set pixel
processPixelInput(inputs, 1);
@@ -55,7 +56,7 @@ public void receive(BooleanSubset bits) {
int y = (int)bits.toUnsignedInt(xWordlength, yWordlength);
int color = (int)bits.toUnsignedInt(xWordlength+yWordlength, colorWordlength);
processPixelInput(x, y, color); // set pixel
- }
+ }
}
private void processPixelInput(int x, int y, int color) {
@@ -65,9 +66,9 @@ private void processPixelInput(int x, int y, int color) {
if (chip.hasListeners()) debug(ie.getMessage());
}
- if (chip.hasListeners()) debug("Setting (" + x + ", " + y + ") to " + color);
+ if (chip.hasListeners()) debug("Setting (" + x + ", " + y + ") to " + color);
}
-
+
private void processPixelInput(boolean[] bits, int startIdx) {
int x = (int)BooleanArrays.toUnsignedInt(bits, startIdx, xWordlength);
int y = (int)BooleanArrays.toUnsignedInt(bits, startIdx+xWordlength, yWordlength);
@@ -75,13 +76,13 @@ private void processPixelInput(boolean[] bits, int startIdx) {
processPixelInput(x, y, color);
}
-
+
class DisplayRamListener implements RamListener {
@Override
public void dataChanged(Ram ram, long address, boolean[] data) {
int color = (int)BooleanArrays.toUnsignedInt(data);
long offset = ramPage * ramPageLength;
-
+
if (address >= offset && address < offset + ramPageLength) {
long idx = address - offset;
int x = (int)(idx % screen.getDescription().addrWidth);
@@ -97,14 +98,14 @@ public void dataChanged(Ram ram, long address, boolean[] data) {
}
}
}
-
+
private void refreshDisplayFromRam() {
long offset = ramPage * ramPageLength;
for (long i=offset; i0) {
String[] split = args[0].split("x");
if (split.length==2 && Parsing.isInt(split[0]) && Parsing.isInt(split[1])) {
size = new int[] { Integer.parseInt(split[0]), Integer.parseInt(split[1]) };
- }
+ }
}
-
-
+
+
int start = (size==null?0:1);
if (args.length>start) { // color index
-
+
List colorList = new ArrayList<>();
-
+
for (int i=start; i structure = new ArrayList<>(Arrays.asList(chip.structure));
-
+
Location[][][] pixels = screen.getPixelBlocks();
int width = screen.getDescription().addrWidth;
int height = screen.getDescription().addrHeight;
-
+
for (int x=0; x Math.pow(2, outputlen))
+ if (inputlen > Math.pow(2, outputlen))
return error("Number of inputs must be no more than 2 to the power of the number of outputs.");
- else
+ else
return this;
}
}
diff --git a/src/main/java/org/redstonechips/basiccircuits/flipflop.java b/src/main/java/org/redstonechips/basiccircuits/flipflop.java
index b4ab369..9fb6805 100755
--- a/src/main/java/org/redstonechips/basiccircuits/flipflop.java
+++ b/src/main/java/org/redstonechips/basiccircuits/flipflop.java
@@ -25,9 +25,9 @@ public void input(boolean state, int inIdx) {
@Override
public Circuit init(String[] args) {
- if (outputlen!=inputlen && inputlen!=outputlen+1)
+ if (outputlen!=inputlen && inputlen!=outputlen+1)
return error("Expecting the same number of inputs and outputs or one extra input reset pin.");
-
+
resetPinMode = (inputlen==outputlen+1);
if (activator!=null) clearOutputs();
diff --git a/src/main/java/org/redstonechips/basiccircuits/ipreceiver.java b/src/main/java/org/redstonechips/basiccircuits/ipreceiver.java
index 79c5c68..7a3dfb5 100755
--- a/src/main/java/org/redstonechips/basiccircuits/ipreceiver.java
+++ b/src/main/java/org/redstonechips/basiccircuits/ipreceiver.java
@@ -13,6 +13,7 @@
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+
import org.redstonechips.circuit.Circuit;
import org.redstonechips.util.BitSetUtils;
@@ -39,9 +40,9 @@ public void input(boolean state, int inIdx) {
byte[] bytes = packet.getData();
BitSet bits = BitSet.valueOf(bytes);
writeBitSet(bits, 1, outputlen-1);
-
+
if (chip.hasListeners()) debug("Received " + BitSetUtils.bitSetToBinaryString(bits, 0, outputlen-1) + " from " + packet.getAddress() + ":" + packet.getPort());
-
+
// pulse the output clock pin.
write(true, 0);
write(false, 0);
@@ -60,8 +61,8 @@ public void input(boolean state, int inIdx) {
public Circuit init(String[] args) {
if (outputlen<2) return error("Expecting at least 2 outputs. 1 output clock pin and 1 or more data pins.");
if (inputlen!=1) return error("Expecting 1 clock input.");
- if (args.length<2) return error("Expecting a port sign argument and at least one authorized incoming address.");
-
+ if (args.length<2) return error("Expecting a port sign argument and at least one authorized incoming address.");
+
try {
int port = Integer.decode(args[0]);
try {
diff --git a/src/main/java/org/redstonechips/basiccircuits/iptransmitter.java b/src/main/java/org/redstonechips/basiccircuits/iptransmitter.java
index e217822..c4fbfc3 100755
--- a/src/main/java/org/redstonechips/basiccircuits/iptransmitter.java
+++ b/src/main/java/org/redstonechips/basiccircuits/iptransmitter.java
@@ -9,6 +9,7 @@
import java.util.BitSet;
import java.util.logging.Level;
import java.util.logging.Logger;
+
import org.redstonechips.RCPrefs;
import org.redstonechips.circuit.Circuit;
import org.redstonechips.parsing.Range;
@@ -42,13 +43,13 @@ public Circuit init(String[] args) {
address = InetAddress.getByName(args[0]);
port = Integer.decode(args[1]);
Object oRange = RCPrefs.getPref("iptransmitter.ports");
- if (oRange==null)
+ if (oRange==null)
return error("No ports are allowed. Please set a port range by changing the iptransmitter.ports preferences key.");
String sRange = oRange.toString();
Range portRange = new Range(sRange, Range.Type.OPEN_ALLOWED);
if (!portRange.isInRange(port)) {
- return error("Port " + port + " is not allowed. Use ports in the range of " + portRange.toString()
+ return error("Port " + port + " is not allowed. Use ports in the range of " + portRange.toString()
+ ". You can change the port range by changing the iptransmitter.ports preferences key.");
}
@@ -68,8 +69,8 @@ public Circuit init(String[] args) {
private void udpBits(boolean[] bits, int start, int length) {
BitSet out = new BitSet(length);
- for (int i=0; i5) return error("Too many inputs. Expecting 1 clock pin and no more than 4 data pins.");
else if (chip.interfaceBlocks.length==0) return error("Expecting at least 1 interface block.");
-
+
if (args.length>0) {
String channelString = null;
List colorList = new ArrayList<>();
for (int i=0; i=0 && distance>maxDistance)
return error("A distance value of " + distance + " is not allowed. The maximum value is " + maxDistance + ".");
-
+
} catch (NumberFormatException ne2) {
return error("Bad distance argument: " + args[i] + ". Expecting d{} or dist{}.");
}
@@ -74,8 +196,10 @@ public Circuit init(String[] args) {
// color index
if (!colorList.isEmpty()) {
colorIndex = new byte[colorList.size()];
- for (int i=0; i=colorIndex.length) {
@@ -131,29 +253,46 @@ private void updatePixel(boolean[] bits) {
return;
}
color = colorIndex[index];
- } else
- color = (byte)val;
+ } else color = (byte)val;
- if (chip.hasListeners()) debug("Setting pixel color to " + DyeColor.getByData(color));
+ if (chip.hasListeners()) debug("Setting pixel color to " + ColortoString(color));
- for (Location l : colorBlocks) l.getBlock().setData(color);
+ for (Location l : colorBlocks) {
+ Block b = l.getBlock();
+ BlockState bState = b.getState();
+ bState.setType(ColorSel(color));
+ bState.update(true, false);
+ }
}
- private static void findColorBlocksAround(Location origin, Location curLocation, List coloredBlocks, int range, int curDist) {
+ @SuppressWarnings("incomplete-switch")
+ private static void findColorBlocksAround(Location origin, Location curLocation, List coloredBlocks, int range, int curDist) {
if (curDist>=range) return;
curDist++;
for (BlockFace face : faces) {
Location attached = Locations.getFace(curLocation, face);
switch (attached.getBlock().getType()) {
- case WOOL:
- case STAINED_GLASS:
- case STAINED_GLASS_PANE:
- case STAINED_CLAY:
+ case WHITE_WOOL:
+ case ORANGE_WOOL:
+ case MAGENTA_WOOL:
+ case LIGHT_BLUE_WOOL:
+ case YELLOW_WOOL:
+ case LIME_WOOL:
+ case PINK_WOOL:
+ case GRAY_WOOL:
+ case LIGHT_GRAY_WOOL:
+ case CYAN_WOOL:
+ case PURPLE_WOOL:
+ case BLUE_WOOL:
+ case BROWN_WOOL:
+ case GREEN_WOOL:
+ case RED_WOOL:
+ case BLACK_WOOL:
if (!coloredBlocks.contains(attached) && !attached.equals(origin) && inCube(origin, attached, range))
coloredBlocks.add(attached);
- findColorBlocksAround(origin, attached, coloredBlocks, range, curDist);
+ findColorBlocksAround(origin, attached, coloredBlocks, range, curDist);
}
}
}
@@ -174,14 +313,14 @@ private int getMaxDistance() {
if (oMaxDist != null && oMaxDist instanceof Integer) return (Integer)oMaxDist;
else return -1;
}
-
+
class PixelReceiver extends Receiver {
@Override
public void receive(BooleanSubset bits) {
- // if we have 0 or 1 inputs there's no clock to adjust. just use the incoming bits.
+ // if we have 0 or 1 inputs there's no clock to adjust. just use the incoming bits.
boolean[] valbits;
if (inputlen<=1) {
- valbits = bits.copy(0, (inputlen==0?5:inputlen));
+ valbits = bits.copy(0, bits.length());
} else {
valbits = new boolean[bits.length()+1];
for (int i=0; i0) {
+
+ if (args.length>0) {
if (args[args.length-1].startsWith("#")) { // channel arg
channel = args[args.length-1].substring(1);
}
-
+
if (args.length>=(channel!=null?2:1)) {
try {
type = Type.valueOf(args[0]);
@@ -128,7 +133,7 @@ public Circuit init(String[] args) {
return error("Expecting at least 3 inputs. 1 clock pin, 1 clear pin and 1 data pin.");
} else if (display==DisplayMode.scroll && inputlen<4) {
return error("Expecting at least 4 inputs. 1 clock pin, 1 clear pin, 1 scroll pin and 1 data pin.");
- }
+ }
}
if (chip.interfaceBlocks.length==0) return error("Expecting at least 1 interface block.");
@@ -136,8 +141,8 @@ public Circuit init(String[] args) {
if (display==DisplayMode.replace) dataPin = 1;
else if (display==DisplayMode.add) dataPin = 2;
else if (display==DisplayMode.scroll) dataPin = 3;
-
- writer = SignWriter.getSignWriter(display, type, IOBlock.locationsOf(chip.interfaceBlocks));
+
+ writer = SignWriter.getSignWriter(display, type, IOBlock.locationsOf(chip.interfaceBlocks));
if (writer.getSigns().isEmpty()) {
return error("Couldn't find any signs attached to the chip interface blocks.");
} else {
@@ -147,48 +152,48 @@ public Circuit init(String[] args) {
chip.structure = str.toArray(new Location[str.size()]);
info("Found " + writer.getSigns().size() + " sign(s) to print on.");
}
-
+
rc.addRCTypeReceiver(chip.activationBlock, this);
-
+
if (channel!=null && !initReceiver(activator, channel, type)) return null;
else return this;
}
-
+
private boolean initReceiver(CommandSender sender, String channel, Type type) {
try {
Receiver writeReceiver = new WriteReceiver();
writeReceiver.init(sender, channel, type==Type.ascii?8:32, this);
-
+
if (writer.getDisplayMode()==DisplayMode.add) {
Receiver clearReceiver = new ClearReceiver();
clearReceiver.init(sender, channel, 1, this);
-
+
writeReceiver.setStartBit(writeReceiver.getStartBit()+1);
} else if (writer.getDisplayMode()==DisplayMode.scroll) {
Receiver clearReceiver = new ClearReceiver();
clearReceiver.init(sender, channel, 1, this);
-
+
Receiver scrollReceiver = new ScrollReceiver();
scrollReceiver.init(sender, channel, 1, this);
scrollReceiver.setStartBit(scrollReceiver.getStartBit()+1);
- writeReceiver.setStartBit(writeReceiver.getStartBit()+2);
-
+ writeReceiver.setStartBit(writeReceiver.getStartBit()+2);
+
}
-
+
return true;
} catch (IllegalArgumentException e) {
error(e.getMessage());
return false;
- }
+ }
}
-
+
@Override
public void setInternalState(Map state) {
Object text = state.get("text");
- if (text!=null)
+ if (text!=null)
writer.setText(text.toString());
}
@@ -202,5 +207,5 @@ public Map getInternalState() {
@Override
public boolean isStateless() {
return false;
- }
+ }
}
diff --git a/src/main/java/org/redstonechips/basiccircuits/pulse.java b/src/main/java/org/redstonechips/basiccircuits/pulse.java
index 14faf86..fbdc65b 100755
--- a/src/main/java/org/redstonechips/basiccircuits/pulse.java
+++ b/src/main/java/org/redstonechips/basiccircuits/pulse.java
@@ -9,7 +9,7 @@
*/
public class pulse extends Circuit {
- public enum EdgeTriggering { positive, negative, doubleEdge };
+ public enum EdgeTriggering { positive, negative, doubleEdge }
private EdgeTriggering trigger = EdgeTriggering.positive;
@@ -36,12 +36,12 @@ public Circuit init(String[] args) {
if (inputlen!=outputlen && inputlen!=1)
return error("Expecting the same number of inputs and outputs or 1 input.");
- if (inputlen==0)
+ if (inputlen==0)
return error("Expecting at least one input and one output.");
-
+
if (args.length==0) interval = 1000; // 1 sec default
-
+
if (args.length>=1) {
try {
interval = Math.round(UnitParser.parse(args[0]));
diff --git a/src/main/java/org/redstonechips/basiccircuits/ramwatch.java b/src/main/java/org/redstonechips/basiccircuits/ramwatch.java
index 2731b0f..0a00d73 100755
--- a/src/main/java/org/redstonechips/basiccircuits/ramwatch.java
+++ b/src/main/java/org/redstonechips/basiccircuits/ramwatch.java
@@ -2,6 +2,7 @@
package org.redstonechips.basiccircuits;
import java.io.IOException;
+
import org.redstonechips.circuit.Circuit;
import org.redstonechips.memory.Memory;
import org.redstonechips.memory.Ram;
@@ -14,14 +15,14 @@ public class ramwatch extends Circuit {
private Ram ram;
private RamListener ramListener;
private long ramaddr;
-
+
@Override
public void input(boolean state, int inIdx) {
if (inIdx==0) {
debug("Chip " + (state?"enabled":"disabled") + ".");
}
}
-
+
class RamWatchListener implements RamListener {
@Override
public void dataChanged(Ram ram, long address, boolean[] data) {
@@ -31,7 +32,7 @@ public void dataChanged(Ram ram, long address, boolean[] data) {
}
}
}
-
+
@Override
public Circuit init(String[] args) {
if (args.length >= 1) {
@@ -41,32 +42,32 @@ public Circuit init(String[] args) {
ramaddr = Long.decode(args[1]);
else
ramaddr = -1;
-
+
ram = (Ram)Memory.getMemory(args[0].substring(1), Ram.class);
} catch (NumberFormatException | IOException e) {
return error(e.getMessage());
}
} else return error("Invalid argument: " + args[0]);
} else return error("Expected at least one argument, the memory id to watch.");
-
- if (inputlen < 1 || outputlen < 1)
+
+ if (inputlen < 1 || outputlen < 1)
return error("Expected at least one input and output. Found " + inputlen + " input(s) and " + outputlen + " output(s).");
-
+
if (activator!=null) clearOutputs();
-
+
if (ram != null) {
ramListener = new RamWatchListener();
ram.addListener(ramListener);
-
+
if (ramaddr==-1)
info("Created ram watcher targeting any address of memory $"+ram.getId() + ".");
else
info("Created ram watcher targeting $"+ram.getId()+"@"+Long.toHexString(ramaddr) + ".");
return this;
- } else
+ } else
return error("Couldn't find ram to watch.");
}
-
+
@Override
public void shutdown() {
if (ram != null) {
@@ -74,7 +75,7 @@ public void shutdown() {
ram.release();
}
}
-
+
@Override
public boolean isStateless() {
return false;
diff --git a/src/main/java/org/redstonechips/basiccircuits/random.java b/src/main/java/org/redstonechips/basiccircuits/random.java
index 2ea2282..d755a24 100755
--- a/src/main/java/org/redstonechips/basiccircuits/random.java
+++ b/src/main/java/org/redstonechips/basiccircuits/random.java
@@ -2,6 +2,7 @@
import java.util.Random;
+
import org.redstonechips.circuit.Circuit;
@@ -38,7 +39,7 @@ public Circuit init(String[] args) {
setAll = false;
} else
return error("Expecting either the same amount of inputs and outputs, or exactly 1 input.");
-
+
return this;
}
}
diff --git a/src/main/java/org/redstonechips/basiccircuits/receiver.java b/src/main/java/org/redstonechips/basiccircuits/receiver.java
index ee56348..17059c8 100755
--- a/src/main/java/org/redstonechips/basiccircuits/receiver.java
+++ b/src/main/java/org/redstonechips/basiccircuits/receiver.java
@@ -12,14 +12,14 @@
public class receiver extends Circuit {
private int dataPin;
private Receiver rec;
-
+
@Override
public void input(boolean state, int inIdx) {}
@Override
public Circuit init(String[] args) {
if (outputlen==0) return error("Expecting at least 1 output pin.");
-
+
if (args.length>0) {
try {
dataPin = (outputlen==1?0:1);
@@ -35,14 +35,14 @@ public Circuit init(String[] args) {
class ReceiverImpl extends Receiver {
@Override
- public void receive(BooleanSubset bits) {
+ public void receive(BooleanSubset bits) {
if (chip.hasListeners()) debug("Received " + bits.toString());
writeBooleanSubset(bits, dataPin, outputlen-dataPin);
if (outputlen>1) {
write(true, 0);
write(false, 0);
}
- }
+ }
}
@Override
diff --git a/src/main/java/org/redstonechips/basiccircuits/repeater.java b/src/main/java/org/redstonechips/basiccircuits/repeater.java
index ed3083c..6eefecf 100755
--- a/src/main/java/org/redstonechips/basiccircuits/repeater.java
+++ b/src/main/java/org/redstonechips/basiccircuits/repeater.java
@@ -10,7 +10,7 @@
public class repeater extends Circuit {
int outputSets;
int outputSetSize;
-
+
@Override
public void input(boolean state, int inIdx) {
if (outputSets==0)
@@ -21,15 +21,15 @@ public void input(boolean state, int inIdx) {
}
@Override
- public Circuit init(String[] args) {
+ public Circuit init(String[] args) {
if (inputlen<1) return error("Expecting at least 1 input pin.");
if (outputlen<1) return error("Expecting at least 1 output pin.");
-
+
if (inputlen == 1)
outputSets = 0; //optimize for original function
else
outputSets = outputlen/inputlen;
-
+
if (outputSets != 0) {
if (outputlen != inputlen*outputSets)
return error("Tried to split "+outputlen+" into "+outputSets+", expected "+(inputlen*outputSets)+" outputs.");
@@ -46,7 +46,7 @@ public Circuit init(String[] args) {
else
info("Splitting 1 bit into "+outputlen+".");
}
-
+
return this;
}
}
diff --git a/src/main/java/org/redstonechips/basiccircuits/ringcounter.java b/src/main/java/org/redstonechips/basiccircuits/ringcounter.java
index b2d0d23..1df4653 100755
--- a/src/main/java/org/redstonechips/basiccircuits/ringcounter.java
+++ b/src/main/java/org/redstonechips/basiccircuits/ringcounter.java
@@ -2,6 +2,7 @@
package org.redstonechips.basiccircuits;
import java.util.BitSet;
+
import org.redstonechips.circuit.Circuit;
/**
diff --git a/src/main/java/org/redstonechips/basiccircuits/router.java b/src/main/java/org/redstonechips/basiccircuits/router.java
index ed3c3fc..6294ead 100755
--- a/src/main/java/org/redstonechips/basiccircuits/router.java
+++ b/src/main/java/org/redstonechips/basiccircuits/router.java
@@ -6,6 +6,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+
import org.redstonechips.circuit.Circuit;
/**
@@ -41,7 +42,7 @@ public void input(boolean state, int inIdx) {
writeBits(register, 0, outputlen);
}
-
+
}
@Override
@@ -56,7 +57,7 @@ public Circuit init(String[] args) {
if (split.length!=2) return error("Bad routing entry: " + arg);
try {
- Integer input = Integer.decode(split[0]);
+ Integer input = Integer.decode(split[0]);
Integer output;
if (split[1].equalsIgnoreCase("all")) {
output = -1;
diff --git a/src/main/java/org/redstonechips/basiccircuits/screen/Screen.java b/src/main/java/org/redstonechips/basiccircuits/screen/Screen.java
index 1de342c..5ebf312 100755
--- a/src/main/java/org/redstonechips/basiccircuits/screen/Screen.java
+++ b/src/main/java/org/redstonechips/basiccircuits/screen/Screen.java
@@ -4,35 +4,87 @@
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
+import org.bukkit.block.BlockState;
/**
*
* @author Tal Eisenberg
*/
public class Screen {
-
+
public static final Material[] materials = new Material[] {
- Material.WOOL,
- Material.CARPET,
- Material.STAINED_CLAY,
- Material.STAINED_GLASS_PANE,
- Material.STAINED_GLASS,
+ Material.WHITE_WOOL,
+ Material.ORANGE_WOOL,
+ Material.MAGENTA_WOOL,
+ Material.LIGHT_BLUE_WOOL,
+ Material.YELLOW_WOOL,
+ Material.LIME_WOOL,
+ Material.PINK_WOOL,
+ Material.GRAY_WOOL,
+ Material.LIGHT_GRAY_WOOL,
+ Material.CYAN_WOOL,
+ Material.PURPLE_WOOL,
+ Material.BLUE_WOOL,
+ Material.BROWN_WOOL,
+ Material.GREEN_WOOL,
+ Material.RED_WOOL,
+ Material.BLACK_WOOL,
};
- public enum Axis {X,Y,Z};
+ public enum Axis {X,Y,Z}
+
+ public Material ColorSel(int colornum) {
+ switch(colornum)
+ {
+ case 0 :
+ return(Material.WHITE_WOOL);
+ case 1 :
+ return(Material.ORANGE_WOOL);
+ case 2 :
+ return(Material.MAGENTA_WOOL);
+ case 3 :
+ return(Material.LIGHT_BLUE_WOOL);
+ case 4 :
+ return(Material.YELLOW_WOOL);
+ case 5 :
+ return(Material.LIME_WOOL);
+ case 6 :
+ return(Material.PINK_WOOL);
+ case 7 :
+ return(Material.GRAY_WOOL);
+ case 8 :
+ return(Material.LIGHT_GRAY_WOOL);
+ case 9 :
+ return(Material.CYAN_WOOL);
+ case 10 :
+ return(Material.PURPLE_WOOL);
+ case 11 :
+ return(Material.BLUE_WOOL);
+ case 12 :
+ return(Material.BROWN_WOOL);
+ case 13 :
+ return(Material.GREEN_WOOL);
+ case 14 :
+ return(Material.RED_WOOL);
+ case 15 :
+ return(Material.BLACK_WOOL);
+ }
+
+ return(Material.WHITE_WOOL);
+ }
private final ScreenDescription ds;
-
+
private byte[] colorIndex = null;
-
+
private int colorLength = 4;
-
+
private final Location[][][] pixels;
private final byte[][] memory;
private Screen(ScreenDescription ds) {
this.ds = ds;
-
+
int pixelWidth = (int)Math.ceil(ds.physicalWidth/ds.addrWidth);
int pixelHeight = (int)Math.ceil(ds.physicalHeight/ds.addrHeight);
pixels = new Location[ds.addrWidth][ds.addrHeight][Math.abs(pixelWidth*pixelHeight)];
@@ -42,40 +94,41 @@ private Screen(ScreenDescription ds) {
pixels[x][y] = findPixelBlocks(ds.origin, x, y, ds.widthAxis, ds.heightAxis, pixelWidth, pixelHeight);
}
}
-
+
ds.pixelWidth = pixelWidth;
ds.pixelHeight = pixelHeight;
- memory = new byte[ds.addrWidth][ds.addrHeight];
+ memory = new byte[ds.addrWidth][ds.addrHeight];
}
-
- public void setColorIndex(byte[] index) {
+
+ public void setColorIndex(byte[] index) {
this.colorIndex = index;
if (colorIndex==null) colorLength = 4;
- else colorLength = calculateBitLength(colorIndex.length);
+ else colorLength = calculateBitLength(colorIndex.length);
}
-
+
public ScreenDescription getDescription() {
return ds;
}
-
+
public int getColorLength() {
return colorLength;
}
-
+
public int getXLength() {
return calculateBitLength(ds.addrWidth);
}
-
+
public int getYLength() {
return calculateBitLength(ds.addrHeight);
}
-
+
public Location[][][] getPixelBlocks() {
return pixels;
}
-
+
public void setPixel(int x, int y, int data, boolean checkMemory) {
byte color;
+
if (colorIndex!=null) {
if (data>=colorIndex.length) {
throw new IllegalArgumentException("Color index " + data + " is out of bounds.");
@@ -87,51 +140,53 @@ public void setPixel(int x, int y, int data, boolean checkMemory) {
if (x>=ds.addrWidth || y>=ds.addrHeight) {
throw new IllegalArgumentException("Pixel (" + x + ", " + y + ") is out of bounds.");
}
-
+
Location[] pixel = pixels[x][y];
if (!checkMemory || memory[x][y]!=color) {
for (Location l : pixel) {
Block b = l.getBlock();
+ BlockState bState = b.getState();
for (Material m : Screen.materials) {
if (b.getType()==m) {
- b.setData(color);
- break;
+ bState.setType(ColorSel(color));
+ bState.update(true, true);
+ break;
}
}
}
memory[x][y] = color;
- }
+ }
}
-
+
public void clear() {
for (int y=0; y0) {
- if (args[0].equalsIgnoreCase("right")) shiftRight = true;
- else if (args[0].equalsIgnoreCase("left")) shiftRight = false;
- else return error("Invalid argument: " + args[0] + " expecting right|aright|left.");
+ if (args[0].equalsIgnoreCase("right")) shiftRight = true;
+ else if (args[0].equalsIgnoreCase("left")) shiftRight = false;
+ else return error("Invalid argument: " + args[0] + " expecting right|aright|left.");
}
-
+
if (activator!=null) clearOutputs();
register = new boolean[outputlen];
-
+
return this;
}
diff --git a/src/main/java/org/redstonechips/basiccircuits/sram.java b/src/main/java/org/redstonechips/basiccircuits/sram.java
index 44ce54e..ab5210f 100755
--- a/src/main/java/org/redstonechips/basiccircuits/sram.java
+++ b/src/main/java/org/redstonechips/basiccircuits/sram.java
@@ -3,8 +3,7 @@
import java.io.IOException;
import java.util.logging.Level;
-import org.redstonechips.paging.LineSource;
-import org.redstonechips.parsing.Range;
+
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -14,7 +13,9 @@
import org.redstonechips.memory.Memory;
import org.redstonechips.memory.Ram;
import org.redstonechips.memory.RamListener;
+import org.redstonechips.paging.LineSource;
import org.redstonechips.paging.Pager;
+import org.redstonechips.parsing.Range;
import org.redstonechips.util.BooleanArrays;
/**
@@ -30,14 +31,14 @@ public class sram extends Circuit implements RCTypeReceiver, RamListener {
int disablePin;
int addressPin;
int dataPin;
-
+
boolean readOnlyMode;
boolean sramDisable = false;
boolean readWrite = false;
boolean anonymous = true;
-
+
@Override
public void input(boolean state, int inIdx) {
if (inIdx==readWritePin) {
@@ -98,10 +99,10 @@ public Circuit init(String[] args) {
if (outputlen==0) return error("Expecting at least 1 output pin.");
if (addressLength<1) {
- if (readOnlyMode) return error("Expecting at least 1 control pin, and 1 address input pin.");
+ if (readOnlyMode) return error("Expecting at least 1 control pin, and 1 address input pin.");
else return error("Expecting at least 2 control pins, 1 address input pin, and " + wordLength + " data pins.");
}
-
+
try {
if (args.length>0) {
anonymous = false;
@@ -116,22 +117,22 @@ public Circuit init(String[] args) {
} catch (IllegalArgumentException e) {
return error(e.getMessage());
}
-
+
if (!readOnlyMode) {
readWrite = inputs[readWritePin];
}
-
+
sramDisable = inputs[disablePin];
-
+
rc.addRCTypeReceiver(chip.activationBlock, this);
if (activator!=null) clearOutputs();
if (readWrite && !sramDisable) {
readMemory();
}
-
+
memory.addListener(this);
info("This sram chip can hold up to " + Math.pow(2, addressLength) + "x" + wordLength + " bits. Memory data will be stored at " + ChatColor.YELLOW + memory.getFile().getPath());
-
+
return this;
}
@@ -159,7 +160,7 @@ private void readMemory() {
if (chip.hasListeners()) debug("Reading " + BooleanArrays.toPrettyString(data, wordLength) + " from address " + address);
writeBits(data, 0, wordLength);
}
-
+
@Override
public void type(String[] words, Player player) {
if (words.length==0) return;
@@ -173,9 +174,9 @@ public void type(String[] words, Player player) {
String ascii = b.toString();
for (int i=0; i0) {
+ boolean instrumentarg = false;
+
+ inst = instrument[11];
+
+ if (args.length>0) {
if (args[args.length-1].startsWith("#")) { // channel arg
channel = args[args.length-1].substring(1);
}
-
- if (args.length>=(channel!=null?2:1)) {
- indexedPitch = true;
- pitchIndex = new byte[(channel==null?args.length:args.length-1)];
- for (int i=0; i=(channel!=null?2:1)) {
+ indexedPitch = true;
+ pitchIndex = new byte[(channel==null?args.length:args.length-1)];
+ for (int i=0; i=(channel!=null?3:2)) {
+ indexedPitch = true;
+ pitchIndex = new byte[(channel==null?args.length-1:args.length-2)];
+ for (int i=0; i6 && !indexedPitch)
+
+ if (chip.interfaceBlocks.length==0) return error("Expecting at least 1 interface block.");
+ if (inputlen!=0) {
+
+ if (indexedPitch && instrumentPins) {
+ if (inputlen<(5+Math.ceil(Math.log(pitchIndex.length)/Math.log(2)))) {
+ if (channel!=null) return error("Not enough inputs. Indexed mode with instrument selection requires 1 clock pin, 4 instrument pins and " + (int)Math.ceil(Math.log(pitchIndex.length)/Math.log(2)) + " pitch index pins. You have a channel listed, this mode will run with 0 inputs");
+ else return error("Not enough inputs. Indexed mode with instrument selection requires 1 clock pin, 4 instrument pins and " + (int)Math.ceil(Math.log(pitchIndex.length)/Math.log(2)) + " pitch index pins");
+ }
+ if (inputlen>(5+Math.ceil(Math.log(pitchIndex.length)/Math.log(2)))) {
+ return error("Too many inputs. Indexed mode with instrument selection requires 1 clock pin, 4 instrument pins and " + (int)Math.ceil(Math.log(pitchIndex.length)/Math.log(2)) + " pitch index pins");
+ }
+ }
+
+ else if (inputlen>6 && !indexedPitch && !instrumentPins)
return error("Too many inputs. Direct mode requires 1 clock pin and no more than 5 data pins.");
- else if (channel==null && inputlen==0)
- return error("Expecting at least 1 input pin.");
+ else if (inputlen>10 && !indexedPitch && instrumentPins)
+ return error("Too many inputs. Direct mode with instrument selection requires 1 clock pin and no more than 9 data pins.");
+ else if (inputlen<6 && !indexedPitch && instrumentPins) {
+ if (channel!=null) return error("Not enough inputs. Expecting 1 clock pin and at 4 instrument pins. You have a channel listed, this mode will run with 0 inputs");
+ else return error("Not enough inputs. Expecting 1 clock pin and at 4 instrument pins.");
+ }
+ }
+ if (channel==null && inputlen==0) { // if no channel and no clock pin
+ return error("Expecting at least 1 input pin.");
+ }
if (channel!=null) {
int len;
- if (indexedPitch) len = (int)Math.ceil(Math.log(pitchIndex.length)/Math.log(2));
+ if (indexedPitch && !instrumentPins) len = (int)Math.ceil(Math.log(pitchIndex.length)/Math.log(2));
+ else if (indexedPitch && instrumentPins) len = (int)Math.ceil(Math.log(pitchIndex.length)/Math.log(2) + 4);
+ else if (instrumentPins) len = 9;
else len = 5;
-
+
try {
receiver = new SynthReceiver();
receiver.init(activator, channel, len, this);
} catch (IllegalArgumentException e) {
return error(e.getMessage());
- }
+ }
+
}
-
+
return this;
}
- private void playNote(int val) {
+ private void playNote2(int val) {
byte pitch;
if (indexedPitch) {
@@ -124,12 +265,10 @@ private void playNote(int val) {
}
private void tryToPlay(Block block, byte pitch) {
- if (block.getType()==Material.NOTE_BLOCK) {
- NoteBlock n = (NoteBlock)block.getState();
- try {
- n.setNote(new Note(pitch));
- n.play();
- } catch (NullPointerException npe) {}
+ if (block.getType()==Material.NOTE_BLOCK) {
+ for (Player player : Bukkit.getServer().getOnlinePlayers()) {
+ player.playNote(block.getLocation(), inst, new Note(pitch));
+ }
}
}
diff --git a/src/main/java/org/redstonechips/basiccircuits/terminal.java b/src/main/java/org/redstonechips/basiccircuits/terminal.java
index ffdd186..8bca8b6 100755
--- a/src/main/java/org/redstonechips/basiccircuits/terminal.java
+++ b/src/main/java/org/redstonechips/basiccircuits/terminal.java
@@ -3,8 +3,8 @@
import org.bukkit.entity.Player;
import org.redstonechips.RCTypeReceiver;
-import org.redstonechips.circuit.Circuit;
import org.redstonechips.chip.io.InterfaceBlock;
+import org.redstonechips.circuit.Circuit;
import org.redstonechips.util.BooleanArrays;
import org.redstonechips.wireless.Transmitter;
@@ -18,9 +18,9 @@ private enum DataType { ascii, num }
private boolean[] register;
private DataType type = DataType.ascii;
private boolean eot;
-
+
private Transmitter transmitter;
-
+
@Override
public void input(boolean state, int inIdx) {
if (inIdx==0 && state) {
@@ -33,7 +33,7 @@ public void input(boolean state, int inIdx) {
public Circuit init(String[] args) {
eot = false;
String channelArg = null;
-
+
if (args.length>0 && args[args.length-1].startsWith("#")) {
// last argument is a channel name
channelArg = args[args.length-1].substring(1);
@@ -41,10 +41,10 @@ public Circuit init(String[] args) {
if (newArgs.length>0)
System.arraycopy(args, 0, newArgs, 0, newArgs.length);
- args = newArgs;
- }
+ args = newArgs;
+ }
+
-
if (args.length>0) {
try {
type = DataType.valueOf(args[0]);
@@ -55,7 +55,7 @@ public Circuit init(String[] args) {
if (args.length>1) {
if (args[1].equalsIgnoreCase("eot")) {
eot = true;
- } else
+ } else
return error("Unknown argument: " + args[1]);
}
}
@@ -64,11 +64,11 @@ public Circuit init(String[] args) {
if (type==DataType.ascii && outputlen!=9 && outputlen!=10)
return error("Expecting 9-10 outputs. 1 clock output, an optional end-of-text output and 8 data outputs.");
else if (type==DataType.num && outputlen<2)
- return error("Expecting at least 2 outputs. 1 clock output and 1 or more data outputs.");
+ return error("Expecting at least 2 outputs. 1 clock output and 1 or more data outputs.");
}
if (chip.interfaceBlocks.length==0) return error("Expecting at least one interface block.");
-
+
for (InterfaceBlock i : chip.interfaceBlocks)
rc.addRCTypeReceiver(i.getLocation(), this);
@@ -82,11 +82,11 @@ else if (type==DataType.num && outputlen<2)
if (eot) len = 33;
else len = 32;
}
-
+
transmitter = new Transmitter();
transmitter.init(activator, channelArg, len, this);
}
-
+
return this;
}
@@ -105,14 +105,14 @@ public void type(String[] words, Player player) {
String typeString = "";
for (String a : words) typeString += a + " ";
-
+
if (type==DataType.ascii) {
int datapin = (outputlen==9?1:2);
for (int i=0; i0) {
List smodules = new ArrayList<>();
-
+
try {
for (String arg : args) {
if (arg.toLowerCase().startsWith("select(") && arg.toLowerCase().endsWith(")")) {
@@ -63,18 +64,18 @@ public Circuit init(String[] args) {
return error("Expecting at least " + (2+selectLength) + " inputs for select mode.");
} catch (NumberFormatException ne) {
return error("Bad select length argument: " + args[1]);
- }
+ }
selectMode = true;
- } else {
+ } else {
smodules.add(arg);
- }
+ }
}
-
+
if (smodules.isEmpty()) return error("Can't find any channel names.");
modules = new Transmitter[smodules.size()];
baseStartBit = new int[modules.length];
-
+
for (int i=0; i