From d345293526f17bc4018ad8952413f3457583a809 Mon Sep 17 00:00:00 2001 From: eisental Date: Fri, 1 May 2020 02:30:05 -0400 Subject: [PATCH 1/8] -Updated to work with 1.15 -Updated to use block states -Updates to new Wool Materials -Updated depreciated methods --- .../redstonechips/basiccircuits/pixel.java | 187 +++++++++++++++--- 1 file changed, 162 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/redstonechips/basiccircuits/pixel.java b/src/main/java/org/redstonechips/basiccircuits/pixel.java index f33c278..87486f7 100755 --- a/src/main/java/org/redstonechips/basiccircuits/pixel.java +++ b/src/main/java/org/redstonechips/basiccircuits/pixel.java @@ -3,9 +3,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.bukkit.DyeColor; import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; import org.redstonechips.RCPrefs; import org.redstonechips.circuit.Circuit; import org.redstonechips.chip.io.InterfaceBlock; @@ -14,8 +16,127 @@ import org.redstonechips.util.Locations; import org.redstonechips.wireless.Receiver; + public class pixel extends Circuit { - private boolean indexedColor = false; + + public byte ColorToNum(String colornametext) { + switch(colornametext) + { + case "WHITE": + return(0); + case "ORANGE": + return(1); + case "MAGENTA": + return(2); + case "LIGHT_BLUE": + return(3); + case "YELLOW": + return(4); + case "LIME": + return(5); + case "PINK": + return(6); + case "GRAY": + return(7); + case "LIGHT_GRAY": + return(8); + case "CYAN": + return(9); + case "PURPLE": + return(10); + case "BLUE": + return(11); + case "BROWN": + return(12); + case "GREEN": + return(13); + case "RED": + return(14); + case "BLACK": + return(15); + } + return 16; + } + public Material ColorSel(byte 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); + } + + public String ColortoString(byte colornum) { + switch(colornum) + { + case 0 : + return("White"); + case 1 : + return("Orange"); + case 2 : + return("Magenta"); + case 3 : + return("Light Blue"); + case 4 : + return("Yellow"); + case 5 : + return("Lime"); + case 6 : + return("Pink"); + case 7 : + return("Gray"); + case 8 : + return("Light Gray"); + case 9 : + return("Cyan"); + case 10 : + return("Purple"); + case 11 : + return("Blue"); + case 12 : + return("Brown"); + case 13 : + return("Green"); + case 14 : + return("Red"); + case 15 : + return("Black"); + } + return("White"); + } + + private boolean indexedColor = false; private byte[] colorIndex; private int distance = 3; private static final BlockFace[] faces = new BlockFace[] { BlockFace.UP, BlockFace.DOWN, BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST }; @@ -42,16 +163,15 @@ public Circuit init(String[] args) { String channelString = null; List colorList = new ArrayList<>(); - for (int i=0; i=colorIndex.length) { @@ -131,26 +251,43 @@ private void updatePixel(boolean[] bits) { return; } color = colorIndex[index]; - } else - color = (byte)val; - - if (chip.hasListeners()) debug("Setting pixel color to " + DyeColor.getByData(color)); + } else color = (byte)val; + + 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); @@ -181,7 +318,7 @@ public void receive(BooleanSubset 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; i Date: Fri, 1 May 2020 16:45:48 -0400 Subject: [PATCH 2/8] - Updated to work with 1.15.2 - Added support for new material names - Updated depreciated methods --- plugin.yml | 8 +++ .../redstonechips/basiccircuits/pixel.java | 1 + .../basiccircuits/screen/Screen.java | 69 +++++++++++++++++-- 3 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 plugin.yml diff --git a/plugin.yml b/plugin.yml new file mode 100644 index 0000000..ad05b75 --- /dev/null +++ b/plugin.yml @@ -0,0 +1,8 @@ +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 +depend: [RedstoneChips] diff --git a/src/main/java/org/redstonechips/basiccircuits/pixel.java b/src/main/java/org/redstonechips/basiccircuits/pixel.java index 87486f7..d45d959 100755 --- a/src/main/java/org/redstonechips/basiccircuits/pixel.java +++ b/src/main/java/org/redstonechips/basiccircuits/pixel.java @@ -18,6 +18,7 @@ public class pixel extends Circuit { + public byte ColorToNum(String colornametext) { switch(colornametext) diff --git a/src/main/java/org/redstonechips/basiccircuits/screen/Screen.java b/src/main/java/org/redstonechips/basiccircuits/screen/Screen.java index 1de342c..719caeb 100755 --- a/src/main/java/org/redstonechips/basiccircuits/screen/Screen.java +++ b/src/main/java/org/redstonechips/basiccircuits/screen/Screen.java @@ -4,6 +4,7 @@ import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.block.BlockState; /** * @@ -12,14 +13,65 @@ 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 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; @@ -76,6 +128,7 @@ public Location[][][] getPixelBlocks() { 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."); @@ -93,9 +146,11 @@ public void setPixel(int x, int y, int data, boolean checkMemory) { 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); + bState.setType(ColorSel(color)); + bState.update(true, true); break; } } @@ -377,4 +432,4 @@ private static Location[] findPixelBlocks(Location origin, int x, int y, Axis wi public static int calculateBitLength(int numOfValues) { return (int)Math.ceil(Math.log(numOfValues)/Math.log(2)); } -} +} \ No newline at end of file From 88c3731bb8a41a6d2eddc344a6c2e8f70cf94770 Mon Sep 17 00:00:00 2001 From: eisental Date: Fri, 1 May 2020 19:22:05 -0400 Subject: [PATCH 3/8] - Updated To work with 1.15.2 - added #instrument argument - players can #instrument to set with pins or place instrument with instrument name --- .../redstonechips/basiccircuits/synth.java | 194 +++++++++++++++--- 1 file changed, 163 insertions(+), 31 deletions(-) diff --git a/src/main/java/org/redstonechips/basiccircuits/synth.java b/src/main/java/org/redstonechips/basiccircuits/synth.java index fc31694..17fdb03 100755 --- a/src/main/java/org/redstonechips/basiccircuits/synth.java +++ b/src/main/java/org/redstonechips/basiccircuits/synth.java @@ -1,16 +1,26 @@ package org.redstonechips.basiccircuits; +//import java.lang.instrument.Instrumentation; +//import java.util.Collection; import java.util.regex.Pattern; import org.bukkit.Material; import org.bukkit.Note; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.block.NoteBlock; +//import org.bukkit.block.NoteBlock; +//import org.bukkit.block.data.type.NoteBlock; +//import org.bukkit.block.BlockState; import org.redstonechips.circuit.Circuit; +//import org.redstonechips.user.UserSession; import org.redstonechips.chip.io.InterfaceBlock; import org.redstonechips.util.BooleanArrays; import org.redstonechips.util.BooleanSubset; import org.redstonechips.wireless.Receiver; +import org.bukkit.entity.Player; +//import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.Bukkit; +import org.bukkit.Instrument; +//import org.bukkit.Server; /** * @@ -19,28 +29,106 @@ public class synth extends Circuit { private boolean indexedPitch = false; private byte[] pitchIndex; + boolean instrumentPins = false; + public static final Instrument[] instrument = new Instrument[] { + Instrument.BANJO, + Instrument.BASS_DRUM, + Instrument.BASS_GUITAR, + Instrument.BELL, + Instrument.BIT, + Instrument.CHIME, + Instrument.COW_BELL, + Instrument.DIDGERIDOO, + Instrument.FLUTE, + Instrument.GUITAR, + Instrument.IRON_XYLOPHONE, + Instrument.PIANO, + Instrument.PLING, + Instrument.SNARE_DRUM, + Instrument.STICKS, + Instrument.XYLOPHONE, + }; + public Instrument instruSel (String instruname){ + switch(instruname.toUpperCase()) { + case "BANJO": + return(instrument[0]); + case "BASS DRUM": + return(instrument[1]); + case "BASS GUITAR": + return(instrument[2]); + case "BELL": + return(instrument[3]); + case "BIT": + return(instrument[4]); + case "CHIME": + return(instrument[5]); + case "COW BELL": + return(instrument[6]); + case "DIDGERIDOO": + return(instrument[7]); + case "FLUTE": + return(instrument[8]); + case "GUITAR": + return(instrument[9]); + case "IRON XYLOPHONE": + return(instrument[10]); + case "PIANO": + return(instrument[11]); + case "PLING": + return(instrument[12]); + case "SNARE DRUM": + return(instrument[13]); + case "STICKS": + return(instrument[14]); + case "XYLOPHONE": + return(instrument[15]); + } + return(null); + } private Receiver receiver; + + Instrument inst = instrument[11]; // set piano as default instrument public static final Pattern MIDINOTE_PATTERN = Pattern.compile("[a-gA-G][#b]?\\-?[0-8]+"); - + + @Override public void input(boolean state, int inIdx) { int val; - if (inputlen==1) { - val = (int)BooleanArrays.toUnsignedInt(inputs, 0, 1); - } else if (inIdx==0 && state) { // clock pin - val = (int)BooleanArrays.toUnsignedInt(inputs, 1, inputlen-1); - } else return; - playNote(val); + if (instrumentPins==false && state) { + if (inputlen==1) { + val = (int)BooleanArrays.toUnsignedInt(inputs, 0, 1)-1; + System.out.println("(int)BooleanArrays.toUnsignedInt(inputs, 0, 1) = " + val); + } else if (inIdx==0) { // clock pin + val = (int)BooleanArrays.toUnsignedInt(inputs, 1, inputlen-1); + System.out.println("(int)BooleanArrays.toUnsignedInt(inputs, 1, inputlen-1) = " + val); + } + else return; + playNote2(val); + } + if (instrumentPins==true && state) { + if (inIdx==0) { // clock pin + val = (int)BooleanArrays.toUnsignedInt(inputs, 1, inputlen-5); + inst = instrument[((int)BooleanArrays.toUnsignedInt(inputs, inputlen-4, 4))]; + System.out.println("(int)BooleanArrays.toUnsignedInt(inputs, 1, inputlen-5) = " + val); + } + else return; + playNote2(val); + } } class SynthReceiver extends Receiver { @Override public void receive(BooleanSubset bits) { - playNote((int)bits.toUnsignedInt()); + System.out.println("bits.length() = " + bits.length()); + if (instrumentPins==false) playNote2((int)bits.toUnsignedInt()); + else { + inst = instrument[(int)bits.toUnsignedInt(bits.length()-4, 4)]; + playNote2((int)bits.toUnsignedInt(0, bits.length()-4)); + } } } @@ -48,33 +136,79 @@ public void receive(BooleanSubset bits) { public Circuit init(String[] args) { // needs to have 5 inputs 1 clock 4 data String channel = null; + boolean instrumentarg = false; - if (args.length>0) { + 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 (channel==null && indexedPitch && instrumentPins==true) { + if (inputlen<(5+Math.ceil(Math.log(pitchIndex.length)/Math.log(2)))) { + 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 (channel==null && inputlen>6 && !indexedPitch && instrumentPins==false) return error("Too many inputs. Direct mode requires 1 clock pin and no more than 5 data pins."); + else if (channel==null && inputlen>10 && !indexedPitch && instrumentPins==true) + return error("Too many inputs. Direct mode with instrument selection requires 1 clock pin and no more than 9 data pins."); + else if (channel==null && inputlen<6 && !indexedPitch && instrumentPins==true) + return error("Not enough inputs. Expecting 1 clock pin and at 4 instrument pins."); else if (channel==null && inputlen==0) 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 { @@ -88,7 +222,7 @@ else if (channel==null && inputlen==0) return this; } - private void playNote(int val) { + private void playNote2(int val) { byte pitch; if (indexedPitch) { @@ -124,12 +258,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)); + } } } From c74b0b0879756b9f00248545d8cfa340b777c5e5 Mon Sep 17 00:00:00 2001 From: eisental Date: Mon, 4 May 2020 02:24:09 -0400 Subject: [PATCH 4/8] Updated to work with Spigot 1.15.2 --- .../redstonechips/basiccircuits/bintobcd.java | 9 ++-- .../redstonechips/basiccircuits/display.java | 2 +- .../redstonechips/basiccircuits/synth.java | 43 +++++++++++-------- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/redstonechips/basiccircuits/bintobcd.java b/src/main/java/org/redstonechips/basiccircuits/bintobcd.java index 1da029a..222dacd 100755 --- a/src/main/java/org/redstonechips/basiccircuits/bintobcd.java +++ b/src/main/java/org/redstonechips/basiccircuits/bintobcd.java @@ -13,19 +13,16 @@ public class bintobcd extends Circuit { @Override public void input(boolean state, int inIdx) { String value; - value = Long.toString(BooleanArrays.toUnsignedInt(inputs, 0, inputlen)); - for (int i=0; i(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"); + if (chip.interfaceBlocks.length==0) return error("Expecting at least 1 interface block."); + if (inputlen!=0) { + + if (indexedPitch && instrumentPins==true) { + 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 (channel==null && inputlen>6 && !indexedPitch && instrumentPins==false) + else if (inputlen>6 && !indexedPitch && instrumentPins==false) return error("Too many inputs. Direct mode requires 1 clock pin and no more than 5 data pins."); - else if (channel==null && inputlen>10 && !indexedPitch && instrumentPins==true) + else if (inputlen>10 && !indexedPitch && instrumentPins==true) return error("Too many inputs. Direct mode with instrument selection requires 1 clock pin and no more than 9 data pins."); - else if (channel==null && inputlen<6 && !indexedPitch && instrumentPins==true) - return error("Not enough inputs. Expecting 1 clock pin and at 4 instrument pins."); - else if (channel==null && inputlen==0) - return error("Expecting at least 1 input pin."); + else if (inputlen<6 && !indexedPitch && instrumentPins==true) { + 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 && !instrumentPins) len = (int)Math.ceil(Math.log(pitchIndex.length)/Math.log(2)); @@ -216,9 +220,10 @@ else if (channel==null && inputlen==0) receiver.init(activator, channel, len, this); } catch (IllegalArgumentException e) { return error(e.getMessage()); - } + } + } - + return this; } From 55862c08f88be54348bb3177b5b13eaa9ed5f789 Mon Sep 17 00:00:00 2001 From: eisental Date: Sat, 23 May 2020 21:43:26 -0400 Subject: [PATCH 5/8] Updated debugging to display output --- .../java/org/redstonechips/basiccircuits/dregister.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/redstonechips/basiccircuits/dregister.java b/src/main/java/org/redstonechips/basiccircuits/dregister.java index 6665219..de0a302 100755 --- a/src/main/java/org/redstonechips/basiccircuits/dregister.java +++ b/src/main/java/org/redstonechips/basiccircuits/dregister.java @@ -7,6 +7,7 @@ import org.redstonechips.memory.Memory; import org.redstonechips.memory.Ram; import org.redstonechips.memory.RamListener; +import org.redstonechips.util.BooleanArrays; /** * @@ -27,11 +28,15 @@ public void input(boolean state, int inIdx) { if (inIdx==resetIdx && state) { if (ram != null) ram.write(ramaddr, clearRegister); //this will update the output + else this.writeBits(clearRegister); + if (chip.hasListeners()) { + debug("Cleared"); + } } else if (inputs[clockIdx]) { - if (ram != null) - ram.write(ramaddr, Arrays.copyOfRange(inputs, 2, inputlen)); //this will update the output + if (ram != null) ram.write(ramaddr, Arrays.copyOfRange(inputs, 2, inputlen)); //this will update the output else this.writeBits(inputs, 2, outputlen); + if (chip.hasListeners()) debug("Output: " + BooleanArrays.toPrettyString(outputs) + " (0x" + Long.toHexString(BooleanArrays.toUnsignedInt(outputs)) + ")"); } } From eca5759c84af25961077c6a60da37384b3751262 Mon Sep 17 00:00:00 2001 From: eisental Date: Sat, 23 May 2020 22:01:45 -0400 Subject: [PATCH 6/8] version update --- pom.xml | 2 +- .../redstonechips/basiccircuits/pixel.java | 32 +++++++++---------- src/main/resources/plugin.yml | 7 ---- 3 files changed, 17 insertions(+), 24 deletions(-) delete mode 100755 src/main/resources/plugin.yml diff --git a/pom.xml b/pom.xml index 2d3a027..73b2f7d 100755 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ BasicCircuits jar BasicCircuits - 1.0-SNAPSHOT + 1.1-SNAPSHOT http://maven.apache.org diff --git a/src/main/java/org/redstonechips/basiccircuits/pixel.java b/src/main/java/org/redstonechips/basiccircuits/pixel.java index d45d959..dd0b122 100755 --- a/src/main/java/org/redstonechips/basiccircuits/pixel.java +++ b/src/main/java/org/redstonechips/basiccircuits/pixel.java @@ -273,22 +273,22 @@ private static void findColorBlocksAround(Location origin, Location curLocation, for (BlockFace face : faces) { Location attached = Locations.getFace(curLocation, face); switch (attached.getBlock().getType()) { - 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: + 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); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml deleted file mode 100755 index 62b09e7..0000000 --- a/src/main/resources/plugin.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: BasicCircuits -main: org.redstonechips.basiccircuits.BasicCircuits -version: 0.97 -author: eisental -description: Basic circuit library for RedstoneChips integrated circuits plugin. -website: eisental.github.com/RedstoneChips -depend: [RedstoneChips] From 2601471b22246fe47c6fe045bb629c7cfee359bc Mon Sep 17 00:00:00 2001 From: RufiS Date: Thu, 14 Sep 2023 23:01:43 -0400 Subject: [PATCH 7/8] Updated for 1.21.1 --- pom.xml | 11 +- .../basiccircuits/BasicCircuits.java | 2 +- .../basiccircuits/SignWriter.java | 57 ++++----- .../redstonechips/basiccircuits/adder.java | 16 +-- .../org/redstonechips/basiccircuits/and.java | 2 +- .../redstonechips/basiccircuits/bintobcd.java | 2 +- .../redstonechips/basiccircuits/burst.java | 18 +-- .../redstonechips/basiccircuits/clock.java | 15 +-- .../basiccircuits/comparator.java | 14 +-- .../redstonechips/basiccircuits/counter.java | 3 +- .../redstonechips/basiccircuits/decoder.java | 5 +- .../basiccircuits/demultiplexer.java | 5 +- .../redstonechips/basiccircuits/display.java | 99 +++++++-------- .../redstonechips/basiccircuits/divider.java | 12 +- .../basiccircuits/dregister.java | 21 ++-- .../redstonechips/basiccircuits/encoder.java | 4 +- .../redstonechips/basiccircuits/flipflop.java | 4 +- .../basiccircuits/ipreceiver.java | 9 +- .../basiccircuits/iptransmitter.java | 9 +- .../basiccircuits/multiplier.java | 6 +- .../org/redstonechips/basiccircuits/nor.java | 2 +- .../basiccircuits/pisoregister.java | 3 +- .../redstonechips/basiccircuits/pixel.java | 69 +++++----- .../redstonechips/basiccircuits/print.java | 81 ++++++------ .../redstonechips/basiccircuits/pulse.java | 8 +- .../redstonechips/basiccircuits/ramwatch.java | 25 ++-- .../redstonechips/basiccircuits/random.java | 3 +- .../redstonechips/basiccircuits/receiver.java | 8 +- .../redstonechips/basiccircuits/repeater.java | 10 +- .../basiccircuits/ringcounter.java | 1 + .../redstonechips/basiccircuits/router.java | 5 +- .../basiccircuits/screen/Screen.java | 118 +++++++++--------- .../basiccircuits/segdriver.java | 4 +- .../basiccircuits/shiftregister.java | 17 +-- .../org/redstonechips/basiccircuits/sram.java | 55 ++++---- .../redstonechips/basiccircuits/srnor.java | 5 +- .../redstonechips/basiccircuits/synth.java | 85 ++++++------- .../redstonechips/basiccircuits/terminal.java | 46 +++---- .../basiccircuits/transmitter.java | 35 +++--- .../org/redstonechips/basiccircuits/xnor.java | 2 +- 40 files changed, 464 insertions(+), 432 deletions(-) diff --git a/pom.xml b/pom.xml index 73b2f7d..8a61cec 100755 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ BasicCircuits jar BasicCircuits - 1.1-SNAPSHOT + 1.0-SNAPSHOT http://maven.apache.org @@ -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 4ca4106..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{}."); } @@ -189,7 +190,7 @@ public Circuit init(String[] args) { return error("Unknown color name: " + args[i]); } } - + } // color index @@ -224,15 +225,15 @@ public Circuit init(String[] args) { for (InterfaceBlock i : chip.interfaceBlocks) { findColorBlocksAround(i.getLocation(), i.getLocation(), blockList, distance, 0); } - + colorBlocks = blockList.toArray(new Location[0]); - + // add color blocks to chip structure. blockList.addAll(Arrays.asList(chip.structure)); chip.structure = blockList.toArray(new Location[0]); - - + + return this; } @@ -253,14 +254,14 @@ private void updatePixel(boolean[] bits) { } color = colorIndex[index]; } else color = (byte)val; - + if (chip.hasListeners()) debug("Setting pixel color to " + ColortoString(color)); for (Location l : colorBlocks) { Block b = l.getBlock(); BlockState bState = b.getState(); bState.setType(ColorSel(color)); - bState.update(true, false); + bState.update(true, false); } } @@ -291,7 +292,7 @@ private static void findColorBlocksAround(Location origin, Location curLocation, 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); } } } @@ -312,11 +313,11 @@ 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, bits.length()); @@ -327,6 +328,6 @@ public void receive(BooleanSubset bits) { valbits[0] = false; } updatePixel(valbits); - } + } } } diff --git a/src/main/java/org/redstonechips/basiccircuits/print.java b/src/main/java/org/redstonechips/basiccircuits/print.java index f083317..1a69a76 100755 --- a/src/main/java/org/redstonechips/basiccircuits/print.java +++ b/src/main/java/org/redstonechips/basiccircuits/print.java @@ -1,14 +1,19 @@ package org.redstonechips.basiccircuits; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.redstonechips.RCTypeReceiver; import org.redstonechips.basiccircuits.SignWriter.DisplayMode; import org.redstonechips.basiccircuits.SignWriter.Type; -import org.redstonechips.circuit.Circuit; import org.redstonechips.chip.io.IOBlock; +import org.redstonechips.circuit.Circuit; import org.redstonechips.util.BooleanSubset; import org.redstonechips.wireless.Receiver; @@ -24,53 +29,53 @@ public class print extends Circuit implements RCTypeReceiver { private int dataPin = 1; private SignWriter writer; - + @Override public void input(boolean state, int inIdx) { if (inIdx==clockPin) { if (state) write(inputs, dataPin, inputlen-dataPin); - - } else if (inIdx==clearPin && (writer.getDisplayMode()==DisplayMode.scroll || + + } else if (inIdx==clearPin && (writer.getDisplayMode()==DisplayMode.scroll || writer.getDisplayMode()==DisplayMode.add)) { if (state) clear(); - + } else if (inIdx==scrollPin && writer.getDisplayMode()==DisplayMode.scroll) { if (state) writer.scroll(1); - + } else if (inputs[clockPin]) write(inputs, dataPin, inputlen-dataPin); - + } - + class WriteReceiver extends Receiver { - + @Override public void receive(BooleanSubset bits) { write(bits.copy(), 0, getLength()); } } - + class ClearReceiver extends Receiver { @Override public void receive(BooleanSubset bits) { if (bits.get(0)) writer.clear(); - } + } } - + class ScrollReceiver extends Receiver { @Override public void receive(BooleanSubset bits) { if (bits.get(0)) writer.scroll(1); } - + } - + private void clear() { if (chip.hasListeners()) debug("Clearing signs."); writer.clear(); } - + private void write(boolean[] bits, int start, int length) { writer.write(bits, start, length); if (chip.hasListeners()) { @@ -82,7 +87,7 @@ private void write(boolean[] bits, int start, int length) { debug(lines[3]); } } - + @Override public void type(String[] words, Player player) { if (words.length==0) return; @@ -92,18 +97,18 @@ public void type(String[] words, Player player) { text += word + " "; writer.write(text.substring(0, text.length()-1)); } - + @Override - public Circuit init(String[] args) { + public Circuit init(String[] args) { String channel = null; Type type = Type.num; DisplayMode display = DisplayMode.replace; - - if (args.length>0) { + + 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 719caeb..5ebf312 100755 --- a/src/main/java/org/redstonechips/basiccircuits/screen/Screen.java +++ b/src/main/java/org/redstonechips/basiccircuits/screen/Screen.java @@ -11,7 +11,7 @@ * @author Tal Eisenberg */ public class Screen { - + public static final Material[] materials = new Material[] { Material.WHITE_WOOL, Material.ORANGE_WOOL, @@ -31,9 +31,9 @@ public class Screen { Material.BLACK_WOOL, }; - public enum Axis {X,Y,Z}; - - public Material ColorSel(int colornum) { + public enum Axis {X,Y,Z} + + public Material ColorSel(int colornum) { switch(colornum) { case 0 : @@ -67,24 +67,24 @@ public Material ColorSel(int colornum) { case 14 : return(Material.RED_WOOL); case 15 : - return(Material.BLACK_WOOL); - } - + 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)]; @@ -94,41 +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."); @@ -140,7 +140,7 @@ 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) { @@ -151,42 +151,42 @@ public void setPixel(int x, int y, int data, boolean checkMemory) { if (b.getType()==m) { bState.setType(ColorSel(color)); bState.update(true, true); - break; + 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) { + + if (args.length>0) { if (args[args.length-1].startsWith("#")) { // channel arg channel = args[args.length-1].substring(1); } for (byte i=0; i=(channel!=null?2:1)) { indexedPitch = true; pitchIndex = new byte[(channel==null?args.length:args.length-1)]; @@ -164,8 +165,8 @@ public Circuit init(String[] args) { } catch (IllegalArgumentException ie) { return error(ie.getMessage()); } - } - } + } + } } else { if (args.length>=(channel!=null?3:2)) { @@ -177,29 +178,29 @@ public Circuit init(String[] args) { } catch (IllegalArgumentException ie) { return error(ie.getMessage()); } - } - } + } + } } } - + if (chip.interfaceBlocks.length==0) return error("Expecting at least 1 interface block."); - if (inputlen!=0) { - - if (indexedPitch && instrumentPins==true) { + 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"); + 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"); + 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==false) + + 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 (inputlen>10 && !indexedPitch && instrumentPins==true) + 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==true) { + 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."); } @@ -214,16 +215,16 @@ else if (inputlen<6 && !indexedPitch && instrumentPins==true) { 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; } 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 Date: Fri, 22 Sep 2023 18:46:14 -0400 Subject: [PATCH 8/8] Fixed Broken Synth --- src/main/java/org/redstonechips/basiccircuits/synth.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/redstonechips/basiccircuits/synth.java b/src/main/java/org/redstonechips/basiccircuits/synth.java index c3e3fa1..5c17ccd 100755 --- a/src/main/java/org/redstonechips/basiccircuits/synth.java +++ b/src/main/java/org/redstonechips/basiccircuits/synth.java @@ -4,12 +4,13 @@ //import java.util.Collection; import java.util.regex.Pattern; -import javax.sound.midi.Instrument; +//import javax.sound.midi.Instrument; //import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Note; +import org.bukkit.Instrument; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player;