From 2e83b2796b42ac8c9330eded827462ea099111a0 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Thu, 11 Jul 2019 22:51:03 +0800 Subject: [PATCH 01/82] init(1.12.2) --- .idea/codeStyles/Project.xml | 9 + .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/encodings.xml | 4 + .idea/modules.xml | 1 + jars/raspberryjuice-1.1.1.jar | Bin 15356 -> 0 bytes jars/raspberryjuice-1.1.jar | Bin 15342 -> 0 bytes jars/raspberryjuice-1.10.1.jar | Bin 23665 -> 0 bytes jars/raspberryjuice-1.10.jar | Bin 20380 -> 0 bytes jars/raspberryjuice-1.11.jar | Bin 26053 -> 0 bytes jars/raspberryjuice-1.2.jar | Bin 16081 -> 0 bytes jars/raspberryjuice-1.3.jar | Bin 15175 -> 0 bytes jars/raspberryjuice-1.4.1.jar | Bin 16113 -> 0 bytes jars/raspberryjuice-1.4.2.jar | Bin 16333 -> 0 bytes jars/raspberryjuice-1.4.jar | Bin 15524 -> 0 bytes jars/raspberryjuice-1.5.jar | Bin 16944 -> 0 bytes jars/raspberryjuice-1.6.jar | Bin 17408 -> 0 bytes jars/raspberryjuice-1.7.jar | Bin 18048 -> 0 bytes jars/raspberryjuice-1.8.jar | Bin 18097 -> 0 bytes jars/raspberryjuice-1.9.1.jar | Bin 22481 -> 0 bytes jars/raspberryjuice-1.9.jar | Bin 22436 -> 0 bytes src/main/java/config.yml | 8 + .../raspberryjuice/RaspberryJuicePlugin.java | 2 +- src/main/java/plugin.yml | 7 + .../mcpi/api/java/HOW_TO_RUN_DEMOS.txt | 8 - src/main/resources/mcpi/api/java/McPi.jar | Bin 26279 -> 0 bytes .../resources/mcpi/api/java/McPiDemos.jar | Bin 14413 -> 0 bytes .../mcpi/api/java/doc/allclasses-frame.html | 54 - .../mcpi/api/java/doc/allclasses-noframe.html | 54 - .../mcpi/api/java/doc/constant-values.html | 79 - .../mcpi/api/java/doc/deprecated-list.html | 45 - .../resources/mcpi/api/java/doc/index.html | 40 - .../mcpi/api/java/doc/overview-frame.html | 47 - .../mcpi/api/java/doc/overview-summary.html | 63 - .../resources/mcpi/api/java/doc/package-list | 3 - .../resources/mcpi/api/java/doc/pi/Block.html | 1534 ----------------- .../resources/mcpi/api/java/doc/pi/Color.html | 437 ----- .../resources/mcpi/api/java/doc/pi/Item.html | 1129 ------------ .../api/java/doc/pi/Minecraft.Camera.html | 241 --- .../api/java/doc/pi/Minecraft.Entities.html | 205 --- .../api/java/doc/pi/Minecraft.Events.html | 169 -- .../api/java/doc/pi/Minecraft.Player.html | 230 --- .../mcpi/api/java/doc/pi/Minecraft.html | 657 ------- .../mcpi/api/java/doc/pi/Vec.Unit.html | 229 --- .../resources/mcpi/api/java/doc/pi/Vec.html | 454 ----- .../mcpi/api/java/doc/pi/VecFloat.html | 396 ----- .../mcpi/api/java/doc/pi/class-use/Block.html | 784 --------- .../mcpi/api/java/doc/pi/class-use/Color.html | 104 -- .../mcpi/api/java/doc/pi/class-use/Item.html | 495 ------ .../doc/pi/class-use/Minecraft.Camera.html | 79 - .../doc/pi/class-use/Minecraft.Entities.html | 79 - .../doc/pi/class-use/Minecraft.Events.html | 79 - .../doc/pi/class-use/Minecraft.Player.html | 79 - .../api/java/doc/pi/class-use/Minecraft.html | 128 -- .../api/java/doc/pi/class-use/Vec.Unit.html | 186 -- .../mcpi/api/java/doc/pi/class-use/Vec.html | 343 ---- .../api/java/doc/pi/class-use/VecFloat.html | 209 --- .../api/java/doc/pi/event/BlockEvent.html | 150 -- .../api/java/doc/pi/event/BlockHitEvent.html | 179 -- .../doc/pi/event/class-use/BlockEvent.html | 79 - .../doc/pi/event/class-use/BlockHitEvent.html | 79 - .../api/java/doc/pi/event/package-frame.html | 35 - .../java/doc/pi/event/package-summary.html | 75 - .../api/java/doc/pi/event/package-use.html | 88 - .../mcpi/api/java/doc/pi/package-frame.html | 54 - .../mcpi/api/java/doc/pi/package-summary.html | 105 -- .../mcpi/api/java/doc/pi/package-use.html | 191 -- .../mcpi/api/java/doc/pi/tool/Text.html | 203 --- .../mcpi/api/java/doc/pi/tool/Tools.html | 165 -- .../mcpi/api/java/doc/pi/tool/Turtle.html | 391 ----- .../api/java/doc/pi/tool/class-use/Text.html | 121 -- .../api/java/doc/pi/tool/class-use/Tools.html | 79 - .../java/doc/pi/tool/class-use/Turtle.html | 193 --- .../api/java/doc/pi/tool/package-frame.html | 37 - .../api/java/doc/pi/tool/package-summary.html | 79 - .../api/java/doc/pi/tool/package-use.html | 94 - .../mcpi/api/java/doc/resources/inherit.gif | Bin 57 -> 0 bytes .../mcpi/api/java/doc/stylesheet.css | 602 ------- src/main/resources/mcpi/api/java/lib/McPi.jar | Bin 26279 -> 0 bytes .../mcpi/api/java/src-api/pi/Block.java | 140 -- .../mcpi/api/java/src-api/pi/Color.java | 19 - .../mcpi/api/java/src-api/pi/Connection.java | 124 -- .../api/java/src-api/pi/EventFactory.java | 35 - .../mcpi/api/java/src-api/pi/Item.java | 96 -- .../mcpi/api/java/src-api/pi/Log.java | 22 - .../mcpi/api/java/src-api/pi/Minecraft.java | 297 ---- .../mcpi/api/java/src-api/pi/Vec.java | 111 -- .../mcpi/api/java/src-api/pi/VecFloat.java | 100 -- .../src-api/pi/event/BlockAddedEvent.java | 14 - .../api/java/src-api/pi/event/BlockEvent.java | 16 - .../java/src-api/pi/event/BlockHitEvent.java | 19 - .../src-api/pi/event/BlockRemovedEvent.java | 14 - .../src-api/pi/event/ChatMessageEvent.java | 9 - .../java/src-api/pi/event/EntityEvent.java | 9 - .../src-api/pi/event/PlayerConnectEvent.java | 14 - .../java/src-api/pi/event/PlayerEvent.java | 9 - .../api/java/src-api/pi/event/package.html | 3 - .../mcpi/api/java/src-api/pi/package.html | 3 - .../mcpi/api/java/src-api/pi/tool/Csg.java | 10 - .../mcpi/api/java/src-api/pi/tool/Text.java | 94 - .../mcpi/api/java/src-api/pi/tool/Tools.java | 18 - .../mcpi/api/java/src-api/pi/tool/Turtle.java | 124 -- .../api/java/src-api/pi/tool/package.html | 3 - .../src-demos/pi/demo/ChristmasTreeDemo.java | 64 - .../java/src-demos/pi/demo/DigitalClock.java | 30 - .../api/java/src-demos/pi/demo/LoopDemo.java | 21 - .../java/src-demos/pi/demo/LowLevelDemo.java | 41 - .../api/java/src-demos/pi/demo/TextDemo.java | 27 - .../java/src-demos/pi/demo/TurtleDemo.java | 52 - .../api/java/src-demos/pi/demo/Usage.java | 11 - .../java/src-demos/pi/demo/sokoban/Level.java | 54 - .../src-demos/pi/demo/sokoban/LevelTile.java | 24 - .../java/src-demos/pi/demo/sokoban/Level_Data | 49 - .../src-demos/pi/demo/sokoban/Position.java | 47 - .../src-demos/pi/demo/sokoban/Sokoban.java | 128 -- .../raspberryjuice/SessionStepDefs.java | 100 -- .../raspberryjuice/remotesession.feature | 44 - 116 files changed, 35 insertions(+), 13634 deletions(-) create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/encodings.xml delete mode 100644 jars/raspberryjuice-1.1.1.jar delete mode 100644 jars/raspberryjuice-1.1.jar delete mode 100644 jars/raspberryjuice-1.10.1.jar delete mode 100644 jars/raspberryjuice-1.10.jar delete mode 100644 jars/raspberryjuice-1.11.jar delete mode 100644 jars/raspberryjuice-1.2.jar delete mode 100644 jars/raspberryjuice-1.3.jar delete mode 100644 jars/raspberryjuice-1.4.1.jar delete mode 100644 jars/raspberryjuice-1.4.2.jar delete mode 100644 jars/raspberryjuice-1.4.jar delete mode 100644 jars/raspberryjuice-1.5.jar delete mode 100644 jars/raspberryjuice-1.6.jar delete mode 100644 jars/raspberryjuice-1.7.jar delete mode 100644 jars/raspberryjuice-1.8.jar delete mode 100644 jars/raspberryjuice-1.9.1.jar delete mode 100644 jars/raspberryjuice-1.9.jar create mode 100644 src/main/java/config.yml create mode 100644 src/main/java/plugin.yml delete mode 100644 src/main/resources/mcpi/api/java/HOW_TO_RUN_DEMOS.txt delete mode 100644 src/main/resources/mcpi/api/java/McPi.jar delete mode 100644 src/main/resources/mcpi/api/java/McPiDemos.jar delete mode 100644 src/main/resources/mcpi/api/java/doc/allclasses-frame.html delete mode 100644 src/main/resources/mcpi/api/java/doc/allclasses-noframe.html delete mode 100644 src/main/resources/mcpi/api/java/doc/constant-values.html delete mode 100644 src/main/resources/mcpi/api/java/doc/deprecated-list.html delete mode 100644 src/main/resources/mcpi/api/java/doc/index.html delete mode 100644 src/main/resources/mcpi/api/java/doc/overview-frame.html delete mode 100644 src/main/resources/mcpi/api/java/doc/overview-summary.html delete mode 100644 src/main/resources/mcpi/api/java/doc/package-list delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/Block.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/Color.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/Item.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/Minecraft.Camera.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/Minecraft.Entities.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/Minecraft.Events.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/Minecraft.Player.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/Minecraft.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/Vec.Unit.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/Vec.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/VecFloat.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/Block.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/Color.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/Item.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Camera.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Entities.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Events.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Player.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/Vec.Unit.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/Vec.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/class-use/VecFloat.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/event/BlockEvent.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/event/BlockHitEvent.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/event/class-use/BlockEvent.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/event/class-use/BlockHitEvent.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/event/package-frame.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/event/package-summary.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/event/package-use.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/package-frame.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/package-summary.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/package-use.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/tool/Text.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/tool/Tools.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/tool/Turtle.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Text.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Tools.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Turtle.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/tool/package-frame.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/tool/package-summary.html delete mode 100644 src/main/resources/mcpi/api/java/doc/pi/tool/package-use.html delete mode 100644 src/main/resources/mcpi/api/java/doc/resources/inherit.gif delete mode 100644 src/main/resources/mcpi/api/java/doc/stylesheet.css delete mode 100644 src/main/resources/mcpi/api/java/lib/McPi.jar delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/Block.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/Color.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/Connection.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/EventFactory.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/Item.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/Log.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/Minecraft.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/Vec.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/VecFloat.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/event/BlockAddedEvent.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/event/BlockEvent.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/event/BlockHitEvent.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/event/BlockRemovedEvent.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/event/ChatMessageEvent.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/event/EntityEvent.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/event/PlayerConnectEvent.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/event/PlayerEvent.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/event/package.html delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/package.html delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/tool/Csg.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/tool/Text.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/tool/Tools.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/tool/Turtle.java delete mode 100644 src/main/resources/mcpi/api/java/src-api/pi/tool/package.html delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/ChristmasTreeDemo.java delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/DigitalClock.java delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/LoopDemo.java delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/LowLevelDemo.java delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/TextDemo.java delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/TurtleDemo.java delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/Usage.java delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Level.java delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/LevelTile.java delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Level_Data delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Position.java delete mode 100644 src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Sokoban.java delete mode 100644 src/test/java/net/zhuoweizhang/raspberryjuice/SessionStepDefs.java delete mode 100644 src/test/resources/net/zhuoweizhang/raspberryjuice/remotesession.feature diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..84701a3e --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..79ee123c --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 00000000..15a15b21 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 0bb1b7a2..d0670cd6 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,6 +2,7 @@ + diff --git a/jars/raspberryjuice-1.1.1.jar b/jars/raspberryjuice-1.1.1.jar deleted file mode 100644 index af008161b48bcba0b974c6adc19613406e8d0cf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15356 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 Mzur0i#^VJ0e>Se<$^ZZW diff --git a/jars/raspberryjuice-1.1.jar b/jars/raspberryjuice-1.1.jar deleted file mode 100644 index 3a82f9a0f9937df715a918023128315b6d1e43ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15342 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

-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 diff --git a/jars/raspberryjuice-1.10.1.jar b/jars/raspberryjuice-1.10.1.jar deleted file mode 100644 index ff19ccb98d4b298e28d14d778b22ed2598bd2db3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23665 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 z 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 bnj%j;F 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 diff --git a/jars/raspberryjuice-1.11.jar b/jars/raspberryjuice-1.11.jar deleted file mode 100644 index fd9eae35a2153c50a9db65b360e58379c84eb3da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26053 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
H3k`R^>kzFWer18c#pn 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 diff --git a/jars/raspberryjuice-1.2.jar b/jars/raspberryjuice-1.2.jar deleted file mode 100644 index e04aab83493d1e532c909d332f0168b673cc73bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16081 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 J*?#`_{{TBlnL7Xg diff --git a/jars/raspberryjuice-1.3.jar b/jars/raspberryjuice-1.3.jar deleted file mode 100644 index 77c9e5dac40033b407f90c982622518956ae9ac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15175 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 diff --git a/jars/raspberryjuice-1.4.jar b/jars/raspberryjuice-1.4.jar deleted file mode 100644 index 5529bc53e448cff82ccb2503e71ed8a5bf3a5720..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15524 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 diff --git a/jars/raspberryjuice-1.6.jar b/jars/raspberryjuice-1.6.jar deleted file mode 100644 index 75bc13a82ab255d545520fc1d1f2562e24c34b5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17408 zcmbWf1#le8wk0ZynVFfHnVFeoF=Igm3fhE_h|nJ6hv7L3cB78^b+sSP&j`M<^K&} z!sRaUxA8%E|9o*U2QqnDxjKF`xAwF$cCch}Hg<6`F?V+MuyM6EHD^*YcXl&(mbZ2R znmd>~t6Mpn8=Enj+8MjJRH^?~#nV9lWR%f?j)KX1FUBsPC!ZbGtkl&_CQaUNo~4)U zGiCwJKa9{OD-kw)Zw|VE~)<-OU8*QVa(UUI(|(p;-z07~GRn zpoiD6DwH)6JXC3yJ>Q;W7W(Jroh_(|*bkSI?NX2KUe|NipGk4e6E+>?GjoO~3Nugp zaS()uzcZt>LUc=^3o-qGM~W8^zGgoRe;Ar}{Q!PDS|yFwhc0Ig0f$s5WFe0q#iHFp z#%7rVQ>z-5zu!k_YB$QqqXBb-h0l_;fJMVrAC01f2bTTXpxo|D66Q?+=x~yH$OBn> zR7$C(x5d9m(5e%-8-DK0%j)GYU2ze9k80A)ZqVH2eTYQ!wAs<5JYZnrm9thnXHTK* zQ>|F7&ahj5(xx5J$of9)y?1nd4ByG*^wNZp6c?zyE+0Hu!W@N!enbRI|66G(R}Hw` zs{rO=iCwp#pV11@Y#RD(W55XBJp;4g}*0 z?D4FKw+X*Yb%J*#WMx2+0v7dk*=Q*q3m6nV0(j@(^{XDqJ zgTU%3$(QtkyHHiiYOg!MOKKpmYGlCJL;^wFGwgIVmf&em_q0{jbqEa2+??-ZIY`>g zIL2TjHXRnj`TWxo_NN zp$$An)WDdXbxjRbESbl?C|vs?%J}k>c&CSC*fH=tBoWvgHytXBDn9~Bu643b&MZBp zl~W?au&F7LnDw&+d#wP+AO}MwY1%^KmmrBlJIv{J`wSG88Lf>q28wrHDu$VPau22V zH}&+dFPT5yXyA8YAz8%4t6dQo)xf$`17NyTNh(0(u=i7qBUC7tMD$#d?#`wux0|TL z{3M)no$qNZR+6&>2OlT}*9X!#e+T*&+3zP_h@wR;D0t^7b-6D)*SCk=Eu-{1kUerh z=yV%k9^}kBM+m4D%b(&qTER-S;*nJyh#L?)fJ#`nCY!fPU>;i=_EY3c3>3!^S-GaS zjdw}ArOEL<5qiF$Vp!;!bsO&4R@Q}S4(RLa&>D{TWMnl zGdpwVf9H=Pbv-3C5%kYu1_RyZT4K^4)T2XR{UyZF^-x6OGXf!@kvbX7MX^%s8#*NV z42=eD_k%va{RwD87olNqayiJ=Qztzkbg20o}^bIf@ zJ4MC{GARU7uPqNA1Y-glae+J> zN2}!B@~C?lyBG{(J1|S*Oyzu|QG3(E=66e2)f&&aF0DKpLtr{l`pPgeVo9ZioA(oz zI>HZLND(AYLQ2kY+PckTb4257+;5_zQRjGvWdcBMAbj7D-L~utb?9;auVLtQJ@?_5ScY-f@T&aeQ-ZAxZ-OJ(8p;5wVm|-lu>JA^ZFp z72YmPhE?*G4|2(@ykF>oawJN38@4d1C&&v3Lm2l+{JNCm1u_;+H!1&$pZ}>I^#>7) z^!Nn)Tf8(j$sX=N$Bqzq@yt*(D&#df$puP3TYK8fTnN_bklf%kY>>M`%{Ae^`@!uQ zy%Cm2$d7rMKdyfOz6a<6?@;}S1|IYvM|0%crS3YUO zxT`N=d^%E&$x+5JqzMQ2)@CI4`IpLri=mFjr-LU*xY36cS42Csl)~#Moi*uWK@~PI~9i10T=QG(^k78&e z$2@qnP(ecWH-D36@cM?^0e>awTR3_PG0r+VX;5tL1-92}uWKQ1^!O;v&R)xCfeWTk zY#(~zw0IUNNd^e8{xU>w97eXSxbO&r?iTt+KcF}$A5gT`@elw{A~L{fYD~7THz4M@ z8U2gZ)Zim&j;@y0iPx16!v{9sCDt2u--2HeD9$M$)?9etFaRU>P=c{wj3{Z}uwYys z-~Ltr@KPJZP6_1^QX^TXw?p#E7KkVkM2FEc_KNYZ$ajtsb}(&Rp%{mB}w;co*W7`%*w z@?!_21Pd%d)wOQ}H*66NWAn1FoHiVKsO`PPv<1 z@*}vF=3npA$20;kFp|>=5z3ClC*vcIwoqczwjbWDCiNdNegw3J<+E(WNV3}+>ATM) zM8rO<3NIi>?$qOGrB9zXni^NkX#HH-wFJiU<&j{rg_?J_&IMx3M}HwuW7ZJcz(Fq_ zW7Qa-q>M`-j(dBV8-q1nN9gKeq0GelbsDdDUO0~NInLk!4hYdV!nLpF=Bk01zpXcW zp>2^){#sA~-5y$1iGRQe*lnK+swlj#fUq#ns3bEkqrR327FaDlXktaa-ESt@BCj=& zg6@jF1Dop>)L}o?G?R1>u3+z2Su09SS1XELO`77*PRN$Q{#Y#|nGE!~o0Fh7iI7g6FuNjH;ObX4h z%R)629bt?R-mo8}A5WBAEilFQA|T_QBhE87_iwnM>wj?14#i88L*sPa49`5pX9eKn zveS#<0980^%n~O^Nl)~gDneJ_CWR2nVmF*RdKc5ys2(CYCM=|nn988D8YNy8X>%V_ zWV=L0@NOs{d8`AKd)6|;r4KRIMi0seu6Uc`i|?)78+wmUP#>c@`tt%X2hL)op|&Dg z#<_hndtFa5Bx*2&>qq&n84<3~wY@3V&)vDU2Vf{9W_j#Fcqd5`DW=ZOS@*%}f8=a} zB_5p*$0Sz*L_ag@yA%_kD{s}*-=Sji%;eGuo3bva_pMp!v_(>tP%*?Jhcgw*`$wrp z{8{sB2ZD}MocQIN5mGRkG+Zs>r*cOX2;|pdBgTHx;!B5)h3DDC%;SrpFGLxC!&(FW#THO0PyB?W*Al(kT1NiW1}wTc(W=d?GLyY~X@@ z4lmoEgZ_%CN~BGv5Vg6}A;=x@L2O-Y2Tg#kjznT!9UuRrHu8JZoF2z#5Cz8^urgr8IJ)-?Vop0+tn)EB*d48=5+OT&3 zHx^BCIlS^9>KXL}&dp^5dLn+5cK_GLH|O_94F`t)g6GIkrUqs6nMPj1fdez-lvqk` zx5P@{1Ep%TKD6hIP%0ilh0UcK^zLavlXNfa!;>OzGn3hCgn;!1+#g%+xI6PV_L~w+ z2ARxg$K)zB03WT9r)!_}x}ESA8tAMaYw36Djmj4~6a*(*%A}YF1)Yu1?usW4u!`Gc z+$Pya1OXcPh7@#AOcV0O8e2H%8}y9za&YhZBTUzFFg-hm9}~m_+b+h<8Ur=hkyO*5 z=cs$qH8^y=j@V39m9zSHtvC3-bY9}(p6B0qedC14^;$AAxH$^*jlGjh0^ec$=B_Q5 zOVFBu?-+ij$O$5-8pqc|G)|-~i$;`r?_wiDH%zgW!?W=;4NY$Kz%=G#a*YG-2O>9} z88(nzQ?UOL5)##abv;s zaYRJop(-&ro}m&uppTJFt` zwVnC5<7%1~DwR>`^PFt+NBYaOFk=j|gY*hX7BO3hqz02Ik;j=Ul<+TlV$~9!9vhh; z*>23F-`R6`N`wbuiIxZTOAs2(Hjm81x#(2O;(sqzNz%^`nbZZBr3)TiX=p@}Nhqep znMmVSsbXp5uNz=#o{%PWm~!R#e{Y zrC6zB^+loRJb7irJWKKPVm?)jj9M!t%H+6QaD%*rxIKVU2_;Q)I&o$8pZPkKmP4_C zW;GeA=J5y2?1io2dnUQEeGa;URWrNUv@dmd`KmhdU3c89xPGy^keK7 z(Uc}6YF}HA{JF-UJLT&s@P*U_ma$p(8wC}TSg=jM$aP2k_865&f3FIf3BkW|CeHlg zSmL~xh;?=U$}Xrd0x#GhV-TJ0EfnWye@OCM7OCKn`51q=b3oe(JBnx!;;G;L6CnZ+mrKwY3VnBP(52$Xv9ft?CQ(n&cX#NiAbL%$;a;MQgf6lp@n3-Ae7>W~6t3u`PFh*cerDz3{6NaFs%0AUji0b)Vk_J9C@YM;>rSaSD3z5$vGof2IJ>p`5T< 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 G^8W#bHQ3Am diff --git a/jars/raspberryjuice-1.7.jar b/jars/raspberryjuice-1.7.jar deleted file mode 100644 index 3ee78b7ed3d47046913e988e52aa2ebfb7b327ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18048 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 XfHx~}$2tQ8ClHze7Y(KYWf>R%V6~SQ diff --git a/jars/raspberryjuice-1.9.1.jar b/jars/raspberryjuice-1.9.1.jar deleted file mode 100644 index d5ced17ed4a2edfe6e787eafb5b144c990d27dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22481 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 diff --git a/jars/raspberryjuice-1.9.jar b/jars/raspberryjuice-1.9.jar deleted file mode 100644 index b2b1b854b99acc398529e29ac462cfee6a6d2208..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22436 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 OU!>?i6aus`-~JD*Oi=6q diff --git a/src/main/java/config.yml b/src/main/java/config.yml new file mode 100644 index 00000000..46a97e03 --- /dev/null +++ b/src/main/java/config.yml @@ -0,0 +1,8 @@ +# default config.yml +port: 4711 + +# Determine whether locations are RELATIVE to the spawn point (default like pi) or ABSOLUTE +location: RELATIVE + +# Determine whether hit events are triggered by LEFT clicks, RIGHT clicks or BOTH +hitclick: RIGHT \ No newline at end of file diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java index 4b855bdb..34af9ed6 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java @@ -18,7 +18,7 @@ public class RaspberryJuicePlugin extends JavaPlugin implements Listener { public static final Set blockBreakDetectionTools = EnumSet.of( Material.DIAMOND_SWORD, - Material.GOLD_SWORD, + Material.GOLD_SWORD, Material.IRON_SWORD, Material.STONE_SWORD, Material.WOOD_SWORD); diff --git a/src/main/java/plugin.yml b/src/main/java/plugin.yml new file mode 100644 index 00000000..4271bc56 --- /dev/null +++ b/src/main/java/plugin.yml @@ -0,0 +1,7 @@ +author: Zhuowei +database: false +description: Implementation of the Minecraft PI modding API +main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin +name: RaspberryJuice +startup: postworld +version: '1.11' diff --git a/src/main/resources/mcpi/api/java/HOW_TO_RUN_DEMOS.txt b/src/main/resources/mcpi/api/java/HOW_TO_RUN_DEMOS.txt deleted file mode 100644 index 0cf53f03..00000000 --- a/src/main/resources/mcpi/api/java/HOW_TO_RUN_DEMOS.txt +++ /dev/null @@ -1,8 +0,0 @@ -Use one of the lines below to run a demo. [host] is an optional ip-address. - -java -cp McPiDemos.jar pi.demo.LoopDemo [host] -java -cp McPiDemos.jar pi.demo.LowLevelDemo [host] -java -cp McPiDemos.jar pi.demo.TextDemo [host] -java -cp McPiDemos.jar pi.demo.TurtleDemo [host] - -java -cp McPiDemos.jar pi.demo.sokoban.Sokoban [host] diff --git a/src/main/resources/mcpi/api/java/McPi.jar b/src/main/resources/mcpi/api/java/McPi.jar deleted file mode 100644 index 7118ab8e2fd7816afaf2bdf81c0fb69540d64ae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26279 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 diff --git a/src/main/resources/mcpi/api/java/McPiDemos.jar b/src/main/resources/mcpi/api/java/McPiDemos.jar deleted file mode 100644 index cded4d08b43d7921741d9eaa14873f2d761dbe3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14413 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�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 O@adhag=6^Z-~R*4gOHX0 diff --git a/src/main/resources/mcpi/api/java/doc/allclasses-frame.html b/src/main/resources/mcpi/api/java/doc/allclasses-frame.html deleted file mode 100644 index 95f4938d..00000000 --- a/src/main/resources/mcpi/api/java/doc/allclasses-frame.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - -All Classes (Minecraft Pi Edition, Java API) - - - - - - - - - - - -All Classes -
    - - - - - -
    Block -
    -BlockEvent -
    -BlockHitEvent -
    -Color -
    -Item -
    -Minecraft -
    -Text -
    -Tools -
    -Turtle -
    -Vec -
    -Vec.Unit -
    -VecFloat -
    -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/allclasses-noframe.html b/src/main/resources/mcpi/api/java/doc/allclasses-noframe.html deleted file mode 100644 index e3cdb78b..00000000 --- a/src/main/resources/mcpi/api/java/doc/allclasses-noframe.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - -All Classes (Minecraft Pi Edition, Java API) - - - - - - - - - - - -All Classes -
    - - - - - -
    Block -
    -BlockEvent -
    -BlockHitEvent -
    -Color -
    -Item -
    -Minecraft -
    -Text -
    -Tools -
    -Turtle -
    -Vec -
    -Vec.Unit -
    -VecFloat -
    -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/constant-values.html b/src/main/resources/mcpi/api/java/doc/constant-values.html deleted file mode 100644 index af5892f3..00000000 --- a/src/main/resources/mcpi/api/java/doc/constant-values.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Constant Field Values (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Constant Field Values

    -
    -
    -Contents - - - - - - -
    -pi.*
    - -

    - - - - - - - - - - - - - - - - - -
    pi.Vec
    -public static final intMAX_Y127
    -public static final intMIN_Y-128
    - -

    - -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/deprecated-list.html b/src/main/resources/mcpi/api/java/doc/deprecated-list.html deleted file mode 100644 index a754ff8c..00000000 --- a/src/main/resources/mcpi/api/java/doc/deprecated-list.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - -Deprecated List (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Deprecated API

    -
    -
    -Contents
      -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/index.html b/src/main/resources/mcpi/api/java/doc/index.html deleted file mode 100644 index 2fdfe5a0..00000000 --- a/src/main/resources/mcpi/api/java/doc/index.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - -Minecraft Pi Edition, Java API - - - - - - - - - - - -<H2> -Frame Alert</H2> - -<P> -This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. -<BR> -Link to<A HREF="overview-summary.html">Non-frame version.</A> - - - diff --git a/src/main/resources/mcpi/api/java/doc/overview-frame.html b/src/main/resources/mcpi/api/java/doc/overview-frame.html deleted file mode 100644 index a6537ec7..00000000 --- a/src/main/resources/mcpi/api/java/doc/overview-frame.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - -Overview List (Minecraft Pi Edition, Java API) - - - - - - - - - - - - - - - -
    -
    - - - - - -
    All Classes -

    - -Packages -
    -pi -
    -pi.event -
    -pi.tool -
    -

    - -

    -  - - diff --git a/src/main/resources/mcpi/api/java/doc/overview-summary.html b/src/main/resources/mcpi/api/java/doc/overview-summary.html deleted file mode 100644 index bbd5bdf2..00000000 --- a/src/main/resources/mcpi/api/java/doc/overview-summary.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - -Overview (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -


    - -
    -
    -

    -Minecraft Pi Edition - Java API -

    -
    - - - - - - - - - - - - - - - - - -
    -Api
    piProtocol classes
    pi.eventUse to react on events in the game
    pi.toolTools with higher level functionality
    - -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/package-list b/src/main/resources/mcpi/api/java/doc/package-list deleted file mode 100644 index 582d0c9b..00000000 --- a/src/main/resources/mcpi/api/java/doc/package-list +++ /dev/null @@ -1,3 +0,0 @@ -pi -pi.event -pi.tool diff --git a/src/main/resources/mcpi/api/java/doc/pi/Block.html b/src/main/resources/mcpi/api/java/doc/pi/Block.html deleted file mode 100644 index 00fd3fb7..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/Block.html +++ /dev/null @@ -1,1534 +0,0 @@ - - - - - - - -Block (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Class Block

    -
    -Object
    -  extended by pi.Block
    -
    -
    -
    -
    public class Block
    extends Object
    - - -

    -A Minecraft Block description -

    - -

    -


    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    -static BlockAIR - -
    -           
    -static BlockBED - -
    -           
    -static BlockBEDROCK - -
    -           
    -static BlockBEDROCK_INVISIBLE - -
    -           
    -static BlockBOOKSHELF - -
    -           
    -static BlockBRICK_BLOCK - -
    -           
    -static BlockCACTUS - -
    -           
    -static BlockCHEST - -
    -           
    -static BlockCLAY - -
    -           
    -static BlockCOAL_ORE - -
    -           
    -static BlockCOBBLESTONE - -
    -           
    -static BlockCOBWEB - -
    -           
    -static BlockCRAFTING_TABLE - -
    -           
    -static BlockDIAMOND_BLOCK - -
    -           
    -static BlockDIAMOND_ORE - -
    -           
    -static BlockDIRT - -
    -           
    -static BlockDOOR_IRON - -
    -           
    -static BlockDOOR_WOOD - -
    -           
    -static BlockFARMLAND - -
    -           
    -static BlockFENCE - -
    -           
    -static BlockFENCE_GATE - -
    -           
    -static BlockFIRE - -
    -           
    -static BlockFLOWER_CYAN - -
    -           
    -static BlockFLOWER_YELLOW - -
    -           
    -static BlockFURNACE_ACTIVE - -
    -           
    -static BlockFURNACE_INACTIVE - -
    -           
    -static BlockGLASS - -
    -           
    -static BlockGLASS_PANE - -
    -           
    -static BlockGLOWING_OBSIDIAN - -
    -           
    -static BlockGLOWSTONE_BLOCK - -
    -           
    -static BlockGOLD_BLOCK - -
    -           
    -static BlockGOLD_ORE - -
    -           
    -static BlockGRASS - -
    -           
    -static BlockGRASS_TALL - -
    -           
    -static BlockGRAVEL - -
    -           
    -static BlockICE - -
    -           
    -static BlockIRON_BLOCK - -
    -           
    -static BlockIRON_ORE - -
    -           
    -static BlockLADDER - -
    -           
    -static BlockLAPIS_LAZULI_BLOCK - -
    -           
    -static BlockLAPIS_LAZULI_ORE - -
    -           
    -static BlockLAVA - -
    -           
    -static BlockLAVA_FLOWING - -
    -           
    -static BlockLAVA_STATIONARY - -
    -           
    -static BlockLEAVES - -
    -           
    -static BlockMELON - -
    -           
    -static BlockMOSS_STONE - -
    -           
    -static BlockMUSHROOM_BROWN - -
    -           
    -static BlockMUSHROOM_RED - -
    -           
    -static BlockNETHER_REACTOR_CORE - -
    -           
    -static BlockOBSIDIAN - -
    -           
    -static BlockREDSTONE_ORE - -
    -           
    -static BlockSAND - -
    -           
    -static BlockSANDSTONE - -
    -           
    -static BlockSAPLING - -
    -           
    -static BlockSNOW - -
    -           
    -static BlockSNOW_BLOCK - -
    -           
    -static BlockSTAIRS_COBBLESTONE - -
    -           
    -static BlockSTAIRS_WOOD - -
    -           
    -static BlockSTONE - -
    -           
    -static BlockSTONE_BRICK - -
    -           
    -static BlockSTONE_SLAB - -
    -           
    -static BlockSTONE_SLAB_DOUBLE - -
    -           
    -static BlockSUGAR_CANE - -
    -           
    -static BlockTNT - -
    -           
    -static BlockTORCH - -
    -           
    -static BlockWATER - -
    -           
    -static BlockWATER_FLOWING - -
    -           
    -static BlockWATER_STATIONARY - -
    -           
    -static BlockWOOD - -
    -           
    -static BlockWOOD_PLANKS - -
    -           
    -static BlockWOOL - -
    -           
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - booleanequals(Object obj) - -
    -           
    - inthashCode() - -
    -           
    -static Blockid(int id) - -
    -          Get a block with and withId (use a constant like Block.TNT)
    - StringtoString() - -
    -           
    - BlockwithData(int data) - -
    -          Get a block with extra data
    -static Blockwool(Color color) - -
    -          Get a wool block of a specific color
    - - - - - - - -
    Methods inherited from class Object
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -AIR

    -
    -public static final Block AIR
    -
    -
    -
    -
    -
    - -

    -STONE

    -
    -public static final Block STONE
    -
    -
    -
    -
    -
    - -

    -GRASS

    -
    -public static final Block GRASS
    -
    -
    -
    -
    -
    - -

    -DIRT

    -
    -public static final Block DIRT
    -
    -
    -
    -
    -
    - -

    -COBBLESTONE

    -
    -public static final Block COBBLESTONE
    -
    -
    -
    -
    -
    - -

    -WOOD_PLANKS

    -
    -public static final Block WOOD_PLANKS
    -
    -
    -
    -
    -
    - -

    -SAPLING

    -
    -public static final Block SAPLING
    -
    -
    -
    -
    -
    - -

    -BEDROCK

    -
    -public static final Block BEDROCK
    -
    -
    -
    -
    -
    - -

    -WATER_FLOWING

    -
    -public static final Block WATER_FLOWING
    -
    -
    -
    -
    -
    - -

    -WATER

    -
    -public static final Block WATER
    -
    -
    -
    -
    -
    - -

    -WATER_STATIONARY

    -
    -public static final Block WATER_STATIONARY
    -
    -
    -
    -
    -
    - -

    -LAVA_FLOWING

    -
    -public static final Block LAVA_FLOWING
    -
    -
    -
    -
    -
    - -

    -LAVA

    -
    -public static final Block LAVA
    -
    -
    -
    -
    -
    - -

    -LAVA_STATIONARY

    -
    -public static final Block LAVA_STATIONARY
    -
    -
    -
    -
    -
    - -

    -SAND

    -
    -public static final Block SAND
    -
    -
    -
    -
    -
    - -

    -GRAVEL

    -
    -public static final Block GRAVEL
    -
    -
    -
    -
    -
    - -

    -GOLD_ORE

    -
    -public static final Block GOLD_ORE
    -
    -
    -
    -
    -
    - -

    -IRON_ORE

    -
    -public static final Block IRON_ORE
    -
    -
    -
    -
    -
    - -

    -COAL_ORE

    -
    -public static final Block COAL_ORE
    -
    -
    -
    -
    -
    - -

    -WOOD

    -
    -public static final Block WOOD
    -
    -
    -
    -
    -
    - -

    -LEAVES

    -
    -public static final Block LEAVES
    -
    -
    -
    -
    -
    - -

    -GLASS

    -
    -public static final Block GLASS
    -
    -
    -
    -
    -
    - -

    -LAPIS_LAZULI_ORE

    -
    -public static final Block LAPIS_LAZULI_ORE
    -
    -
    -
    -
    -
    - -

    -LAPIS_LAZULI_BLOCK

    -
    -public static final Block LAPIS_LAZULI_BLOCK
    -
    -
    -
    -
    -
    - -

    -SANDSTONE

    -
    -public static final Block SANDSTONE
    -
    -
    -
    -
    -
    - -

    -BED

    -
    -public static final Block BED
    -
    -
    -
    -
    -
    - -

    -COBWEB

    -
    -public static final Block COBWEB
    -
    -
    -
    -
    -
    - -

    -GRASS_TALL

    -
    -public static final Block GRASS_TALL
    -
    -
    -
    -
    -
    - -

    -WOOL

    -
    -public static final Block WOOL
    -
    -
    -
    -
    -
    - -

    -FLOWER_YELLOW

    -
    -public static final Block FLOWER_YELLOW
    -
    -
    -
    -
    -
    - -

    -FLOWER_CYAN

    -
    -public static final Block FLOWER_CYAN
    -
    -
    -
    -
    -
    - -

    -MUSHROOM_BROWN

    -
    -public static final Block MUSHROOM_BROWN
    -
    -
    -
    -
    -
    - -

    -MUSHROOM_RED

    -
    -public static final Block MUSHROOM_RED
    -
    -
    -
    -
    -
    - -

    -GOLD_BLOCK

    -
    -public static final Block GOLD_BLOCK
    -
    -
    -
    -
    -
    - -

    -IRON_BLOCK

    -
    -public static final Block IRON_BLOCK
    -
    -
    -
    -
    -
    - -

    -STONE_SLAB_DOUBLE

    -
    -public static final Block STONE_SLAB_DOUBLE
    -
    -
    -
    -
    -
    - -

    -STONE_SLAB

    -
    -public static final Block STONE_SLAB
    -
    -
    -
    -
    -
    - -

    -BRICK_BLOCK

    -
    -public static final Block BRICK_BLOCK
    -
    -
    -
    -
    -
    - -

    -TNT

    -
    -public static final Block TNT
    -
    -
    -
    -
    -
    - -

    -BOOKSHELF

    -
    -public static final Block BOOKSHELF
    -
    -
    -
    -
    -
    - -

    -MOSS_STONE

    -
    -public static final Block MOSS_STONE
    -
    -
    -
    -
    -
    - -

    -OBSIDIAN

    -
    -public static final Block OBSIDIAN
    -
    -
    -
    -
    -
    - -

    -TORCH

    -
    -public static final Block TORCH
    -
    -
    -
    -
    -
    - -

    -FIRE

    -
    -public static final Block FIRE
    -
    -
    -
    -
    -
    - -

    -STAIRS_WOOD

    -
    -public static final Block STAIRS_WOOD
    -
    -
    -
    -
    -
    - -

    -CHEST

    -
    -public static final Block CHEST
    -
    -
    -
    -
    -
    - -

    -DIAMOND_ORE

    -
    -public static final Block DIAMOND_ORE
    -
    -
    -
    -
    -
    - -

    -DIAMOND_BLOCK

    -
    -public static final Block DIAMOND_BLOCK
    -
    -
    -
    -
    -
    - -

    -CRAFTING_TABLE

    -
    -public static final Block CRAFTING_TABLE
    -
    -
    -
    -
    -
    - -

    -FARMLAND

    -
    -public static final Block FARMLAND
    -
    -
    -
    -
    -
    - -

    -FURNACE_INACTIVE

    -
    -public static final Block FURNACE_INACTIVE
    -
    -
    -
    -
    -
    - -

    -FURNACE_ACTIVE

    -
    -public static final Block FURNACE_ACTIVE
    -
    -
    -
    -
    -
    - -

    -DOOR_WOOD

    -
    -public static final Block DOOR_WOOD
    -
    -
    -
    -
    -
    - -

    -LADDER

    -
    -public static final Block LADDER
    -
    -
    -
    -
    -
    - -

    -STAIRS_COBBLESTONE

    -
    -public static final Block STAIRS_COBBLESTONE
    -
    -
    -
    -
    -
    - -

    -DOOR_IRON

    -
    -public static final Block DOOR_IRON
    -
    -
    -
    -
    -
    - -

    -REDSTONE_ORE

    -
    -public static final Block REDSTONE_ORE
    -
    -
    -
    -
    -
    - -

    -SNOW

    -
    -public static final Block SNOW
    -
    -
    -
    -
    -
    - -

    -ICE

    -
    -public static final Block ICE
    -
    -
    -
    -
    -
    - -

    -SNOW_BLOCK

    -
    -public static final Block SNOW_BLOCK
    -
    -
    -
    -
    -
    - -

    -CACTUS

    -
    -public static final Block CACTUS
    -
    -
    -
    -
    -
    - -

    -CLAY

    -
    -public static final Block CLAY
    -
    -
    -
    -
    -
    - -

    -SUGAR_CANE

    -
    -public static final Block SUGAR_CANE
    -
    -
    -
    -
    -
    - -

    -FENCE

    -
    -public static final Block FENCE
    -
    -
    -
    -
    -
    - -

    -GLOWSTONE_BLOCK

    -
    -public static final Block GLOWSTONE_BLOCK
    -
    -
    -
    -
    -
    - -

    -BEDROCK_INVISIBLE

    -
    -public static final Block BEDROCK_INVISIBLE
    -
    -
    -
    -
    -
    - -

    -STONE_BRICK

    -
    -public static final Block STONE_BRICK
    -
    -
    -
    -
    -
    - -

    -GLASS_PANE

    -
    -public static final Block GLASS_PANE
    -
    -
    -
    -
    -
    - -

    -MELON

    -
    -public static final Block MELON
    -
    -
    -
    -
    -
    - -

    -FENCE_GATE

    -
    -public static final Block FENCE_GATE
    -
    -
    -
    -
    -
    - -

    -GLOWING_OBSIDIAN

    -
    -public static final Block GLOWING_OBSIDIAN
    -
    -
    -
    -
    -
    - -

    -NETHER_REACTOR_CORE

    -
    -public static final Block NETHER_REACTOR_CORE
    -
    -
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -id

    -
    -public static Block id(int id)
    -
    -
    Get a block with and withId (use a constant like Block.TNT) -

    -

    -
    -
    -
    -
    - -

    -withData

    -
    -public Block withData(int data)
    -
    -
    Get a block with extra data -

    -

    -
    -
    -
    -
    - -

    -hashCode

    -
    -public int hashCode()
    -
    -
    -
    Overrides:
    hashCode in class Object
    -
    -
    -
    -
    -
    -
    - -

    -equals

    -
    -public boolean equals(Object obj)
    -
    -
    -
    Overrides:
    equals in class Object
    -
    -
    -
    -
    -
    -
    - -

    -toString

    -
    -public String toString()
    -
    -
    -
    Overrides:
    toString in class Object
    -
    -
    -
    -
    -
    -
    - -

    -wool

    -
    -public static Block wool(Color color)
    -
    -
    Get a wool block of a specific color -

    -

    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/Color.html b/src/main/resources/mcpi/api/java/doc/pi/Color.html deleted file mode 100644 index 6653a288..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/Color.html +++ /dev/null @@ -1,437 +0,0 @@ - - - - - - - -Color (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Enum Color

    -
    -Object
    -  extended by Enum<Color>
    -      extended by pi.Color
    -
    -
    -
    All Implemented Interfaces:
    java.io.Serializable, Comparable<Color>
    -
    -
    -
    -
    public enum Color
    extends Enum<Color>
    - - -

    -Colors -

    - -

    -


    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Enum Constant Summary
    BLACK - -
    -           
    BLUE - -
    -           
    BROWN - -
    -           
    CYAN - -
    -           
    GRAY - -
    -           
    GREEN - -
    -           
    LIGHT_BLUE - -
    -           
    LIGHT_GRAY - -
    -           
    LIME - -
    -           
    MAGENTA - -
    -           
    ORANGE - -
    -           
    PINK - -
    -           
    PURPLE - -
    -           
    RED - -
    -           
    WHITE - -
    -           
    YELLOW - -
    -           
    -  - - - - - - - - - - - - - - - -
    -Method Summary
    -static ColorvalueOf(String name) - -
    -          Returns the enum constant of this type with the specified name.
    -static Color[]values() - -
    -          Returns an array containing the constants of this enum type, in -the order they are declared.
    - - - - - - - -
    Methods inherited from class Enum
    clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
    - - - - - - - -
    Methods inherited from class Object
    getClass, notify, notifyAll, wait, wait, wait
    -  -

    - - - - - - - - -
    -Enum Constant Detail
    - -

    -WHITE

    -
    -public static final Color WHITE
    -
    -
    -
    -
    -
    - -

    -ORANGE

    -
    -public static final Color ORANGE
    -
    -
    -
    -
    -
    - -

    -MAGENTA

    -
    -public static final Color MAGENTA
    -
    -
    -
    -
    -
    - -

    -LIGHT_BLUE

    -
    -public static final Color LIGHT_BLUE
    -
    -
    -
    -
    -
    - -

    -YELLOW

    -
    -public static final Color YELLOW
    -
    -
    -
    -
    -
    - -

    -LIME

    -
    -public static final Color LIME
    -
    -
    -
    -
    -
    - -

    -PINK

    -
    -public static final Color PINK
    -
    -
    -
    -
    -
    - -

    -GRAY

    -
    -public static final Color GRAY
    -
    -
    -
    -
    -
    - -

    -LIGHT_GRAY

    -
    -public static final Color LIGHT_GRAY
    -
    -
    -
    -
    -
    - -

    -CYAN

    -
    -public static final Color CYAN
    -
    -
    -
    -
    -
    - -

    -PURPLE

    -
    -public static final Color PURPLE
    -
    -
    -
    -
    -
    - -

    -BLUE

    -
    -public static final Color BLUE
    -
    -
    -
    -
    -
    - -

    -BROWN

    -
    -public static final Color BROWN
    -
    -
    -
    -
    -
    - -

    -GREEN

    -
    -public static final Color GREEN
    -
    -
    -
    -
    -
    - -

    -RED

    -
    -public static final Color RED
    -
    -
    -
    -
    -
    - -

    -BLACK

    -
    -public static final Color BLACK
    -
    -
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -values

    -
    -public static Color[] values()
    -
    -
    Returns an array containing the constants of this enum type, in -the order they are declared. This method may be used to iterate -over the constants as follows: -
    -for (Color c : Color.values())
    -    System.out.println(c);
    -
    -

    -

    - -
    Returns:
    an array containing the constants of this enum type, in -the order they are declared
    -
    -
    -
    - -

    -valueOf

    -
    -public static Color valueOf(String name)
    -
    -
    Returns the enum constant of this type with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this type. (Extraneous whitespace characters are -not permitted.) -

    -

    -
    Parameters:
    name - the name of the enum constant to be returned. -
    Returns:
    the enum constant with the specified name -
    Throws: -
    IllegalArgumentException - if this enum type has no constant -with the specified name -
    NullPointerException - if the argument is null
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/Item.html b/src/main/resources/mcpi/api/java/doc/pi/Item.html deleted file mode 100644 index 8af6ab07..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/Item.html +++ /dev/null @@ -1,1129 +0,0 @@ - - - - - - - -Item (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Class Item

    -
    -Object
    -  extended by pi.Item
    -
    -
    -
    -
    public class Item
    extends Object
    - - -

    -A Minecraft Item description (no use yet) -

    - -

    -


    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    -static ItemARROW - -
    -           
    -static ItemBONE - -
    -           
    -static ItemBOOK - -
    -           
    -static ItemBOW - -
    -           
    -static ItemBOWL - -
    -           
    -static ItemCAMERA - -
    -           
    -static ItemCLAY - -
    -           
    -static ItemCLAY_BRICK - -
    -           
    -static ItemCLOCK - -
    -           
    -static ItemCOAL - -
    -           
    -static ItemCOMPASS - -
    -           
    -static ItemDIAMOND - -
    -           
    -static ItemDIAMOND_AXE - -
    -           
    -static ItemDIAMOND_PICKAXE - -
    -           
    -static ItemDIAMOND_SHOVEL - -
    -           
    -static ItemDIAMOND_SWORD - -
    -           
    -static ItemDYE - -
    -           
    -static ItemEGG - -
    -           
    -static ItemFEATHER - -
    -           
    -static ItemFLINT - -
    -           
    -static ItemGLOWSTONE_DUST - -
    -           
    -static ItemGOLD_AXE - -
    -           
    -static ItemGOLD_INGOT - -
    -           
    -static ItemGOLD_PICKAXE - -
    -           
    -static ItemGOLD_SHOVEL - -
    -           
    -static ItemGOLD_SWORD - -
    -           
    -static ItemGUNPOWDER - -
    -           
    -static ItemIRON_AXE - -
    -           
    -static ItemIRON_DOOR - -
    -           
    -static ItemIRON_INGOT - -
    -           
    -static ItemIRON_PICKAXE - -
    -           
    -static ItemIRON_SHOVEL - -
    -           
    -static ItemIRON_SWORD - -
    -           
    -static ItemLEATHER - -
    -           
    -static ItemPAPER - -
    -           
    -static ItemSHEARS - -
    -           
    -static ItemSIGN - -
    -           
    -static ItemSLIMEBALL - -
    -           
    -static ItemSNOWBALL - -
    -           
    -static ItemSTICK - -
    -           
    -static ItemSTONE_AXE - -
    -           
    -static ItemSTONE_PICKAXE - -
    -           
    -static ItemSTONE_SHOVEL - -
    -           
    -static ItemSTONE_SWORD - -
    -           
    -static ItemSTRING - -
    -           
    -static ItemSUGAR - -
    -           
    -static ItemSUGAR_CANE - -
    -           
    -static ItemWHEAT - -
    -           
    -static ItemWOODEN_AXE - -
    -           
    -static ItemWOODEN_DOOR - -
    -           
    -static ItemWOODEN_PICKAXE - -
    -           
    -static ItemWOODEN_SHOVEL - -
    -           
    -static ItemWOODEN_SWORD - -
    -           
    -  - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - booleanequals(Object obj) - -
    -           
    - inthashCode() - -
    -           
    - StringtoString() - -
    -           
    - - - - - - - -
    Methods inherited from class Object
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -IRON_SHOVEL

    -
    -public static final Item IRON_SHOVEL
    -
    -
    -
    -
    -
    - -

    -IRON_PICKAXE

    -
    -public static final Item IRON_PICKAXE
    -
    -
    -
    -
    -
    - -

    -IRON_AXE

    -
    -public static final Item IRON_AXE
    -
    -
    -
    -
    -
    - -

    -BOW

    -
    -public static final Item BOW
    -
    -
    -
    -
    -
    - -

    -ARROW

    -
    -public static final Item ARROW
    -
    -
    -
    -
    -
    - -

    -COAL

    -
    -public static final Item COAL
    -
    -
    -
    -
    -
    - -

    -DIAMOND

    -
    -public static final Item DIAMOND
    -
    -
    -
    -
    -
    - -

    -IRON_INGOT

    -
    -public static final Item IRON_INGOT
    -
    -
    -
    -
    -
    - -

    -GOLD_INGOT

    -
    -public static final Item GOLD_INGOT
    -
    -
    -
    -
    -
    - -

    -IRON_SWORD

    -
    -public static final Item IRON_SWORD
    -
    -
    -
    -
    -
    - -

    -WOODEN_SWORD

    -
    -public static final Item WOODEN_SWORD
    -
    -
    -
    -
    -
    - -

    -WOODEN_SHOVEL

    -
    -public static final Item WOODEN_SHOVEL
    -
    -
    -
    -
    -
    - -

    -WOODEN_PICKAXE

    -
    -public static final Item WOODEN_PICKAXE
    -
    -
    -
    -
    -
    - -

    -WOODEN_AXE

    -
    -public static final Item WOODEN_AXE
    -
    -
    -
    -
    -
    - -

    -STONE_SWORD

    -
    -public static final Item STONE_SWORD
    -
    -
    -
    -
    -
    - -

    -STONE_SHOVEL

    -
    -public static final Item STONE_SHOVEL
    -
    -
    -
    -
    -
    - -

    -STONE_PICKAXE

    -
    -public static final Item STONE_PICKAXE
    -
    -
    -
    -
    -
    - -

    -STONE_AXE

    -
    -public static final Item STONE_AXE
    -
    -
    -
    -
    -
    - -

    -DIAMOND_SWORD

    -
    -public static final Item DIAMOND_SWORD
    -
    -
    -
    -
    -
    - -

    -DIAMOND_SHOVEL

    -
    -public static final Item DIAMOND_SHOVEL
    -
    -
    -
    -
    -
    - -

    -DIAMOND_PICKAXE

    -
    -public static final Item DIAMOND_PICKAXE
    -
    -
    -
    -
    -
    - -

    -DIAMOND_AXE

    -
    -public static final Item DIAMOND_AXE
    -
    -
    -
    -
    -
    - -

    -STICK

    -
    -public static final Item STICK
    -
    -
    -
    -
    -
    - -

    -BOWL

    -
    -public static final Item BOWL
    -
    -
    -
    -
    -
    - -

    -GOLD_SWORD

    -
    -public static final Item GOLD_SWORD
    -
    -
    -
    -
    -
    - -

    -GOLD_SHOVEL

    -
    -public static final Item GOLD_SHOVEL
    -
    -
    -
    -
    -
    - -

    -GOLD_PICKAXE

    -
    -public static final Item GOLD_PICKAXE
    -
    -
    -
    -
    -
    - -

    -GOLD_AXE

    -
    -public static final Item GOLD_AXE
    -
    -
    -
    -
    -
    - -

    -STRING

    -
    -public static final Item STRING
    -
    -
    -
    -
    -
    - -

    -FEATHER

    -
    -public static final Item FEATHER
    -
    -
    -
    -
    -
    - -

    -GUNPOWDER

    -
    -public static final Item GUNPOWDER
    -
    -
    -
    -
    -
    - -

    -FLINT

    -
    -public static final Item FLINT
    -
    -
    -
    -
    -
    - -

    -WHEAT

    -
    -public static final Item WHEAT
    -
    -
    -
    -
    -
    - -

    -SIGN

    -
    -public static final Item SIGN
    -
    -
    -
    -
    -
    - -

    -WOODEN_DOOR

    -
    -public static final Item WOODEN_DOOR
    -
    -
    -
    -
    -
    - -

    -IRON_DOOR

    -
    -public static final Item IRON_DOOR
    -
    -
    -
    -
    -
    - -

    -SNOWBALL

    -
    -public static final Item SNOWBALL
    -
    -
    -
    -
    -
    - -

    -LEATHER

    -
    -public static final Item LEATHER
    -
    -
    -
    -
    -
    - -

    -CLAY_BRICK

    -
    -public static final Item CLAY_BRICK
    -
    -
    -
    -
    -
    - -

    -CLAY

    -
    -public static final Item CLAY
    -
    -
    -
    -
    -
    - -

    -SUGAR_CANE

    -
    -public static final Item SUGAR_CANE
    -
    -
    -
    -
    -
    - -

    -PAPER

    -
    -public static final Item PAPER
    -
    -
    -
    -
    -
    - -

    -BOOK

    -
    -public static final Item BOOK
    -
    -
    -
    -
    -
    - -

    -SLIMEBALL

    -
    -public static final Item SLIMEBALL
    -
    -
    -
    -
    -
    - -

    -EGG

    -
    -public static final Item EGG
    -
    -
    -
    -
    -
    - -

    -COMPASS

    -
    -public static final Item COMPASS
    -
    -
    -
    -
    -
    - -

    -CLOCK

    -
    -public static final Item CLOCK
    -
    -
    -
    -
    -
    - -

    -GLOWSTONE_DUST

    -
    -public static final Item GLOWSTONE_DUST
    -
    -
    -
    -
    -
    - -

    -DYE

    -
    -public static final Item DYE
    -
    -
    -
    -
    -
    - -

    -BONE

    -
    -public static final Item BONE
    -
    -
    -
    -
    -
    - -

    -SUGAR

    -
    -public static final Item SUGAR
    -
    -
    -
    -
    -
    - -

    -SHEARS

    -
    -public static final Item SHEARS
    -
    -
    -
    -
    -
    - -

    -CAMERA

    -
    -public static final Item CAMERA
    -
    -
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -hashCode

    -
    -public int hashCode()
    -
    -
    -
    Overrides:
    hashCode in class Object
    -
    -
    -
    -
    -
    -
    - -

    -equals

    -
    -public boolean equals(Object obj)
    -
    -
    -
    Overrides:
    equals in class Object
    -
    -
    -
    -
    -
    -
    - -

    -toString

    -
    -public String toString()
    -
    -
    -
    Overrides:
    toString in class Object
    -
    -
    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Camera.html b/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Camera.html deleted file mode 100644 index c928199c..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Camera.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - -Minecraft.Camera (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Class Minecraft.Camera

    -
    -Object
    -  extended by pi.Minecraft.Camera
    -
    -
    -
    Enclosing class:
    Minecraft
    -
    -
    -
    -
    public class Minecraft.Camera
    extends Object
    - - -

    -Control the camera in the game we're connected to -

    - -

    -


    - -

    - - - - - - - - - - - -
    -Constructor Summary
    Minecraft.Camera() - -
    -           
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidsetFixed() - -
    -           
    - voidsetNormal() - -
    -           
    - voidsetNormal(int mobEntityId) - -
    -           
    - voidsetPosition(VecFloat position) - -
    -           
    - voidsetThirdPerson() - -
    -           
    - voidsetThirdPerson(int entityId) - -
    -           
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -Minecraft.Camera

    -
    -public Minecraft.Camera()
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -setNormal

    -
    -public void setNormal()
    -
    -
    -
    -
    -
    -
    - -

    -setNormal

    -
    -public void setNormal(int mobEntityId)
    -
    -
    -
    -
    -
    -
    - -

    -setThirdPerson

    -
    -public void setThirdPerson()
    -
    -
    -
    -
    -
    -
    - -

    -setThirdPerson

    -
    -public void setThirdPerson(int entityId)
    -
    -
    -
    -
    -
    -
    - -

    -setFixed

    -
    -public void setFixed()
    -
    -
    -
    -
    -
    -
    - -

    -setPosition

    -
    -public void setPosition(VecFloat position)
    -
    -
    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Entities.html b/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Entities.html deleted file mode 100644 index 4abd09ac..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Entities.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - -Minecraft.Entities (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Class Minecraft.Entities

    -
    -Object
    -  extended by pi.Minecraft.Entities
    -
    -
    -
    Enclosing class:
    Minecraft
    -
    -
    -
    -
    public class Minecraft.Entities
    extends Object
    - - -

    -Methods for entities -

    - -

    -


    - -

    - - - - - - - - - - - -
    -Constructor Summary
    Minecraft.Entities() - -
    -           
    -  - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - VecFloatgetExactPosition(int entityId) - -
    -           
    - VecgetPosition(int entityId) - -
    -           
    - voidsetExactPosition(VecFloat pos) - -
    -           
    - voidsetPosition(int entityId, - Vec tile) - -
    -           
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -Minecraft.Entities

    -
    -public Minecraft.Entities()
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -getPosition

    -
    -public Vec getPosition(int entityId)
    -
    -
    -
    -
    -
    -
    - -

    -setPosition

    -
    -public void setPosition(int entityId,
    -                        Vec tile)
    -
    -
    -
    -
    -
    -
    - -

    -getExactPosition

    -
    -public VecFloat getExactPosition(int entityId)
    -
    -
    -
    -
    -
    -
    - -

    -setExactPosition

    -
    -public void setExactPosition(VecFloat pos)
    -
    -
    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Events.html b/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Events.html deleted file mode 100644 index 420a1cd6..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Events.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - -Minecraft.Events (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Class Minecraft.Events

    -
    -Object
    -  extended by pi.Minecraft.Events
    -
    -
    -
    Enclosing class:
    Minecraft
    -
    -
    -
    -
    public class Minecraft.Events
    extends Object
    - - -

    -Events -

    - -

    -


    - -

    - - - - - - - - - - - -
    -Constructor Summary
    Minecraft.Events() - -
    -           
    -  - - - - - - - - - - - - - - - -
    -Method Summary
    - voidclearAll() - -
    -          Clear all old events
    - List<BlockHitEvent>pollBlockHits() - -
    -          Only triggered by sword
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -Minecraft.Events

    -
    -public Minecraft.Events()
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -clearAll

    -
    -public void clearAll()
    -
    -
    Clear all old events -

    -

    -
    -
    -
    -
    - -

    -pollBlockHits

    -
    -public List<BlockHitEvent> pollBlockHits()
    -
    -
    Only triggered by sword -

    -

    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Player.html b/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Player.html deleted file mode 100644 index d3a11cbd..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/Minecraft.Player.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - -Minecraft.Player (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Class Minecraft.Player

    -
    -Object
    -  extended by pi.Minecraft.Player
    -
    -
    -
    Enclosing class:
    Minecraft
    -
    -
    -
    -
    public class Minecraft.Player
    extends Object
    - - -

    -Methods for the player in the connected game -

    - -

    -


    - -

    - - - - - - - - - - - -
    -Constructor Summary
    Minecraft.Player() - -
    -           
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - VecFloatgetExactPosition() - -
    -           
    - VecgetPosition() - -
    -           
    - voidsetExactPosition(VecFloat position) - -
    -           
    - voidsetPosition(Vec position) - -
    -           
    - voidsetting(String key, - boolean value) - -
    -          Keys: autojump, Values: true/false
    For example to disable - automatic jumping: - mc.player.setting("autojump", false);
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -Minecraft.Player

    -
    -public Minecraft.Player()
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -getPosition

    -
    -public Vec getPosition()
    -
    -
    -
    -
    -
    -
    - -

    -setPosition

    -
    -public void setPosition(Vec position)
    -
    -
    -
    -
    -
    -
    - -

    -getExactPosition

    -
    -public VecFloat getExactPosition()
    -
    -
    -
    -
    -
    -
    - -

    -setExactPosition

    -
    -public void setExactPosition(VecFloat position)
    -
    -
    -
    -
    -
    -
    - -

    -setting

    -
    -public void setting(String key,
    -                    boolean value)
    -
    -
    Keys: autojump, Values: true/false
    For example to disable - automatic jumping: - mc.player.setting("autojump", false); -

    -

    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/Minecraft.html b/src/main/resources/mcpi/api/java/doc/pi/Minecraft.html deleted file mode 100644 index c8f81e52..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/Minecraft.html +++ /dev/null @@ -1,657 +0,0 @@ - - - - - - - -Minecraft (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Class Minecraft

    -
    -Object
    -  extended by pi.Minecraft
    -
    -
    -
    -
    public class Minecraft
    extends Object
    - - -

    -The main class to interact with a running instance of Minecraft Pi. - -

    Example:   - Minecraft.connect().setBlock(0, 2, 0, Block.GOLD_ORE) -

    - -

    -


    - -

    - - - - - - - - - - - - - - - - - - - - - - - -
    -Nested Class Summary
    - classMinecraft.Camera - -
    -          Control the camera in the game we're connected to
    - classMinecraft.Entities - -
    -          Methods for entities
    - classMinecraft.Events - -
    -          Events
    - classMinecraft.Player - -
    -          Methods for the player in the connected game
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - Minecraft.Cameracamera - -
    -           
    - Minecraft.Entitiesentities - -
    -           
    - Minecraft.Eventsevents - -
    -           
    - Minecraft.Playerplayer - -
    -           
    - Toolstools - -
    -           
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidautoFlush(boolean auto) - -
    -          If auto is false, commands are kept in a buffer until they are flushed - with flush() or the buffer fills up.
    Default is to automatically - flush each command separately.
    -static Minecraftconnect() - -
    -          Connect to a local mcpi game
    -static Minecraftconnect(String host) - -
    -          Connect to a remote mcpi game
    -static Minecraftconnect(String[] args) - -
    -          Connect with string args
    -protected  voidfinalize() - -
    -           
    - voidflush() - -
    -          Flush commands that are buffered, not needed, unless autoFlush(false).
    - BlockgetBlock(Vec position) - -
    -          Get a block
    - BlockgetBlockWithData(Vec position) - -
    -          Get a block
    - intgetHeight(int x, - int z) - -
    -          Get the height of the world (last Y that isn't solid from top-down)
    - int[]getPlayerEntityIds() - -
    -          Get the entity ids of the connected players
    - voidpostToChat(String message) - -
    -          Post a message to the game chat
    - voidrestoreCheckpoint() - -
    -          Restore the world state to the checkpoint
    - voidsaveCheckpoint() - -
    -          Save a checkpoint that can be used for restoring the world
    - voidsetBlock(int x, - int y, - int z, - Block block) - -
    -          Set a block
    - voidsetBlock(Vec position, - Block block) - -
    -          Set a block
    - voidsetBlocks(int x1, - int y1, - int z1, - int x2, - int y2, - int z2, - Block block) - -
    -          Set a cuboid of blocks
    - voidsetBlocks(Vec begin, - Vec end, - Block block) - -
    -          Set a cuboid of blocks
    - voidsetting(String key, - boolean value) - -
    -          Keys: "world_immutable", "nametags_visible"
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -camera

    -
    -public final Minecraft.Camera camera
    -
    -
    -
    -
    -
    - -

    -player

    -
    -public final Minecraft.Player player
    -
    -
    -
    -
    -
    - -

    -entities

    -
    -public final Minecraft.Entities entities
    -
    -
    -
    -
    -
    - -

    -events

    -
    -public final Minecraft.Events events
    -
    -
    -
    -
    -
    - -

    -tools

    -
    -public final Tools tools
    -
    -
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -connect

    -
    -public static Minecraft connect()
    -
    -
    Connect to a local mcpi game -

    -

    -
    -
    -
    -
    - -

    -connect

    -
    -public static Minecraft connect(String host)
    -
    -
    Connect to a remote mcpi game -

    -

    -
    -
    -
    -
    - -

    -connect

    -
    -public static Minecraft connect(String[] args)
    -
    -
    Connect with string args -

    -

    -
    Parameters:
    args - an array with optional host, port
    -
    -
    -
    - -

    -getBlock

    -
    -public Block getBlock(Vec position)
    -
    -
    Get a block -

    -

    -
    -
    -
    -
    - -

    -getBlockWithData

    -
    -public Block getBlockWithData(Vec position)
    -
    -
    Get a block -

    -

    -
    -
    -
    -
    - -

    -setBlock

    -
    -public void setBlock(int x,
    -                     int y,
    -                     int z,
    -                     Block block)
    -
    -
    Set a block -

    -

    -
    -
    -
    -
    - -

    -setBlock

    -
    -public void setBlock(Vec position,
    -                     Block block)
    -
    -
    Set a block -

    -

    -
    -
    -
    -
    - -

    -setBlocks

    -
    -public void setBlocks(int x1,
    -                      int y1,
    -                      int z1,
    -                      int x2,
    -                      int y2,
    -                      int z2,
    -                      Block block)
    -
    -
    Set a cuboid of blocks -

    -

    -
    -
    -
    -
    - -

    -setBlocks

    -
    -public void setBlocks(Vec begin,
    -                      Vec end,
    -                      Block block)
    -
    -
    Set a cuboid of blocks -

    -

    -
    -
    -
    -
    - -

    -getHeight

    -
    -public int getHeight(int x,
    -                     int z)
    -
    -
    Get the height of the world (last Y that isn't solid from top-down) -

    -

    -
    -
    -
    -
    - -

    -getPlayerEntityIds

    -
    -public int[] getPlayerEntityIds()
    -
    -
    Get the entity ids of the connected players -

    -

    -
    -
    -
    -
    - -

    -setting

    -
    -public void setting(String key,
    -                    boolean value)
    -
    -
    Keys: "world_immutable", "nametags_visible" -

    -

    -
    -
    -
    -
    - -

    -saveCheckpoint

    -
    -public void saveCheckpoint()
    -
    -
    Save a checkpoint that can be used for restoring the world -

    -

    -
    -
    -
    -
    - -

    -restoreCheckpoint

    -
    -public void restoreCheckpoint()
    -
    -
    Restore the world state to the checkpoint -

    -

    -
    -
    -
    -
    - -

    -postToChat

    -
    -public void postToChat(String message)
    -
    -
    Post a message to the game chat -

    -

    -
    -
    -
    -
    - -

    -autoFlush

    -
    -public void autoFlush(boolean auto)
    -
    -
    If auto is false, commands are kept in a buffer until they are flushed - with flush() or the buffer fills up.
    Default is to automatically - flush each command separately. -

    -

    -
    -
    -
    -
    - -

    -flush

    -
    -public void flush()
    -
    -
    Flush commands that are buffered, not needed, unless autoFlush(false). -

    -

    -
    -
    -
    -
    - -

    -finalize

    -
    -protected void finalize()
    -                 throws Throwable
    -
    -
    -
    Overrides:
    finalize in class Object
    -
    -
    - -
    Throws: -
    Throwable
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/Vec.Unit.html b/src/main/resources/mcpi/api/java/doc/pi/Vec.Unit.html deleted file mode 100644 index 3b8dc399..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/Vec.Unit.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - -Vec.Unit (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Class Vec.Unit

    -
    -Object
    -  extended by pi.Vec
    -      extended by pi.Vec.Unit
    -
    -
    -
    Enclosing class:
    Vec
    -
    -
    -
    -
    public static class Vec.Unit
    extends Vec
    - - -

    -A vector with length=1 -

    - -

    -


    - -

    - - - - - - - -
    -Nested Class Summary
    - - - - - - - -
    Nested classes/interfaces inherited from class pi.Vec
    Vec.Unit
    -  - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    -static Vec.UnitX - -
    -           
    -static Vec.UnitY - -
    -           
    -static Vec.UnitZ - -
    -           
    - - - - - - - -
    Fields inherited from class pi.Vec
    MAX_Y, MIN_Y, x, y, z, ZERO
    -  - - - - - - - - - - - -
    -Method Summary
    - Vec.Unitneg() - -
    -          Negate (multiply with -1)
    - - - - - - - -
    Methods inherited from class pi.Vec
    add, add, dot, equals, hashCode, mul, sub, toString, xyz
    - - - - - - - -
    Methods inherited from class Object
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -X

    -
    -public static final Vec.Unit X
    -
    -
    -
    -
    -
    - -

    -Y

    -
    -public static final Vec.Unit Y
    -
    -
    -
    -
    -
    - -

    -Z

    -
    -public static final Vec.Unit Z
    -
    -
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -neg

    -
    -public Vec.Unit neg()
    -
    -
    Description copied from class: Vec
    -
    Negate (multiply with -1) -

    -

    -
    Overrides:
    neg in class Vec
    -
    -
    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/Vec.html b/src/main/resources/mcpi/api/java/doc/pi/Vec.html deleted file mode 100644 index 4f3e7f23..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/Vec.html +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - - -Vec (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Class Vec

    -
    -Object
    -  extended by pi.Vec
    -
    -
    -
    Direct Known Subclasses:
    Vec.Unit
    -
    -
    -
    -
    public class Vec
    extends Object
    - - -

    -


    - -

    - - - - - - - - - - - -
    -Nested Class Summary
    -static classVec.Unit - -
    -          A vector with length=1
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    -static intMAX_Y - -
    -           
    -static intMIN_Y - -
    -           
    - intx - -
    -           
    - inty - -
    -           
    - intz - -
    -           
    -static VecZERO - -
    -           
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - Vecadd(int x, - int y, - int z) - -
    -          Add
    - Vecadd(Vec v) - -
    -          Add
    - intdot(Vec v) - -
    -          Scalar product
    - booleanequals(Object obj) - -
    -           
    - inthashCode() - -
    -           
    - Vecmul(int s) - -
    -          Multiply with integer (scale)
    - Vecneg() - -
    -          Negate (multiply with -1)
    - Vecsub(Vec v) - -
    -          Subtract
    - StringtoString() - -
    -           
    -static Vecxyz(int x, - int y, - int z) - -
    -          Create
    - - - - - - - -
    Methods inherited from class Object
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -ZERO

    -
    -public static final Vec ZERO
    -
    -
    -
    -
    -
    - -

    -MIN_Y

    -
    -public static final int MIN_Y
    -
    -
    -
    See Also:
    Constant Field Values
    -
    -
    - -

    -MAX_Y

    -
    -public static final int MAX_Y
    -
    -
    -
    See Also:
    Constant Field Values
    -
    -
    - -

    -x

    -
    -public final int x
    -
    -
    -
    -
    -
    - -

    -y

    -
    -public final int y
    -
    -
    -
    -
    -
    - -

    -z

    -
    -public final int z
    -
    -
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -xyz

    -
    -public static Vec xyz(int x,
    -                      int y,
    -                      int z)
    -
    -
    Create -

    -

    -
    -
    -
    -
    - -

    -add

    -
    -public Vec add(Vec v)
    -
    -
    Add -

    -

    -
    -
    -
    -
    - -

    -add

    -
    -public Vec add(int x,
    -               int y,
    -               int z)
    -
    -
    Add -

    -

    -
    -
    -
    -
    - -

    -sub

    -
    -public Vec sub(Vec v)
    -
    -
    Subtract -

    -

    -
    -
    -
    -
    - -

    -mul

    -
    -public Vec mul(int s)
    -
    -
    Multiply with integer (scale) -

    -

    -
    -
    -
    -
    - -

    -neg

    -
    -public Vec neg()
    -
    -
    Negate (multiply with -1) -

    -

    -
    -
    -
    -
    - -

    -dot

    -
    -public int dot(Vec v)
    -
    -
    Scalar product -

    -

    -
    -
    -
    -
    - -

    -hashCode

    -
    -public int hashCode()
    -
    -
    -
    Overrides:
    hashCode in class Object
    -
    -
    -
    -
    -
    -
    - -

    -equals

    -
    -public boolean equals(Object obj)
    -
    -
    -
    Overrides:
    equals in class Object
    -
    -
    -
    -
    -
    -
    - -

    -toString

    -
    -public final String toString()
    -
    -
    -
    Overrides:
    toString in class Object
    -
    -
    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/VecFloat.html b/src/main/resources/mcpi/api/java/doc/pi/VecFloat.html deleted file mode 100644 index 9af17a07..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/VecFloat.html +++ /dev/null @@ -1,396 +0,0 @@ - - - - - - - -VecFloat (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi -
    -Class VecFloat

    -
    -Object
    -  extended by pi.VecFloat
    -
    -
    -
    -
    public class VecFloat
    extends Object
    - - -

    -A vector of three floats -

    - -

    -


    - -

    - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - floatx - -
    -           
    - floaty - -
    -           
    - floatz - -
    -           
    -static VecFloatZERO - -
    -           
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - VecFloatadd(VecFloat v) - -
    -          Add
    - floatdot(VecFloat v) - -
    -          Scalar product
    - floatlength() - -
    -          Length
    - floatlengthSq() - -
    -          length * length
    - VecFloatmul(float s) - -
    -          Multiply with a float (scale)
    - VecFloatneg() - -
    -          Negate (multiply with -1)
    - VecFloatnormalized() - -
    -          Get a vector in the same direction but with length 1
    - VecFloatsub(VecFloat v) - -
    -          Subtract
    - StringtoString() - -
    -           
    -static VecFloatxyz(float x, - float y, - float z) - -
    -          Create
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -ZERO

    -
    -public static final VecFloat ZERO
    -
    -
    -
    -
    -
    - -

    -x

    -
    -public final float x
    -
    -
    -
    -
    -
    - -

    -y

    -
    -public final float y
    -
    -
    -
    -
    -
    - -

    -z

    -
    -public final float z
    -
    -
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -xyz

    -
    -public static VecFloat xyz(float x,
    -                           float y,
    -                           float z)
    -
    -
    Create -

    -

    -
    -
    -
    -
    - -

    -add

    -
    -public VecFloat add(VecFloat v)
    -
    -
    Add -

    -

    -
    -
    -
    -
    - -

    -sub

    -
    -public VecFloat sub(VecFloat v)
    -
    -
    Subtract -

    -

    -
    -
    -
    -
    - -

    -mul

    -
    -public VecFloat mul(float s)
    -
    -
    Multiply with a float (scale) -

    -

    -
    -
    -
    -
    - -

    -neg

    -
    -public VecFloat neg()
    -
    -
    Negate (multiply with -1) -

    -

    -
    -
    -
    -
    - -

    -dot

    -
    -public float dot(VecFloat v)
    -
    -
    Scalar product -

    -

    -
    -
    -
    -
    - -

    -normalized

    -
    -public VecFloat normalized()
    -
    -
    Get a vector in the same direction but with length 1 -

    -

    -
    -
    -
    -
    - -

    -length

    -
    -public float length()
    -
    -
    Length -

    -

    -
    -
    -
    -
    - -

    -lengthSq

    -
    -public float lengthSq()
    -
    -
    length * length -

    -

    -
    -
    -
    -
    - -

    -toString

    -
    -public final String toString()
    -
    -
    -
    Overrides:
    toString in class Object
    -
    -
    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/Block.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/Block.html deleted file mode 100644 index de665e53..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/Block.html +++ /dev/null @@ -1,784 +0,0 @@ - - - - - - - -Uses of Class pi.Block (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.Block

    -
    - - - - - - - - - - - - - -
    -Packages that use Block
    piProtocol classes 
    pi.toolTools with higher level functionality 
    -  -

    - - - - - -
    -Uses of Block in pi
    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Fields in pi declared as Block
    -static BlockBlock.AIR - -
    -           
    -static BlockBlock.BED - -
    -           
    -static BlockBlock.BEDROCK - -
    -           
    -static BlockBlock.BEDROCK_INVISIBLE - -
    -           
    -static BlockBlock.BOOKSHELF - -
    -           
    -static BlockBlock.BRICK_BLOCK - -
    -           
    -static BlockBlock.CACTUS - -
    -           
    -static BlockBlock.CHEST - -
    -           
    -static BlockBlock.CLAY - -
    -           
    -static BlockBlock.COAL_ORE - -
    -           
    -static BlockBlock.COBBLESTONE - -
    -           
    -static BlockBlock.COBWEB - -
    -           
    -static BlockBlock.CRAFTING_TABLE - -
    -           
    -static BlockBlock.DIAMOND_BLOCK - -
    -           
    -static BlockBlock.DIAMOND_ORE - -
    -           
    -static BlockBlock.DIRT - -
    -           
    -static BlockBlock.DOOR_IRON - -
    -           
    -static BlockBlock.DOOR_WOOD - -
    -           
    -static BlockBlock.FARMLAND - -
    -           
    -static BlockBlock.FENCE - -
    -           
    -static BlockBlock.FENCE_GATE - -
    -           
    -static BlockBlock.FIRE - -
    -           
    -static BlockBlock.FLOWER_CYAN - -
    -           
    -static BlockBlock.FLOWER_YELLOW - -
    -           
    -static BlockBlock.FURNACE_ACTIVE - -
    -           
    -static BlockBlock.FURNACE_INACTIVE - -
    -           
    -static BlockBlock.GLASS - -
    -           
    -static BlockBlock.GLASS_PANE - -
    -           
    -static BlockBlock.GLOWING_OBSIDIAN - -
    -           
    -static BlockBlock.GLOWSTONE_BLOCK - -
    -           
    -static BlockBlock.GOLD_BLOCK - -
    -           
    -static BlockBlock.GOLD_ORE - -
    -           
    -static BlockBlock.GRASS - -
    -           
    -static BlockBlock.GRASS_TALL - -
    -           
    -static BlockBlock.GRAVEL - -
    -           
    -static BlockBlock.ICE - -
    -           
    -static BlockBlock.IRON_BLOCK - -
    -           
    -static BlockBlock.IRON_ORE - -
    -           
    -static BlockBlock.LADDER - -
    -           
    -static BlockBlock.LAPIS_LAZULI_BLOCK - -
    -           
    -static BlockBlock.LAPIS_LAZULI_ORE - -
    -           
    -static BlockBlock.LAVA - -
    -           
    -static BlockBlock.LAVA_FLOWING - -
    -           
    -static BlockBlock.LAVA_STATIONARY - -
    -           
    -static BlockBlock.LEAVES - -
    -           
    -static BlockBlock.MELON - -
    -           
    -static BlockBlock.MOSS_STONE - -
    -           
    -static BlockBlock.MUSHROOM_BROWN - -
    -           
    -static BlockBlock.MUSHROOM_RED - -
    -           
    -static BlockBlock.NETHER_REACTOR_CORE - -
    -           
    -static BlockBlock.OBSIDIAN - -
    -           
    -static BlockBlock.REDSTONE_ORE - -
    -           
    -static BlockBlock.SAND - -
    -           
    -static BlockBlock.SANDSTONE - -
    -           
    -static BlockBlock.SAPLING - -
    -           
    -static BlockBlock.SNOW - -
    -           
    -static BlockBlock.SNOW_BLOCK - -
    -           
    -static BlockBlock.STAIRS_COBBLESTONE - -
    -           
    -static BlockBlock.STAIRS_WOOD - -
    -           
    -static BlockBlock.STONE - -
    -           
    -static BlockBlock.STONE_BRICK - -
    -           
    -static BlockBlock.STONE_SLAB - -
    -           
    -static BlockBlock.STONE_SLAB_DOUBLE - -
    -           
    -static BlockBlock.SUGAR_CANE - -
    -           
    -static BlockBlock.TNT - -
    -           
    -static BlockBlock.TORCH - -
    -           
    -static BlockBlock.WATER - -
    -           
    -static BlockBlock.WATER_FLOWING - -
    -           
    -static BlockBlock.WATER_STATIONARY - -
    -           
    -static BlockBlock.WOOD - -
    -           
    -static BlockBlock.WOOD_PLANKS - -
    -           
    -static BlockBlock.WOOL - -
    -           
    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Methods in pi that return Block
    - BlockMinecraft.getBlock(Vec position) - -
    -          Get a block
    - BlockMinecraft.getBlockWithData(Vec position) - -
    -          Get a block
    -static BlockBlock.id(int id) - -
    -          Get a block with and withId (use a constant like Block.TNT)
    - BlockBlock.withData(int data) - -
    -          Get a block with extra data
    -static BlockBlock.wool(Color color) - -
    -          Get a wool block of a specific color
    -  -

    - - - - - - - - - - - - - - - - - - - - - -
    Methods in pi with parameters of type Block
    - voidMinecraft.setBlock(int x, - int y, - int z, - Block block) - -
    -          Set a block
    - voidMinecraft.setBlock(Vec position, - Block block) - -
    -          Set a block
    - voidMinecraft.setBlocks(int x1, - int y1, - int z1, - int x2, - int y2, - int z2, - Block block) - -
    -          Set a cuboid of blocks
    - voidMinecraft.setBlocks(Vec begin, - Vec end, - Block block) - -
    -          Set a cuboid of blocks
    -  -

    - - - - - -
    -Uses of Block in pi.tool
    -  -

    - - - - - - - - - - - - - -
    Methods in pi.tool with parameters of type Block
    - TurtleTurtle.block(Block block) - -
    -           
    - TextText.with(Block block) - -
    -          Set the block type to use for drawing
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/Color.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/Color.html deleted file mode 100644 index 52dedabd..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/Color.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Uses of Class pi.Color (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.Color

    -
    - - - - - - - - - -
    -Packages that use Color
    piProtocol classes 
    -  -

    - - - - - -
    -Uses of Color in pi
    -  -

    - - - - - - - - - - - - - -
    Methods in pi that return Color
    -static ColorColor.valueOf(String name) - -
    -          Returns the enum constant of this type with the specified name.
    -static Color[]Color.values() - -
    -          Returns an array containing the constants of this enum type, in -the order they are declared.
    -  -

    - - - - - - - - - -
    Methods in pi with parameters of type Color
    -static BlockBlock.wool(Color color) - -
    -          Get a wool block of a specific color
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/Item.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/Item.html deleted file mode 100644 index 5056a350..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/Item.html +++ /dev/null @@ -1,495 +0,0 @@ - - - - - - - -Uses of Class pi.Item (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.Item

    -
    - - - - - - - - - -
    -Packages that use Item
    piProtocol classes 
    -  -

    - - - - - -
    -Uses of Item in pi
    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Fields in pi declared as Item
    -static ItemItem.ARROW - -
    -           
    -static ItemItem.BONE - -
    -           
    -static ItemItem.BOOK - -
    -           
    -static ItemItem.BOW - -
    -           
    -static ItemItem.BOWL - -
    -           
    -static ItemItem.CAMERA - -
    -           
    -static ItemItem.CLAY - -
    -           
    -static ItemItem.CLAY_BRICK - -
    -           
    -static ItemItem.CLOCK - -
    -           
    -static ItemItem.COAL - -
    -           
    -static ItemItem.COMPASS - -
    -           
    -static ItemItem.DIAMOND - -
    -           
    -static ItemItem.DIAMOND_AXE - -
    -           
    -static ItemItem.DIAMOND_PICKAXE - -
    -           
    -static ItemItem.DIAMOND_SHOVEL - -
    -           
    -static ItemItem.DIAMOND_SWORD - -
    -           
    -static ItemItem.DYE - -
    -           
    -static ItemItem.EGG - -
    -           
    -static ItemItem.FEATHER - -
    -           
    -static ItemItem.FLINT - -
    -           
    -static ItemItem.GLOWSTONE_DUST - -
    -           
    -static ItemItem.GOLD_AXE - -
    -           
    -static ItemItem.GOLD_INGOT - -
    -           
    -static ItemItem.GOLD_PICKAXE - -
    -           
    -static ItemItem.GOLD_SHOVEL - -
    -           
    -static ItemItem.GOLD_SWORD - -
    -           
    -static ItemItem.GUNPOWDER - -
    -           
    -static ItemItem.IRON_AXE - -
    -           
    -static ItemItem.IRON_DOOR - -
    -           
    -static ItemItem.IRON_INGOT - -
    -           
    -static ItemItem.IRON_PICKAXE - -
    -           
    -static ItemItem.IRON_SHOVEL - -
    -           
    -static ItemItem.IRON_SWORD - -
    -           
    -static ItemItem.LEATHER - -
    -           
    -static ItemItem.PAPER - -
    -           
    -static ItemItem.SHEARS - -
    -           
    -static ItemItem.SIGN - -
    -           
    -static ItemItem.SLIMEBALL - -
    -           
    -static ItemItem.SNOWBALL - -
    -           
    -static ItemItem.STICK - -
    -           
    -static ItemItem.STONE_AXE - -
    -           
    -static ItemItem.STONE_PICKAXE - -
    -           
    -static ItemItem.STONE_SHOVEL - -
    -           
    -static ItemItem.STONE_SWORD - -
    -           
    -static ItemItem.STRING - -
    -           
    -static ItemItem.SUGAR - -
    -           
    -static ItemItem.SUGAR_CANE - -
    -           
    -static ItemItem.WHEAT - -
    -           
    -static ItemItem.WOODEN_AXE - -
    -           
    -static ItemItem.WOODEN_DOOR - -
    -           
    -static ItemItem.WOODEN_PICKAXE - -
    -           
    -static ItemItem.WOODEN_SHOVEL - -
    -           
    -static ItemItem.WOODEN_SWORD - -
    -           
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Camera.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Camera.html deleted file mode 100644 index 14cf6f2f..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Camera.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Uses of Class pi.Minecraft.Camera (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.Minecraft.Camera

    -
    - - - - - - - - - -
    -Packages that use Minecraft.Camera
    piProtocol classes 
    -  -

    - - - - - -
    -Uses of Minecraft.Camera in pi
    -  -

    - - - - - - - - - -
    Fields in pi declared as Minecraft.Camera
    - Minecraft.CameraMinecraft.camera - -
    -           
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Entities.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Entities.html deleted file mode 100644 index 0e43eba0..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Entities.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Uses of Class pi.Minecraft.Entities (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.Minecraft.Entities

    -
    - - - - - - - - - -
    -Packages that use Minecraft.Entities
    piProtocol classes 
    -  -

    - - - - - -
    -Uses of Minecraft.Entities in pi
    -  -

    - - - - - - - - - -
    Fields in pi declared as Minecraft.Entities
    - Minecraft.EntitiesMinecraft.entities - -
    -           
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Events.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Events.html deleted file mode 100644 index e7fa858e..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Events.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Uses of Class pi.Minecraft.Events (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.Minecraft.Events

    -
    - - - - - - - - - -
    -Packages that use Minecraft.Events
    piProtocol classes 
    -  -

    - - - - - -
    -Uses of Minecraft.Events in pi
    -  -

    - - - - - - - - - -
    Fields in pi declared as Minecraft.Events
    - Minecraft.EventsMinecraft.events - -
    -           
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Player.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Player.html deleted file mode 100644 index d0c09500..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.Player.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Uses of Class pi.Minecraft.Player (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.Minecraft.Player

    -
    - - - - - - - - - -
    -Packages that use Minecraft.Player
    piProtocol classes 
    -  -

    - - - - - -
    -Uses of Minecraft.Player in pi
    -  -

    - - - - - - - - - -
    Fields in pi declared as Minecraft.Player
    - Minecraft.PlayerMinecraft.player - -
    -           
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.html deleted file mode 100644 index 59e541d1..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/Minecraft.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Uses of Class pi.Minecraft (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.Minecraft

    -
    - - - - - - - - - - - - - -
    -Packages that use Minecraft
    piProtocol classes 
    pi.toolTools with higher level functionality 
    -  -

    - - - - - -
    -Uses of Minecraft in pi
    -  -

    - - - - - - - - - - - - - - - - - -
    Methods in pi that return Minecraft
    -static MinecraftMinecraft.connect() - -
    -          Connect to a local mcpi game
    -static MinecraftMinecraft.connect(String host) - -
    -          Connect to a remote mcpi game
    -static MinecraftMinecraft.connect(String[] args) - -
    -          Connect with string args
    -  -

    - - - - - -
    -Uses of Minecraft in pi.tool
    -  -

    - - - - - - - - - - - -
    Constructors in pi.tool with parameters of type Minecraft
    Tools(Minecraft world) - -
    -           
    Turtle(Minecraft mc) - -
    -           
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/Vec.Unit.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/Vec.Unit.html deleted file mode 100644 index 24c33218..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/Vec.Unit.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - -Uses of Class pi.Vec.Unit (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.Vec.Unit

    -
    - - - - - - - - - - - - - - - - - -
    -Packages that use Vec.Unit
    piProtocol classes 
    pi.eventUse to react on events in the game 
    pi.toolTools with higher level functionality 
    -  -

    - - - - - -
    -Uses of Vec.Unit in pi
    -  -

    - - - - - - - - - - - - - - - - - -
    Fields in pi declared as Vec.Unit
    -static Vec.UnitVec.Unit.X - -
    -           
    -static Vec.UnitVec.Unit.Y - -
    -           
    -static Vec.UnitVec.Unit.Z - -
    -           
    -  -

    - - - - - - - - - -
    Methods in pi that return Vec.Unit
    - Vec.UnitVec.Unit.neg() - -
    -           
    -  -

    - - - - - -
    -Uses of Vec.Unit in pi.event
    -  -

    - - - - - - - - - -
    Fields in pi.event declared as Vec.Unit
    - Vec.UnitBlockHitEvent.surfaceDirection - -
    -           
    -  -

    - - - - - - - - -
    Constructors in pi.event with parameters of type Vec.Unit
    BlockHitEvent(Vec position, - Vec.Unit surfaceDirection, - int entityId) - -
    -           
    -  -

    - - - - - -
    -Uses of Vec.Unit in pi.tool
    -  -

    - - - - - - - - - -
    Methods in pi.tool with parameters of type Vec.Unit
    - TextText.withOrientation(Vec.Unit u, - Vec.Unit v) - -
    -          Set the orientation of the text
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/Vec.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/Vec.html deleted file mode 100644 index db032020..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/Vec.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - -Uses of Class pi.Vec (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.Vec

    -
    - - - - - - - - - - - - - - - - - -
    -Packages that use Vec
    piProtocol classes 
    pi.eventUse to react on events in the game 
    pi.toolTools with higher level functionality 
    -  -

    - - - - - -
    -Uses of Vec in pi
    -  -

    - - - - - - - - - -
    Subclasses of Vec in pi
    -static classVec.Unit - -
    -          A vector with length=1
    -  -

    - - - - - - - - - -
    Fields in pi declared as Vec
    -static VecVec.ZERO - -
    -           
    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Methods in pi that return Vec
    - VecVec.add(int x, - int y, - int z) - -
    -          Add
    - VecVec.add(Vec v) - -
    -          Add
    - VecMinecraft.Player.getPosition() - -
    -           
    - VecMinecraft.Entities.getPosition(int entityId) - -
    -           
    - VecVec.mul(int s) - -
    -          Multiply with integer (scale)
    - VecVec.neg() - -
    -          Negate (multiply with -1)
    - VecVec.sub(Vec v) - -
    -          Subtract
    -static VecVec.xyz(int x, - int y, - int z) - -
    -          Create
    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Methods in pi with parameters of type Vec
    - VecVec.add(Vec v) - -
    -          Add
    - intVec.dot(Vec v) - -
    -          Scalar product
    - BlockMinecraft.getBlock(Vec position) - -
    -          Get a block
    - BlockMinecraft.getBlockWithData(Vec position) - -
    -          Get a block
    - voidMinecraft.setBlock(Vec position, - Block block) - -
    -          Set a block
    - voidMinecraft.setBlocks(Vec begin, - Vec end, - Block block) - -
    -          Set a cuboid of blocks
    - voidMinecraft.Entities.setPosition(int entityId, - Vec tile) - -
    -           
    - voidMinecraft.Player.setPosition(Vec position) - -
    -           
    - VecVec.sub(Vec v) - -
    -          Subtract
    -  -

    - - - - - -
    -Uses of Vec in pi.event
    -  -

    - - - - - - - - - -
    Fields in pi.event declared as Vec
    - VecBlockEvent.position - -
    -           
    -  -

    - - - - - - - - - - - -
    Constructors in pi.event with parameters of type Vec
    BlockEvent(Vec position) - -
    -           
    BlockHitEvent(Vec position, - Vec.Unit surfaceDirection, - int entityId) - -
    -           
    -  -

    - - - - - -
    -Uses of Vec in pi.tool
    -  -

    - - - - - - - - - - - - - -
    Methods in pi.tool with parameters of type Vec
    - TextText.at(Vec pos) - -
    -          Set the position of the text
    - TurtleTurtle.setHome(Vec home) - -
    -          Set the turtle setHome pos
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/class-use/VecFloat.html b/src/main/resources/mcpi/api/java/doc/pi/class-use/VecFloat.html deleted file mode 100644 index e4d39ec0..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/class-use/VecFloat.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - -Uses of Class pi.VecFloat (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.VecFloat

    -
    - - - - - - - - - -
    -Packages that use VecFloat
    piProtocol classes 
    -  -

    - - - - - -
    -Uses of VecFloat in pi
    -  -

    - - - - - - - - - -
    Fields in pi declared as VecFloat
    -static VecFloatVecFloat.ZERO - -
    -           
    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Methods in pi that return VecFloat
    - VecFloatVecFloat.add(VecFloat v) - -
    -          Add
    - VecFloatMinecraft.Player.getExactPosition() - -
    -           
    - VecFloatMinecraft.Entities.getExactPosition(int entityId) - -
    -           
    - VecFloatVecFloat.mul(float s) - -
    -          Multiply with a float (scale)
    - VecFloatVecFloat.neg() - -
    -          Negate (multiply with -1)
    - VecFloatVecFloat.normalized() - -
    -          Get a vector in the same direction but with length 1
    - VecFloatVecFloat.sub(VecFloat v) - -
    -          Subtract
    -static VecFloatVecFloat.xyz(float x, - float y, - float z) - -
    -          Create
    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Methods in pi with parameters of type VecFloat
    - VecFloatVecFloat.add(VecFloat v) - -
    -          Add
    - floatVecFloat.dot(VecFloat v) - -
    -          Scalar product
    - voidMinecraft.Player.setExactPosition(VecFloat position) - -
    -           
    - voidMinecraft.Entities.setExactPosition(VecFloat pos) - -
    -           
    - voidMinecraft.Camera.setPosition(VecFloat position) - -
    -           
    - VecFloatVecFloat.sub(VecFloat v) - -
    -          Subtract
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/event/BlockEvent.html b/src/main/resources/mcpi/api/java/doc/pi/event/BlockEvent.html deleted file mode 100644 index b8d78fdd..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/event/BlockEvent.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -BlockEvent (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi.event -
    -Class BlockEvent

    -
    -Object
    -  extended by pi.event.BlockEvent
    -
    -
    -
    Direct Known Subclasses:
    BlockHitEvent
    -
    -
    -
    -
    public abstract class BlockEvent
    extends Object
    - - -

    -


    - -

    - - - - - - - - - - - -
    -Field Summary
    - Vecposition - -
    -           
    -  - - - - - - - - - - -
    -Constructor Summary
    BlockEvent(Vec position) - -
    -           
    -  - - - - - - - -
    -Method Summary
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -position

    -
    -public final Vec position
    -
    -
    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -BlockEvent

    -
    -public BlockEvent(Vec position)
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/event/BlockHitEvent.html b/src/main/resources/mcpi/api/java/doc/pi/event/BlockHitEvent.html deleted file mode 100644 index 59a030e4..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/event/BlockHitEvent.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - -BlockHitEvent (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi.event -
    -Class BlockHitEvent

    -
    -Object
    -  extended by pi.event.BlockEvent
    -      extended by pi.event.BlockHitEvent
    -
    -
    -
    -
    public class BlockHitEvent
    extends BlockEvent
    - - -

    -


    - -

    - - - - - - - - - - - - - - - -
    -Field Summary
    - intentityId - -
    -           
    - Vec.UnitsurfaceDirection - -
    -           
    - - - - - - - -
    Fields inherited from class pi.event.BlockEvent
    position
    -  - - - - - - - - - - -
    -Constructor Summary
    BlockHitEvent(Vec position, - Vec.Unit surfaceDirection, - int entityId) - -
    -           
    -  - - - - - - - -
    -Method Summary
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -surfaceDirection

    -
    -public final Vec.Unit surfaceDirection
    -
    -
    -
    -
    -
    - -

    -entityId

    -
    -public final int entityId
    -
    -
    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -BlockHitEvent

    -
    -public BlockHitEvent(Vec position,
    -                     Vec.Unit surfaceDirection,
    -                     int entityId)
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/event/class-use/BlockEvent.html b/src/main/resources/mcpi/api/java/doc/pi/event/class-use/BlockEvent.html deleted file mode 100644 index 4b7389af..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/event/class-use/BlockEvent.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Uses of Class pi.event.BlockEvent (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.event.BlockEvent

    -
    - - - - - - - - - -
    -Packages that use BlockEvent
    pi.eventUse to react on events in the game 
    -  -

    - - - - - -
    -Uses of BlockEvent in pi.event
    -  -

    - - - - - - - - - -
    Subclasses of BlockEvent in pi.event
    - classBlockHitEvent - -
    -           
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/event/class-use/BlockHitEvent.html b/src/main/resources/mcpi/api/java/doc/pi/event/class-use/BlockHitEvent.html deleted file mode 100644 index a3d94aca..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/event/class-use/BlockHitEvent.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Uses of Class pi.event.BlockHitEvent (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.event.BlockHitEvent

    -
    - - - - - - - - - -
    -Packages that use BlockHitEvent
    piProtocol classes 
    -  -

    - - - - - -
    -Uses of BlockHitEvent in pi
    -  -

    - - - - - - - - - -
    Methods in pi that return types with arguments of type BlockHitEvent
    - List<BlockHitEvent>Minecraft.Events.pollBlockHits() - -
    -          Only triggered by sword
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/event/package-frame.html b/src/main/resources/mcpi/api/java/doc/pi/event/package-frame.html deleted file mode 100644 index 76bd981c..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/event/package-frame.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -pi.event (Minecraft Pi Edition, Java API) - - - - - - - - - - - -pi.event - - - - -
    -Classes  - -
    -BlockEvent -
    -BlockHitEvent
    - - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/event/package-summary.html b/src/main/resources/mcpi/api/java/doc/pi/event/package-summary.html deleted file mode 100644 index 0e489423..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/event/package-summary.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - -pi.event (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -

    -Package pi.event -

    -Use to react on events in the game -

    -See: -
    -          Description -

    - - - - - - - - - - - - - -
    -Class Summary
    BlockEvent 
    BlockHitEvent 
    -  - -

    -

    -Package pi.event Description -

    - -

    -Use to react on events in the game -

    - -

    -

    -
    -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/event/package-use.html b/src/main/resources/mcpi/api/java/doc/pi/event/package-use.html deleted file mode 100644 index 7da764e1..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/event/package-use.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Uses of Package pi.event (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Package
    pi.event

    -
    - - - - - - - - - - - - - -
    -Packages that use pi.event
    piProtocol classes 
    pi.eventUse to react on events in the game 
    -  -

    - - - - - - - - -
    -Classes in pi.event used by pi
    BlockHitEvent - -
    -           
    -  -

    - - - - - - - - -
    -Classes in pi.event used by pi.event
    BlockEvent - -
    -           
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/package-frame.html b/src/main/resources/mcpi/api/java/doc/pi/package-frame.html deleted file mode 100644 index 0949c8d1..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/package-frame.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - -pi (Minecraft Pi Edition, Java API) - - - - - - - - - - - -pi - - - - -
    -Classes  - -
    -Block -
    -Item -
    -Minecraft -
    -Vec -
    -Vec.Unit -
    -VecFloat
    - - - - - - -
    -Enums  - -
    -Color
    - - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/package-summary.html b/src/main/resources/mcpi/api/java/doc/pi/package-summary.html deleted file mode 100644 index 663c2c38..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/package-summary.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -pi (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -

    -Package pi -

    -Protocol classes -

    -See: -
    -          Description -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Class Summary
    BlockA Minecraft Block description
    ItemA Minecraft Item description (no use yet)
    MinecraftThe main class to interact with a running instance of Minecraft Pi.
    Vec 
    Vec.UnitA vector with length=1
    VecFloatA vector of three floats
    -  - -

    - - - - - - - - - -
    -Enum Summary
    ColorColors
    -  - -

    -

    -Package pi Description -

    - -

    -Protocol classes -

    - -

    -

    -
    -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/package-use.html b/src/main/resources/mcpi/api/java/doc/pi/package-use.html deleted file mode 100644 index 7bab0764..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/package-use.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - -Uses of Package pi (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Package
    pi

    -
    - - - - - - - - - - - - - - - - - -
    -Packages that use pi
    piProtocol classes 
    pi.eventUse to react on events in the game 
    pi.toolTools with higher level functionality 
    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Classes in pi used by pi
    Block - -
    -          A Minecraft Block description
    Color - -
    -          Colors
    Item - -
    -          A Minecraft Item description (no use yet)
    Minecraft - -
    -          The main class to interact with a running instance of Minecraft Pi.
    Minecraft.Camera - -
    -          Control the camera in the game we're connected to
    Minecraft.Entities - -
    -          Methods for entities
    Minecraft.Events - -
    -          Events
    Minecraft.Player - -
    -          Methods for the player in the connected game
    Vec - -
    -           
    Vec.Unit - -
    -          A vector with length=1
    VecFloat - -
    -          A vector of three floats
    -  -

    - - - - - - - - - - - -
    -Classes in pi used by pi.event
    Vec - -
    -           
    Vec.Unit - -
    -          A vector with length=1
    -  -

    - - - - - - - - - - - - - - - - - -
    -Classes in pi used by pi.tool
    Block - -
    -          A Minecraft Block description
    Minecraft - -
    -          The main class to interact with a running instance of Minecraft Pi.
    Vec - -
    -           
    Vec.Unit - -
    -          A vector with length=1
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/tool/Text.html b/src/main/resources/mcpi/api/java/doc/pi/tool/Text.html deleted file mode 100644 index e88fd0c5..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/tool/Text.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - -Text (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi.tool -
    -Class Text

    -
    -Object
    -  extended by pi.tool.Text
    -
    -
    -
    -
    public class Text
    extends Object
    - - -

    -A tool to draw text in the Minecraft world.
    Example: - - text.with("Arial", 18).xyz2(Vec.xyz(0, 2, 0)).draw("Hello, world!"). - -

    - -

    -


    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - Textat(Vec pos) - -
    -          Set the position of the text
    - voiddraw(String text) - -
    -          Draw a text with the current settings in the Minecraft world
    - Textwith(Block block) - -
    -          Set the block type to use for drawing
    - Textwith(String fontName, - int fontSizeInPoints) - -
    -          Set the font
    - TextwithOrientation(Vec.Unit u, - Vec.Unit v) - -
    -          Set the orientation of the text
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Method Detail
    - -

    -at

    -
    -public Text at(Vec pos)
    -
    -
    Set the position of the text -

    -

    -
    -
    -
    -
    - -

    -with

    -
    -public Text with(Block block)
    -
    -
    Set the block type to use for drawing -

    -

    -
    -
    -
    -
    - -

    -with

    -
    -public Text with(String fontName,
    -                 int fontSizeInPoints)
    -
    -
    Set the font -

    -

    -
    -
    -
    -
    - -

    -withOrientation

    -
    -public Text withOrientation(Vec.Unit u,
    -                            Vec.Unit v)
    -
    -
    Set the orientation of the text -

    -

    -
    -
    -
    -
    - -

    -draw

    -
    -public void draw(String text)
    -
    -
    Draw a text with the current settings in the Minecraft world -

    -

    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/tool/Tools.html b/src/main/resources/mcpi/api/java/doc/pi/tool/Tools.html deleted file mode 100644 index 17b8ae01..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/tool/Tools.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - -Tools (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi.tool -
    -Class Tools

    -
    -Object
    -  extended by pi.tool.Tools
    -
    -
    -
    -
    public class Tools
    extends Object
    - - -

    -


    - -

    - - - - - - - - - - - - - - - -
    -Field Summary
    - Texttext - -
    -           
    - Turtleturtle - -
    -           
    -  - - - - - - - - - - -
    -Constructor Summary
    Tools(Minecraft world) - -
    -           
    -  - - - - - - - -
    -Method Summary
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -text

    -
    -public final Text text
    -
    -
    -
    -
    -
    - -

    -turtle

    -
    -public final Turtle turtle
    -
    -
    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -Tools

    -
    -public Tools(Minecraft world)
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/tool/Turtle.html b/src/main/resources/mcpi/api/java/doc/pi/tool/Turtle.html deleted file mode 100644 index 5d7c3035..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/tool/Turtle.html +++ /dev/null @@ -1,391 +0,0 @@ - - - - - - - -Turtle (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    - -

    - -pi.tool -
    -Class Turtle

    -
    -Object
    -  extended by pi.tool.Turtle
    -
    -
    -
    -
    public class Turtle
    extends Object
    - - -

    -A turtle that can be used for shouldPlaceBlock -

    - -

    -


    - -

    - - - - - - - - - - - -
    -Constructor Summary
    Turtle(Minecraft mc) - -
    -           
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - Turtlearound() - -
    -          Turn 180 degrees
    - Turtleback(int steps) - -
    -           
    - Turtleblock(Block block) - -
    -           
    - Turtledown(int steps) - -
    -           
    - Turtleforward(int steps) - -
    -           
    - Turtlehome() - -
    -          Move the turtle to setHome with default orientation
    - Turtlejump(int dx, - int dy, - int dz) - -
    -          Jump without placing blocks
    - Turtleleft() - -
    -          Turn 90 degrees CCW
    - Turtleoff() - -
    -          Stop shouldPlaceBlock
    - Turtleon() - -
    -          Start shouldPlaceBlock
    - Turtleright() - -
    -          Turn 90 degrees CW
    - TurtlesetHome(Vec home) - -
    -          Set the turtle setHome pos
    - Turtleup(int steps) - -
    -           
    - - - - - - - -
    Methods inherited from class Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -Turtle

    -
    -public Turtle(Minecraft mc)
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -setHome

    -
    -public Turtle setHome(Vec home)
    -
    -
    Set the turtle setHome pos -

    -

    -
    -
    -
    -
    - -

    -home

    -
    -public Turtle home()
    -
    -
    Move the turtle to setHome with default orientation -

    -

    -
    -
    -
    -
    - -

    -on

    -
    -public Turtle on()
    -
    -
    Start shouldPlaceBlock -

    -

    -
    -
    -
    -
    - -

    -off

    -
    -public Turtle off()
    -
    -
    Stop shouldPlaceBlock -

    -

    -
    -
    -
    -
    - -

    -block

    -
    -public Turtle block(Block block)
    -
    -
    -
    -
    -
    -
    - -

    -jump

    -
    -public Turtle jump(int dx,
    -                   int dy,
    -                   int dz)
    -
    -
    Jump without placing blocks -

    -

    -
    -
    -
    -
    - -

    -left

    -
    -public Turtle left()
    -
    -
    Turn 90 degrees CCW -

    -

    -
    -
    -
    -
    - -

    -right

    -
    -public Turtle right()
    -
    -
    Turn 90 degrees CW -

    -

    -
    -
    -
    -
    - -

    -around

    -
    -public Turtle around()
    -
    -
    Turn 180 degrees -

    -

    -
    -
    -
    -
    - -

    -forward

    -
    -public Turtle forward(int steps)
    -
    -
    -
    -
    -
    -
    - -

    -back

    -
    -public Turtle back(int steps)
    -
    -
    -
    -
    -
    -
    - -

    -up

    -
    -public Turtle up(int steps)
    -
    -
    -
    -
    -
    -
    - -

    -down

    -
    -public Turtle down(int steps)
    -
    -
    -
    -
    -
    - -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Text.html b/src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Text.html deleted file mode 100644 index 74dd48c4..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Text.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Uses of Class pi.tool.Text (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.tool.Text

    -
    - - - - - - - - - -
    -Packages that use Text
    pi.toolTools with higher level functionality 
    -  -

    - - - - - -
    -Uses of Text in pi.tool
    -  -

    - - - - - - - - - -
    Fields in pi.tool declared as Text
    - TextTools.text - -
    -           
    -  -

    - - - - - - - - - - - - - - - - - - - - - -
    Methods in pi.tool that return Text
    - TextText.at(Vec pos) - -
    -          Set the position of the text
    - TextText.with(Block block) - -
    -          Set the block type to use for drawing
    - TextText.with(String fontName, - int fontSizeInPoints) - -
    -          Set the font
    - TextText.withOrientation(Vec.Unit u, - Vec.Unit v) - -
    -          Set the orientation of the text
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Tools.html b/src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Tools.html deleted file mode 100644 index 53c19791..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Tools.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -Uses of Class pi.tool.Tools (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.tool.Tools

    -
    - - - - - - - - - -
    -Packages that use Tools
    piProtocol classes 
    -  -

    - - - - - -
    -Uses of Tools in pi
    -  -

    - - - - - - - - - -
    Fields in pi declared as Tools
    - ToolsMinecraft.tools - -
    -           
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Turtle.html b/src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Turtle.html deleted file mode 100644 index 062c1b13..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/tool/class-use/Turtle.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - -Uses of Class pi.tool.Turtle (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Class
    pi.tool.Turtle

    -
    - - - - - - - - - -
    -Packages that use Turtle
    pi.toolTools with higher level functionality 
    -  -

    - - - - - -
    -Uses of Turtle in pi.tool
    -  -

    - - - - - - - - - -
    Fields in pi.tool declared as Turtle
    - TurtleTools.turtle - -
    -           
    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Methods in pi.tool that return Turtle
    - TurtleTurtle.around() - -
    -          Turn 180 degrees
    - TurtleTurtle.back(int steps) - -
    -           
    - TurtleTurtle.block(Block block) - -
    -           
    - TurtleTurtle.down(int steps) - -
    -           
    - TurtleTurtle.forward(int steps) - -
    -           
    - TurtleTurtle.home() - -
    -          Move the turtle to setHome with default orientation
    - TurtleTurtle.jump(int dx, - int dy, - int dz) - -
    -          Jump without placing blocks
    - TurtleTurtle.left() - -
    -          Turn 90 degrees CCW
    - TurtleTurtle.off() - -
    -          Stop shouldPlaceBlock
    - TurtleTurtle.on() - -
    -          Start shouldPlaceBlock
    - TurtleTurtle.right() - -
    -          Turn 90 degrees CW
    - TurtleTurtle.setHome(Vec home) - -
    -          Set the turtle setHome pos
    - TurtleTurtle.up(int steps) - -
    -           
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/tool/package-frame.html b/src/main/resources/mcpi/api/java/doc/pi/tool/package-frame.html deleted file mode 100644 index 8e4c377e..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/tool/package-frame.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - -pi.tool (Minecraft Pi Edition, Java API) - - - - - - - - - - - -pi.tool - - - - -
    -Classes  - -
    -Text -
    -Tools -
    -Turtle
    - - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/tool/package-summary.html b/src/main/resources/mcpi/api/java/doc/pi/tool/package-summary.html deleted file mode 100644 index 34dd19b7..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/tool/package-summary.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -pi.tool (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -

    -Package pi.tool -

    -Tools with higher level functionality -

    -See: -
    -          Description -

    - - - - - - - - - - - - - - - - - -
    -Class Summary
    TextA tool to draw text in the Minecraft world.
    Tools 
    TurtleA turtle that can be used for shouldPlaceBlock
    -  - -

    -

    -Package pi.tool Description -

    - -

    -Tools with higher level functionality -

    - -

    -

    -
    -
    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/pi/tool/package-use.html b/src/main/resources/mcpi/api/java/doc/pi/tool/package-use.html deleted file mode 100644 index 991e292b..00000000 --- a/src/main/resources/mcpi/api/java/doc/pi/tool/package-use.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -Uses of Package pi.tool (Minecraft Pi Edition, Java API) - - - - - - - - - - - - -
    - -
    -
    -

    -Uses of Package
    pi.tool

    -
    - - - - - - - - - - - - - -
    -Packages that use pi.tool
    piProtocol classes 
    pi.toolTools with higher level functionality 
    -  -

    - - - - - - - - -
    -Classes in pi.tool used by pi
    Tools - -
    -           
    -  -

    - - - - - - - - - - - -
    -Classes in pi.tool used by pi.tool
    Text - -
    -          A tool to draw text in the Minecraft world.
    Turtle - -
    -          A turtle that can be used for shouldPlaceBlock
    -  -

    -


    - -
    - - - diff --git a/src/main/resources/mcpi/api/java/doc/resources/inherit.gif b/src/main/resources/mcpi/api/java/doc/resources/inherit.gif deleted file mode 100644 index c814867a13deb0ca7ea2156c6ca1d5a03372af7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X diff --git a/src/main/resources/mcpi/api/java/doc/stylesheet.css b/src/main/resources/mcpi/api/java/doc/stylesheet.css deleted file mode 100644 index 58651373..00000000 --- a/src/main/resources/mcpi/api/java/doc/stylesheet.css +++ /dev/null @@ -1,602 +0,0 @@ -body { - background-color: #ffffff; - color: #333; - font-family: "Helvetica", "Arial", sans-serif; - font-size: 100%; - margin: 0; -} - -a:link, a:visited { - text-decoration: none; - color: #4c6b87; -} - -a:hover, a:focus { - text-decoration: none; - color: #bb7a2a; -} - -a:active { - text-decoration: none; - color: #4c6b87; -} - -a[name] { - color: #353833; -} - -a[name]:hover { - text-decoration: none; - color: #353833; -} - -pre { - font-size: 1.3em; -} - -h1 { - font-size: 1.8em; -} - -h2 { - font-size: 1.5em; -} - -h3 { - font-size: 1.4em; -} - -h4 { - font-size: 1.3em; -} - -h5 { - font-size: 1.2em; -} - -h6 { - font-size: 1.1em; -} - -ul { - list-style-type: disc; -} - -code, tt { - font-size: 1.2em; -} - -dt code { - font-size: 1.2em; -} - -table tr td dt code { - font-size: 1.2em; - vertical-align: top; -} - -sup { - font-size: .6em; -} - -/* -Document title and Copyright styles -*/ - -.clear { - clear: both; - height: 0px; - overflow: hidden; -} - -.aboutLanguage { - float: right; - padding: 0px 21px; - font-size: .8em; - z-index: 200; - margin-top: -7px; -} - -.legalCopy { - margin-left: .5em; -} - -.bar a, .bar a:link, .bar a:visited, .bar a:active { - color: #FFFFFF; - text-decoration: none; -} - -.bar a:hover, .bar a:focus { - color: #bb7a2a; -} - -.tab { - background-color: #0066FF; - background-image: url(resources/titlebar.gif); - background-position: left top; - background-repeat: no-repeat; - color: #ffffff; - padding: 8px; - width: 5em; - font-weight: bold; -} - -/* -Navigation bar styles -*/ - -.bar { - background-image: url(resources/background.gif); - background-repeat: repeat-x; - color: #FFFFFF; - padding: .8em .5em .4em .8em; - height: auto; - - -/*height - -:1.8em;*/ - font-size: 1em; - margin: 0; -} - -.topNav { - background-image: url(resources/background.gif); - background-repeat: repeat-x; - color: #FFFFFF; - float: left; - padding: 0; - width: 100%; - clear: right; - height: 2.8em; - padding-top: 10px; - overflow: hidden; -} - -.bottomNav { - margin-top: 10px; - background-image: url(resources/background.gif); - background-repeat: repeat-x; - color: #FFFFFF; - float: left; - padding: 0; - width: 100%; - clear: right; - height: 2.8em; - padding-top: 10px; - overflow: hidden; -} - -.subNav { - background-color: #dee3e9; - border-bottom: 1px solid #9eadc0; - float: left; - width: 100%; - overflow: hidden; -} - -.subNav div { - clear: left; - float: left; - padding: 0 0 6px 6px; -} - -ul.navList, ul.subNavList { - float: left; - margin: 0 25px 0 0; - padding: 0; -} - -ul.navList li { - list-style: none; - float: left; - padding: 3px 6px; -} - -ul.subNavList li { - list-style: none; - float: left; - font-size: 90%; -} - -.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { - color: #FFFFFF; - text-decoration: none; -} - -.topNav a:hover, .bottomNav a:hover { - text-decoration: none; - color: #bb7a2a; -} - -.navBarCell1Rev { - background-image: url(resources/tab.gif); - background-color: #a88834; - color: #FFFFFF; - margin: auto 5px; - border: 1px solid #c9aa44; -} - -.header, .footer { - clear: both; - margin: 0 20px; - padding: 5px 0 0 0; -} - -.indexHeader { - margin: 10px; - position: relative; -} - -.indexHeader h1 { - font-size: 1.3em; -} - -.title { - color: #2c4557; - margin: 10px 0; -} - -.subTitle { - margin: 5px 0 0 0; -} - -.header ul { - margin: 0 0 25px 0; - padding: 0; -} - -.footer ul { - margin: 20px 0 5px 0; -} - -.header ul li, .footer ul li { - list-style: none; - font-size: 1.2em; -} - -/* -Heading styles -*/ - -div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { - background-color: #dee3e9; - border-top: 1px solid #9eadc0; - border-bottom: 1px solid #9eadc0; - margin: 0 0 6px -8px; - padding: 2px 5px; -} - -ul.blockList ul.blockList ul.blockList li.blockList h3 { - background-color: #dee3e9; - border-top: 1px solid #9eadc0; - border-bottom: 1px solid #9eadc0; - margin: 0 0 6px -8px; - padding: 2px 5px; -} - -ul.blockList ul.blockList li.blockList h3 { - padding: 0; - margin: 15px 0; -} - -ul.blockList li.blockList h2 { - padding: 0px 0 20px 0; -} - -/* -Page layout container styles -*/ - -.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { - clear: both; - padding: 10px 20px; - position: relative; -} - -.indexContainer { - margin: 10px; - position: relative; - font-size: 1.0em; -} - -.indexContainer h2 { - font-size: 1.1em; - padding: 0 0 3px 0; -} - -.indexContainer ul { - margin: 0; - padding: 0; -} - -.indexContainer ul li { - list-style: none; - margin-bottom: 2px; -} - -.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { - font-size: 1.1em; - font-weight: bold; - margin: 10px 0 0 0; - color: #4E4E4E; -} - -.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { - margin: 10px 0 10px 20px; -} - -.serializedFormContainer dl.nameValue dt { - margin-left: 1px; - font-size: 1.1em; - display: inline; - font-weight: bold; -} - -.serializedFormContainer dl.nameValue dd { - margin: 0 0 0 1px; - font-size: 1.1em; - display: inline; -} - -/* -List styles -*/ - -ul.horizontal li { - display: inline; - font-size: 0.9em; -} - -ul.inheritance { - margin: 0; - padding: 0; -} - -ul.inheritance li { - display: inline; - list-style: none; -} - -ul.inheritance li ul.inheritance { - margin-left: 15px; - padding-left: 15px; - padding-top: 1px; -} - -ul.blockList, ul.blockListLast { - margin: 10px 0 10px 0; - padding: 0; -} - -ul.blockList li.blockList, ul.blockListLast li.blockList { - list-style: none; - margin-bottom: 25px; -} - -ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { - padding: 0 0 8px 8px; - background-color: #ffffff; - border: 1px solid #9eadc0; - border-top: none; -} - -ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { - margin-left: 0; - padding-left: 0; - padding-bottom: 15px; - border: none; - border-bottom: 1px solid #9eadc0; -} - -ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { - list-style: none; - border-bottom: none; - padding-bottom: 0; -} - -table tr td dl, table tr td dl dt, table tr td dl dd { - margin-top: 0; - margin-bottom: 1px; -} - -/* -Table styles -*/ - -.contentContainer table, .classUseContainer table, .constantValuesContainer table { - border-bottom: 1px solid #9eadc0; - width: 100%; -} - -.contentContainer ul li table, .classUseContainer ul li table, .constantValuesContainer ul li table { - width: 100%; -} - -.contentContainer .description table, .contentContainer .details table { - border-bottom: none; -} - -.contentContainer ul li table th.colOne, .contentContainer ul li table th.colFirst, .contentContainer ul li table th.colLast, .classUseContainer ul li table th, .constantValuesContainer ul li table th, .contentContainer ul li table td.colOne, .contentContainer ul li table td.colFirst, .contentContainer ul li table td.colLast, .classUseContainer ul li table td, .constantValuesContainer ul li table td { - vertical-align: top; - padding-right: 20px; -} - -.contentContainer ul li table th.colLast, .classUseContainer ul li table th.colLast,.constantValuesContainer ul li table th.colLast, -.contentContainer ul li table td.colLast, .classUseContainer ul li table td.colLast,.constantValuesContainer ul li table td.colLast, -.contentContainer ul li table th.colOne, .classUseContainer ul li table th.colOne, -.contentContainer ul li table td.colOne, .classUseContainer ul li table td.colOne { - padding-right: 3px; -} - -.overviewSummary caption, .packageSummary caption, .contentContainer ul.blockList li.blockList caption, .summary caption, .classUseContainer caption, .constantValuesContainer caption { - position: relative; - text-align: left; - background-repeat: no-repeat; - color: #FFFFFF; - font-weight: bold; - clear: none; - overflow: hidden; - padding: 0px; - margin: 0px; -} - -caption a:link, caption a:hover, caption a:active, caption a:visited { - color: #FFFFFF; -} - -.overviewSummary caption span, .packageSummary caption span, .contentContainer ul.blockList li.blockList caption span, .summary caption span, .classUseContainer caption span, .constantValuesContainer caption span { - white-space: nowrap; - padding-top: 8px; - padding-left: 8px; - display: block; - float: left; - background-image: url(resources/titlebar.gif); - height: 18px; -} - -.overviewSummary .tabEnd, .packageSummary .tabEnd, .contentContainer ul.blockList li.blockList .tabEnd, .summary .tabEnd, .classUseContainer .tabEnd, .constantValuesContainer .tabEnd { - width: 10px; - background-image: url(resources/titlebar_end.gif); - background-repeat: no-repeat; - background-position: top right; - position: relative; - float: left; -} - -ul.blockList ul.blockList li.blockList table { - margin: 0 0 12px 0px; - width: 100%; -} - -.tableSubHeadingColor { - background-color: #EEEEFF; -} - -.altColor { - background-color: #eeeeef; -} - -.rowColor { - background-color: #ffffff; -} - -.overviewSummary td, .packageSummary td, .contentContainer ul.blockList li.blockList td, .summary td, .classUseContainer td, .constantValuesContainer td { - text-align: left; - padding: 6px 3px 6px 7px; -} - -th.colFirst, th.colLast, th.colOne, .constantValuesContainer th { - background: #dee3e9; - border-top: 1px solid #9eadc0; - border-bottom: 1px solid #9eadc0; - text-align: left; - padding: 6px 3px 6px 7px; -} - -td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { - font-weight: bold; -} - -td.colFirst, th.colFirst { - border-left: 1px solid #9eadc0; - white-space: nowrap; -} - -td.colLast, th.colLast { - border-right: 1px solid #9eadc0; -} - -td.colOne, th.colOne { - border-right: 1px solid #9eadc0; - border-left: 1px solid #9eadc0; -} - -table.overviewSummary { - padding: 0px; - margin-left: 0px; -} - -table.overviewSummary td.colFirst, table.overviewSummary th.colFirst, -table.overviewSummary td.colOne, table.overviewSummary th.colOne { - width: 25%; - vertical-align: middle; -} - -table.packageSummary td.colFirst, table.overviewSummary th.colFirst { - width: 25%; - vertical-align: middle; -} - -/* -Content styles -*/ - -.description pre { - margin-top: 0; -} - -.deprecatedContent { - margin: 0; - padding: 10px 0; -} - -.docSummary { - padding: 0; -} - -.sourceLineNo { - color: green; - padding: 0 30px 0 0; -} - -h1.hidden { - visibility: hidden; - overflow: hidden; - font-size: .9em; -} - -.block { - display: block; - margin: 3px 0 0 0; -} - -.strong { - font-weight: bold; -} - -table.overviewSummary td.colFirst, table.overviewSummary th.colFirst, table.overviewSummary td.colOne, table.overviewSummary -th.colOne { - width: 5%; -} - -table.overviewSummary td.colFirst code { - float: right; -} - -table.overviewSummary .block { - padding-left: 3em; -} - -table.overviewSummary .block .block { - padding-left: 0em; -} - -table.overviewSummary, table.packageSummary { - border-collapse: collapse; -} - -table.overviewSummary td, table.packageSummary td { - -} - -td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, -td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover { - font-weight: normal; -} - -td.colOne strong a:link, td.colOne strong a:active, td.colOne strong a:visited, td.colOne strong a:hover, td.colFirst strong -a:link, td.colFirst strong a:active, td.colFirst strong a:visited, td.colFirst strong a:hover, td.colLast strong a:link, -td.colLast strong a:active, td.colLast strong a:visited, td.colLast strong a:hover { - font-weight: bold; -} diff --git a/src/main/resources/mcpi/api/java/lib/McPi.jar b/src/main/resources/mcpi/api/java/lib/McPi.jar deleted file mode 100644 index 7118ab8e2fd7816afaf2bdf81c0fb69540d64ae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26279 zcmaHS1CTAv66V;p=ZrfB^qfF>BxGh0Xh`nSH7?PXpSNwp(Pt;whaJ$tk?>&^lhqSyyV83+0NX5xXfB)wMkgib(1I@TK# z1tMtwSLXr#XXpQ~#{>ZW`D17P|1p64$H3Ud*v9GqWA-zI|GJNpt*zDnw)$tNhI`Ks zCx7mOjSK()_m7o;m93#AjiHskqoZ>wxR;VLTIg(cx)EujxC8Pp1wvsE1wXMWhz2Q1 zh6e`P87U;-F*@-Oqk*^}ls+J}`q!B5hGAz^rnZibj$vo#)oUBq&du!@P5asJDQPhT z-_N(6*PHI!l*buw*N6B0Q(eLW4(Eo{m3eH?qk>uhUFXG2otM?FC+Bytnx6A~Tle$L zC)};BL0$l#uu@+oKHien`8%?{mk z?SN>0!H2c5jr$J5uQTiSFulM2T z(a^!O0j9xcK~Mppbu1GK$4I3TqRJm#NWhk&u>XxuBdlePD~C1u;AE|pOG1}jo2Tm} zIEfu?Hzr4tB&USg@b^PyNe;Gd!Ifaq{5r$3If(hltQKqXuLatdn}Vy6S6Vue4Kf_} zn6ydE;A&Sbay-5d;zg`4{8H;A%ssY!#y3A7s4hUF$X=U4eH9gqcyKqU)|ZSg?Qanf z=Nx&w7cy{J(gL&YP40BkPxx`gaWkB1$xQH1+a3Y! zxevhTc$u)68q-maZKp`4AU;gtje}XI{zPl*k7vLmM~DPjjbe5sE%@w#0&3|d-N9(N zXtz(Cc4UUWU-Ne(M(Iy_Kysm48+)vc{RI|`b0tQVGbKz-yEbNO1bbCz309wg$GF&2T)_&J}h?W3Z?2xAf zQ^Im6pycQ2`yt+L}z)FP=yBl>Q@aD3ttH>F7En5Jf2h$M}s-BxvweZ zW(L;O-VRDfh$n;KrvW9AGIDFZsi#RB8F408@9%92?wOh<55-M|=5-}qS8Fdfy2aIQ zg9Skgh(NDA*xptxbn8QJj*zzVBEWwN_X}9eWlZrk|jU&YST7e*0_T5WMzDu99bNm#I1@1;KuG=-paBr zq~99X3s{C)(+l|)(+o}_YUCh*B!zg-5tao`5nd` zTU{*6!wWYDCK+nEnApA|cE~1AJum;Q;U8kydLz{}v zr9QrnSomA0t4DZoJe$^|G|kV!P0taB+*YiYNG-$2MXs;y#u(qHY-ud@8C9(CnH>L5 z{tw2#vPlk!8fl% z=qOsIo-w!5dz!=T5p--_1F!OX(CmaphT$6r5$$4x`n^Bd-ie+$YE-dzuHrkRY&cs+{IAO2J?Gu<9^orox`Tl5RBOkW88meH3|I8k#Kv+Pyo{DC|Ou z)dYf7y42J>37o%ZRT8Jvo~sUkEcF4RnI{~LgdvW9BJJrB3|cV6a&vv z^0F#L#UEiG%kS5ZQrf)+7-U%+-RN0sn{7P)c*Es8EdD;)!)Eo4VSIdi0%c5Al*WO6 zRiubjWRXyenF(G-?w~EAU8qce)-70d&}M5DgJnE zo#v{+O=bh^yM$%VBm5?5&vM(&>_n=Ll1EAtt-!eMMB@mYJxJyqC40%1+Xl(Qtoe3i zdAwK|Et}`~2gUp}QIFbJdi8$QnA>*vku92aF7wm#fO?14_VG5{^{sWN^ON%c;X8y) z$~;*%Q;FWW(&0kBk)jYyp;kj8bJ;vexza4MqLc@<*k@S+*aFyEInzw;c|LAKWY7XV zx{SL?dYf-^8MjGrTlTba^c?7!Si4N*obVaxTB&w{=9%eu+8$*wImV%5fgH3~8Q*ECd$@HLC|B5JsL zr$9uUPp(gZ38OT_byH&RBjUS02lr`5GXv}tSFigF_o>}Y&hg=H?_WqgFkX?o0<_?8 z4~*D>wQ#~{?UZivY_H+bls>l1+I23}G(8_8y75nyUxS}AdJ%u5^fLZ*_rWZpr5WEq zPtjuosh{}waWzuZ^?CjDi3>%|pa((Cgae5EL>_~e9OA}0|#h>+HYVuRwG(?@1HBf;OGX8+k6Z3e?CUzUsDqc_Q6Bk^9^YYgM>LeOGHxiFA?n&dgE;MgA-E z-Ktuv)>W?j0;7ssKI$g;3@D_KMGF;=(T{1F?HyMNq!iTUQ>YrUXrhngZ2RjK{gEq| ztQCD4=bq8Hd7HJHnr-{GrCL?Z7yHE7FICCKDmLoU&I-LF|E+c$})5R?ji2Uzz5~KExI+p4lRg^@EE-#$E}~OjQrquVR6bh8AzO z@gcBHOiA~_AuKu;YW;${F^B#kkSXFRFq0^gOp`E^RFgQ8DaJX*{>Jgf;l}ACq2N$p zAK<0QEL$#-BVB1y*_}$x-(~A(3(5_r_=^3_vN8_28sfgH70|7m;4+gg$AiCXr58W4 zN_uzaHpq1$f62UMJ*D5XA3JWGM$M|{I`TB~oO;u|X+5_goKbVWd{ z#DxYpJG6#>hI`2E80-N9^~Nd6{em55k3!k{7Ey&H`vX4g;e5*g#aeoGPw`g9bfRodfq))Nv8Pe zOoi)Zm^(MzD_cCx{JC&xKtVr_w z9sdXz&!D8(BP>&8PH><}0FNe3Wo@v|91=cNO0sm$7-(1o5~WKb%&ko%k9+sm5Z4x= z8Qu-T0p1NF821(#F;~$PtDH`5Hv|#HMDx@=E5U={#eQCxiSHSqb$KykR_jCuEO-q_1kUY*}fg6Y3=;JF|kDOB>ywZ&Y ztv@c7Tc9H5*1>iNxcriq4qMuIOz!eS0+KbMhojeZSc?p1SQ03(XLL{w!F)G;Qbxe4 zbjk_yDjh-lS6zB?6L$AFlNTa@Pc%MBX?-aG2j2v8kpd; zgUrAI0CHgg0Df}lf2G;~XYBtOa&HxLSL9PvACX8=yphbVK)WD%{uEdlGXV_<(zT#H zJ;MMBJv)d7rWWu>OlPKmxh7a^bHUdn8vml-))zOh=2Rs1z`G7IAN9R?ygwf@GP0-k z!uqZ}mD4lrpHx~qr&H|v?dWeOfXjYP$S9p|q%1+@K|#o`6QVk!R-&=-FLretSobzc zC@hw}gfQKd#mEM&_~S=P9ff;Pb{}~`6y1fnpj6?ziU``uw+OqQihSTzrlv#7fj=D) zs!Ce1d)QbVche9(#qsaf_hX3pw_^|65Itl^s=_B90`AI6yK%?h&2I!gMf;;}(lxBg zTS)V(!zbbhQ#pF+d3s7&yiDaJ+Gi!C`m^wvj5d3^W;^O!Rw5AH;@d8D?br?9I0 zi)X=0#Y=w1ZNSKQ=CuKN+P_K*r|7T!^9QD)_A$~GW6rVQK!Hk>qkXr;jJbTQEA}=* z8-hQxfR16Rxy?07ILq>=<$aQ*)f<74YYa6SJw-iaDIs7tF$MVt%gixFq0viWPlYTv zBqf}dWJ(*z6k{k{bIa~FHRyR6bixx`1aGp^(WTiP^*|x@r`Fw7QF!(M-Ptz@WHIIC zSocd79u3R0OecY#O{MURA3~Dj5oT%@=y<&S!CoXFBFcYdNwU*av#Q1uxR$_((-A!E zMa!MW#3Z$fQbx$jw zMbRI#aW83IqqeILUc_HbCd^c(nV=?Qu@PZ4Lw4>JMGKY~mFa`NXBS9}`eZHD!&3#k zJj=kNPEj2y%k_RvWJGtmXpPR^LxVMl!u2lMV=Gen6d$g-C8Dh?SF5>6j3U1^#q8?I zj0RBk4&SCVT)a`9RVBqG|88>{5!0r6bo#{eMM(BdI+o>lIT)vmn83}~J7h5I+EZal zPUrZF>J3Y1HEJ(BWLy(`t3;^{ptiJVDYYQF#b|+Ek80kIE}gXEw}`S%bWvcm@!gsl zm1ey`p^7BGLC*xKTv0VPa>^Po$F)6_R)>(uQ(e4Q7oYL@R37D2Tap(NAMWJX8T_D3 zar%VCKWmGmh=~Nh5Ey-Q<3~&3+s67vWva0aU@mfaV8>Nx&sx>stdI%?m)xpFTQQ`f zfB0TQT&+pVGc06*Cs@p=XXmO=PXKrb@g&UVw7_R-DF2<6(S=VRwdG&6Y7aX=I>l(R zky)hhvGZ1u%e5l-$G2TMDWOzFt~;IoG9%58eIIrH0nHP4lQ&|W3>)KJKExc`LG zC_U2wnJsi!Pe^J^7VzNnC%x<4A@Et>h=a!-+gwlBnaLku9-t)yK*0eJ1+(a4Wlba@ zAD<%xl7x^+L5K*6EIU7Bt#AlOMWiTr(KhqOACRKaA2iaf0`W$49(R>Pr!3gn#Wu3F zqAG}2kWQ2glYuG@J3-QrFw+*o#=JIidW)JtVo9kpN2~{3!q*m9HG0ZNI(RM6G`oTO zdo{}36)^odNiQS|KHt}zsMA`Ah8^EWDq&^Pq#boe5QPwVxEA2<^tjE^vlVf9)(>kn zYMF$0a!IVK8yXVmmZ5>k4Y!X8Uzo`z1smb&fhLO3M?Ompu~k}-7eS9I%5JV4W!V;C z=r%J-FU4J8PCA~q5pf206ZyQ|9ZlvI{XFb~THhR&vv!HcQ$HevxQR9=5HEMa;uO0g zyV2~|VE29N5X~dyjtA75M;f`-i)XkX_T59itOZj)|29C*q>>PM#4{--? z`0!Jfb!?G8XQU3BOpTya9n~~^9mR4;&zq{S;NE8|(lg==iU%;fB48GV^iAhp&OG3q zo~gL=o+v0Y6hfRjJS)yvOmCjqeT#A*WquMuge0IR8A548GbRsKzeYBmMd||ZOB&6wMk|PF(;_g6GD>48*c4?H17#TNTSv8Pg=&F)2hQLwtew3>M1{}myQfz-yEPs<0 zD(9{Se;@cS1;D(WN4KmbLzw4wiM{4Zpx7FyF0cuGu$je2)G1v9CWBf|%r5}oM1Fcs zddvhEDU^G$_I*5UJ~JhxIg!nKXGpg3zf9()W9dea+0}3L!5{3qu{X_-Y`1^xm3{WT zM8C$tE0m0O)xNj;_ip4Y%^t0XJ~Rb8UxGLX@dYkndPB9LzP*E9m$abkuf9oWn&+-o zA|$nQVjPQdOh-${CgULPl}zdF;Ka9CnEp8?^_RL=j~Bk`pvgW#@+^$`AMox zQCVg>cvJ~3waay3R}WNF*3fLX#fttoc;sv|hbwYn^8BbqREiP>>1CRYb(=HjhYVA)J68r6M9X9vpove9VVPnhj!$06^j;A zRh*22wE*JcJ*7>s1EL&Ij%l68=Tu1A+Cj6zGX%wVaYb;7+3%SNv9&U?b- zZ+sLwpY{xC?=(>QYXl09!lgtfjOFgRN#E5WIrQf{|HC&23H{-sIBy~n=pxwrq{X?P zz${4u7e@2INVr-d9x+B({arB|mL&Wyv(^FpCd80#+_x3HSR3E(Y4rmfEZ%@8=x6|) zV~m&VZnx;d6{tSpt{L_KRtPkN@dfRX@+amPL~=ZWG;CXeFT~EndpYF&t_?f9%kfhHW6L=a$=(JGsJga zK`Orw-m!(mQ(jrFrn*#i!m zLus`5LDa5bc^@z+q0WIT2*waPku7pn4pKUC$PoQKT&em`Vto0GPW}SxJ#CE!1fW}b znXsl=+PM#uo4^)7>e5OAy||OH^}j`u zWJ@P4Wz^Bv8KZ=8qlA|v9y3YvK;?%#*rFybg}Cu4BZldzt@A13#HVDL1cG!X=>?;J z2zVtFIk|g(C`v+}3Werm184{!3t_qYz{z8>)rU&mzZVYe-<~cZ2x{to{(gV#G`@1X z<~q)H-S?vFkQU&*TgKhw(XzzH_AH6Tf(iHH6xGhD?)QMbV%&J+zJc9I@7eD`?rHY5 z`riV`0_}q40QG=#!Fu7p0p1DjiT0`QjrPg<0{ApKx#7cA#&-cN}-3d(k2uiRCq1<3o@o zCqgTdvBzLt`)Ud06zy_1GD;Gqp6LP}WQk!gA)*FSfUwK&?_EHNyjjx%mqa>h3fP6= zb`z4K=>Z%J@iCt6kOw*p8qgK+zunX^(J0+?m{g!ORRl66Dur&R0qL*9Om{b)sE$c~YHQVJRZFSlU;(1e3u^%=Tf{rFW)ay?y^pXXzy0`gY zmsyS;)Xl@0s(I07;D;I*M&IN(4p9s4zP^kIsjnZ8N=B zN_~Oy-X~5WXjh=e5DyU@eQ#J^CycXf&v#?vM1w57Cr!5l13s4S;&-A*7aOin_Nr$y zLBCf>x1%8wBoc==);JWemAf`^A}3RP6c#nq;D@$w?#h|s{A~^!Z%3H|8_BMg^IP>M zDgHV!AIhz;_o`0 zdd3_j=SCvquxG?}<8XWVjh1me7wdAT$1mFao6Zoi&5}sT#pU$34bCG&GxBV8nwg0^ z=}JkDL&oB83ENRbOcq|A#~A|`El8 z2Y~=;z{iUK4(1192Y~^Szy~D;j28z82dw@J{K%g`4}% z4rIh1QV)q7&=pv*k4X;9#80u0$_^_H_{1M{52g-+3J_H<-Dt8}w^Kyw=2|kmUBbMg zi9E7SPD_hYyv<}@^+g_N75TQ_XNffQ9QWbS(Qn1jddOP%Rry1Ts6>7-&Aiuq%c+k^ z-($>aj>$ZOK|0f;1aon)M13*Ke8*|bX{||*!+^uWW9X^uoPP1JgiLBwN;U&cdQ_TB zicDIv#5GeUT_!U{+Ehw5eI_G^C7UsuRhy36u*0mwNP}Km#X8CNk5}0F;K6&j%vV@I zc4`=BE3c?CI&no|EQF?Ubhv<$EcFucd^eJHO-xCw1vOh$&lRy(u!>{uQN7t>t~?}VzQh4vu5#U~ z8exYkU*BsJo>q?0T()xRl9?tQyT)r1!-o&w0XxzRxVP0k1 zDKH5=tX$T*bgRtBj%lr2KYqhvwvKTvYoEDqw%9p!E6v!BaV>Z6J!E0Vx9ifJeva8( zZsLq7JGaA8UOaz`%b*z*XJ%!Ssa!u~D>SJ+9JJ`bHC^61V=Fx&9d&2sjtO15a^xyF zF&Qnic;V!!IPp6)w6L+~DmhUZC0pJ)X)8N%8CA6K!0oL$*#q6KUPJXQ{X0PO$Im7Y zwkfn_QD=i%(-(f5y!1i(LH>DcyhB!IIP+L&leTmokX_s+UU5(5&zwzSv>PY4ME4UL zZc*tmm9GfTP-Mb$Le`c3SUG?ELPVbgkv~+p`;SgZxuu4m zSh%OG=OEwGGfE|*PN%;6-~UN|XSV5SSxjE4wQO6dGgl#NQ!We~YH`v_-Z1;Stu^yfbmrLgf zP4&nXOcae!9;4ywR3*^#=5#Pn+0o2dM}bi!QJksrx%_3#%Xe_p-hme)>llE3E8Yc^ zD9ic|3LN6LW7^7rAZDedhwv+j|F(&w_jR^C|mPyx7qXzbxZkj)6PhsL9gB!C$kGa`@SW8AHV-Mn5jAYJF4uY2|JDLK4$}-ZuolH* zoS0Tboos{oQw>O!nOvAB28byXvI4n5O&|iFr+lItpsYjmlI22gWR6>iwMXR8birRm z5F1dWkHtu^PmsV*qv{Tr;uiYm!j-$`7JNi623_+ebbkt{W&^;2J+J~vYH3PB^#{Hs zJIyn&p8N#8;htGf=5;1m3NyQ3y?|jVx~W1)zgPZ~d*NbBta1XPl6P!m_FIh`U4xr< zp#m%Tukih?SS7k0eNc6f3N)~aqLDKXkXRJO2$&bzI}dc5&@M93vxMCVWl4bI6LJx6 zy?9;kf5s&P2JU>>Ph5(D{*-|IcU%hFIGH<{8$13JnZZidvOkgObF-r%;ScLBpH53| zfjK63j|$=(z>;pjAP_)GTHHC6u%6I@@K-f~90~a^pbz6be8w60U;Gir&4y%pW=Wfw z_E+{<#~eq`*ZbE_cmSFMAMg&kieKRYLG+l1P&0-C{D_GL?Rf|%2~iZ7si<20%9yLf zTBc)fvsAW53HhB}`l$G7EUemw)43&yn3FA^>LFPz-)2tf1j-H-S^1?>o$#!=wGOW1 zYSoJ}w(IoK?+yDJgt07&0zv#at=^NZY{3;an_JY&u(QbLdpyDM+&Iqj>W5!MqlHWL z6pK&tfZ8Xd+2dM!Iv2`dC5!p!p%ocDp)go4)brt6RWnGBpU{I*%SM?`(9WX>ienzu zavyX7-0k~uku@nA#Rpa$q`DAEo!Bp=E78<~!mJ)jM)rXa!y@%IYt07-7aXkK0--CU zWuqjNsdUu_V5}rl6={RisIB&*0^-BkQ>^nkVI?vd$4jk2pnzSgTkvGVbGt5AN216z z4%0nOo2Se-3}Tuh-ifp|^e|!ixO{Qe%rX**uWj0>cVx#Zx&2qfshL|F1vMW{Z2H5l z)SaX}Lv|G?O6{0lF7DUAXkN6PMr!=^-|+YDO6a6)$;4;Fj2jO$$Rz@6K-o1sDKZ5D zeEbwJJb_i*B8OOvA#n7hatgID#=U&U&OJr$Fa zm*!{|l5vfOUf_zf$7->rB;@Wf1K*J9;DcZgJHtZa$b3Q!+3?P}NO1RwX(1T%Wkz#m zBs{dttXs*wNOElb2gd7K^5bGrgq#9okWt_hZ+5vUuDP6BJlf;B<6TI|7H zq1#G(aj{?T`vwFBiWp1L9{S4!^$v|hLo*0da>x9)oaHeyD`0N@25!l z^0%Vymnds^fT?nU>x}xHl&{aJsOAZlvPyTIJMbPdFbcf}rk}~U_JZQMe5762YF%}y z#$tN5F|Tx?_umr04cz?<)KBcl{>T9TPyEPP>AM^MyJo^$SyORQ4&e*V+*2S-u11Fs zv|1xV0i+AGq2Xb9oXq)l&0 zZ^cM5>+PGy?tn=C%r8097cxtPKK9cZhd^FG@|1opZcf51b#Rw{!lA(h3@%j0kl$01 zMk}S-Y-)hfo?ohH$scyiNRBqWB4kI7Box+QWEr-L5yA|>*09MA8A1zZH?(}$(D=<3 zSO{v*b)0sTR`A96=efW}D&3%9`q&;8N&=M{qS9=b5lO3@zOl*Tj3pm>Mhx5>#Ia;A zTj?H09F_JifvA`;`W&j_s6b4bB>JSEp2)8ewYM{{LWmwLMwL>BXmC!)v{o5tn_w>Z z4w&Lrx}pUVD+$HfMrXV(Ww_{4Pbdo=cAJh>%m=)>b*4-3=3z{Y#px97b!k20yXH^J z^qecu+nqp@3WE3~OGAO>O_jTeu$b(7uzMKD`x&C-Q;s?t)rz`6pFG?GLUfI||HY=9Jp6m7;y3DIi}5fJwSo8wrQO7Ne)VPJ$5 z*J$1l99FTaRxz(!P?6U_rG%_+DzA3!zWwN_wdk(?in#S=V=aFv7gB0E74zikE!!z1u=W~*^a=2KY;FbiZ1x30HLdLhw8-~R2zKvjL?HPz?y!e z$>o(9S}I}w787+Fa>osNdFQR;m4W*OD9M|IaD}y)*h0b|O_JELo<2tbuDIw+(E$~UMj|JgI!(}^k>_=uzOKcO;%2`qs3-tdE4`E%r&Pci5NYk zagpA-#==fDiHI{k0v=&k+ob$B!X}IWT{FLDyPz~*f0LwI-rgEN6u~y5jeL*9h=s_! zHafH%&a60rUa11)fdn<^qsRiGuHHiE4nOLvQi^X3^ z4M^A00}X>#6RgiGn)hq{K(UF(s9$jFuq8pD($m4Tsm#v!b0bYJK`A&ExAoFQ>`gu~ z3BGK`>r)(}$^wRnersAmP7_V)?z`WDrRjo4W5U8t=Xsu1)IN5ZDQG&AZ-}@HaW=X? z0vx=A8u>t*W-Mo!L2@j8b^{DqrT``=l&Hxr-XPvi!FpCy3V3rK1zMyr{~K44{k!y> zZNf~`uDqgyJ09noFepDPL+-ZGnD3s5ssT=UaTJIF`ku-RS}N`!hjc*5mm& zpaD^D%|dj(euSIfT1Gj~K+}m)v)ESn8bJDit;LS$EpZ^ye1mlT38Nd;I(lOMcw72H zs8uV)3)0Vi01w*554a1I)gewwsqF?u zlO60}xbYilXE@82u%j)Z{OE@;8}$u@`6P=%7Yj>+B`g!sAY30ELP4-?Wyv6-gjA=^ z4|q9hHhD?Q674jz8&3m<=Qf+D^DL$5VFr38GvekTdT}g?RW~hJ#{hK(AE{aHa(TuY zTjn;J$?h#1Llo521M+yZbFt40GD@9@N~m2<(Ne;YN(vTX?D&Y({7$>v#Q-I%L1rZm z_ifQ(mn*q?OjQLcRcEag7mB~y#RnW$$NR@iCXV@8*Xv-zEni8Y*$h4<2d8hrQMwgx zs6Nz(tdu^HyW?-&5xjfql*I#g3UY9zQ$u{3B|yquz_&{F_&2HdqNu(Dj!rgzDANg* z?@hVL4rwXBB6`c|;$G&c;I9$L2~JOIHFhFY@hQJzeC6!jCS|gO3B*_x9Odt2KO?nX zo|| z<=?RT9X7LIJ;>)!mNPPrH>kvlSc zHiRa2M%WIbDc}D$^a#p^#h|2z(8Pl9=ZD`h$VcgKQ)6gR>!56>fAxH0T*0Z_f@pv( zlurUM6?o~dL>z;5Cn%`#M>UmFIS~i;$;Z;VUmFa;5sL#UI#{Xmsq}KvXUS@OSm`qSaNi&Gj)RU&t__rgrlb3B>(~D3{R!uCvMG)LJ*hlY!I!pcryk|pxE+0Xc*=1Z&gK>l`ZoE+F}aLgCCY5dcW zAmb0w)XX*aJpGs@d_bv!{T@(zU`+;vd$q1{_Y!7Is`I)nLItn<`r?r9=H5J?@zV?k z-~C=#=R0w90Nc#B8t?G1obsr!T>cw8x@|S3v%3q7(Z%!TOS5?dm+gcot#PT^>^rLN zp{l|BF#h|Yv@pF?_&xOqJ(@;W-yy7aeZjGcdO%F6!j+a5rgdEtywQ=e=zK2={@n4KU!t?)6Cs_Xg%c#JO<^Vu*mqCE5d*5dOQu1^lDAl0m%Q{wgo!aqjrV-(OjY z5pGk6tC%Ti!HX{lQmMxf^+6z!hbqOr404!8-$&+EP=n8i4%dWk7HcUawbUO`pSBK`PBUHI0}oLxLx zsQZhs{Yl#Vi;xKDOJh}RhbpyXwxit)Ne`xn)VTx6=U48IjuobfK#$BX_(B~9cF*Ej zJ-~O#V=@Q7ExJaExz0P$1?&+1qc|MvuH=t>rVTkg zg@wwmLCav`6v5E{D=6d7#k8R+n783!~3-5EG4n!5x7}9 z#aS|=@0T~;Dppoas!`vY6%hEfAbjKl&&gOX3p7`viRG7cmlq1=0(krIl|4>w2oHkU zT}^JL*d0&LcXLGna_jXABZ?VPev|77>nZC^lTtypA+dmR`9Cx8P?i~jK9Wa=LdE2k z$orB(f(4r8$ysWTWL}eNrL59cUCs4SB()fj_AJw%uZhDbe@|t3(Y3e6bV%Lamf_GQ? zU|f$3Sk<2`zV30@(ZxUpUqF+B-_F_5QPUC8MY4m#UBHQej>w(HHh@t%a4XX+^9f3v zF&9bf8oslbFZm4+cMFar)OV$?w}Y4EK0&()CUpawk{{yOp1Z5#mM}%S;Y3m$*t2L` zkNYjDFc{X~xJ*;i#I>!v?WS;6smsm#>tFPxSd&ll4(I}EFCjd%mMUp4 zZQ#EVb}D$>GAn%n|EH6$diCY4e>836ABO+$b%q}&|64Fr*8Ep(%@-VFdt6Y0op^DO zrlzEr#+*lGK=-_XV!IMheZNMUkqL9Ze!zH9E_FhGhx6HTMK{v)v;t-zT` z$g~B5y3Xoa6?hzUKDsX0ebOpdCalOGN;U zf%=EHAEai;XQ19v7$!5_0pk(R(reY2H5;$8Ojclz-`?DEfp56Cr+ycGct&g#o}zN^ zLcX0&2-#<5{p^iRpFn)~5@rSQK%Y#h*V?7PSZ1!)Taei`C@xE9uhux(ohh+Mogfxp z_Y~ISMmiKqDLCiYmTYn15&}3;>e7eSWJL+h?0x;z8))s$SHiuZ~TISNdw;iIw%zWj$*gjoF6v8tgQp zWD##7+5>q)ssyg z4OYs`@I+R1Nnzka&wPE#=_tHQM5%-D1@oc5ev0cvi#%!?7k*3i9pL0zBV&p*^YgqY z+#7}9M0^(k3=yC|;zK8$MDHk9?G()EE)$B9kh#u~9iaDFX)p10NyaNZiE=$FfpgvHl=gz5P4JDv z2kr@s{sRsKet&8&Qx;p$w`uAeEno<7zZ>I}cxd+|9KYItOS~^GE6y6#xc)@_Qtg?< zVxw@3K+HglL`=ssHqf=wVFKk&*To4#i1|YhvDvwg3`mxJ7GwyChk!t=(?Isq68X)+ z$TrsS&o>(jaw;n~YDYrEmZZ@2SN2z~(N2FST)$!HFPgaKYQ}5*bef2qPT>&`w6Gvvg|W`|v$%RBe1Oq6HtTN2sg4oA?a^OxLbNJjMbD-e z>%v}!v7Ts&xA}Z8*_XHCqGl95uuC=Ub2SFVMbE3<`PTTkh5`odrDHHTj^p#lp`wFy z>Fz{U-h|B4;&>9dV((InkR155gnU+9)rltRbJt9`N`v1nBU}bAX z4N(*yG=w_`Z$Uwe%(t8{)k1OXkAjsJL~%p$Dg!Gi=}qV=kMm=Jy@YwM3;Z)FU-8m( zrKzR#6Hi~IQq$Dq2)>fTt98dz#~jmKN0(LKufLbJ0QdtdcDS#d^TD;j?!Tr)Aa>1| zN`u@n+&-Xxb%_#Kh1^$*;AWAv$D$PRUpO)VnytRf70>%R=T zk)GfO{gJ2pixM!7;MUR8JwBI6sSe%AmDvFXd6+0V*!J8KTP2B zaE0YM^m)}eTbER&eydun9tI&M?!&-uby2?YA8#*anIUX0vWrcDz7k8V+p~(_U)a>U&Dq6@;5H?}g zDas@(ojthWsBAmP)cJeN6elV}ilC|(oVFNYuPM5@lC=I--qJ&WP>z_oA-iVf`|b+k zQ#bX{U@m5N88+U_H>g*qD7~Z(kNEoZ|540WhDEu3ZzCNd$j~4yNVjxIGe{4OG)SkE zl*AxIhk!_Tql6qlI;0V4Bpp(uq>=iM;yK_Pf9KnKy${!(;ltebo@YIK_TFo)z3%Q^ z7T)i`{7seIr|g=Pud-VFdv>`x(4decCz+MB><#_}ARIO@(pe3|Gpcw@5XljtJ=n&XOPjb0|HT79-sw$xuDMI z%|*YD|G-v_V-dWsK-T5noa)dT;aS7^ot=x#Nv!n|*h^Lu6P@IvBlb+Gco?4C>*x2V z=r?nLb9wjCV`G9hy(Qgei)}@By|C7R!v`|;8xi*=n;8rqX%RHK-LhjR6$m`9MzJZy zP}qIL^ExQ~sTvW60tK!lpY^JfVAqUgEZMikp|%{V%_3_n4|Z`A zM1rO;sV#A({A>>5^42qYZmHLbYE8b2a85Thieh`rBdFb`VqG1~9O3kZ$CB%5df9TN z!d=4-qMf0`VaQSJ8?^S}0)DrVTM;hp2Lp~8PpX3tv)Xv;*yB@ILi9fB*uYrxaMzCj;8#>NP~ z=;#g#gzbCHQ%W751J{J9i?9fF*L@TjDpW-4m^euzv z_B2GECzHTA&oCifJ+-OOiV4WTQx2q!uUyjm$ZAnfr9Xw-Fr@R5GN1n3;~`$Eu#PAd zXvLxhCHdj}=3R+x>jck|^vU=72i zwk*UU8!Amm!ClF{>p_|Bu!W$+d5darD+}x&l^JzAv$C2@olKAG;W&MFl^|`^N*>RC z0IX;?bU2)fZ9SE~y^wK#^nh`Ew6qUPGq_NrqRY&j{NlFsnbG~Aa+^V+M`PWd#-j_l zf%UXC$;H0%R^0F?=2?VCu{=j2{D;6LjOO=p&B=TgLHF z*=DJr)we#dRo)f$73c6m>5nv=7vbK;-45r+T6YmOaR{fVY;)j~82d;yz9yJWPXzBr z3FV-S=)uf&7v@Ki|7%dmSv|RKH5J&=9u-^>B(Madn)q$+xSBz0I;SuvYHK=bd(c6y z{=(>|*y`vb9kvh%mRNHX*8r;}ofEgqvg<&fw{L?V0>8|#IO@JI56=so;qo%mKqKje z?OCUe+M8gq-sbUg>A_8J5b0aZF0iE_T!(nd#jjkk(j7-9+E6x`)9*r>f| z1pI)O>-}U?SV%KxqTKEQnN%;H4iSwntoWllr22Oz0ofhzyxs~@>)6d96q6$?W2WFV zt{qDvs!`VBYE+5&WQ;GRw$Z;W8*em?yf8?R$YpHsQsC(m`bY>(wW68v%X`gqBj-d^ zAR;Vz&CXky+bcYgzRH@i7LSP)&z}U(rAz2oaWXLr9Gr3*7(?tJ+0^cq>#Qg9*k+VU zF%^9Ia!vG=gi}B@cFyDuVRIRR>SrR!3k8^TmL$x5MbT;x@5))_k&NRtYAjBYP3M{d z1Qwg%oZFA~ChcpmhoK33FjW6~C~D?*4sO5y)}uba&RpTXZz_D-ff(@8k%L0`JHwB% zOC%ZP2sGXXc5^&gg~S&_hdWZOEoj@B=#?5c@82Z%dG97CIaC@Z?=w6j+oM^}1Z0sx zLvW{oY)c`7!ci++a{PA;=#Vc4l#&J^cUL->Y+F0RlFWcl%M}$9UP|bnA)W1L5C*BQ zG!v{W8Kq3_ok1Q~L%%f8N=lg86RCyvYn(Sqhoo&($Q?gOQN5U(-A^ujh$VV}!SHSa zqth>$w}V9ZtVAeBOOXdvH{ylYtH9o3f>p`*=PIV4;e>&=A5}&#(pvr9REqQ5QnlXA z3QWTlVPx_Xc8|d9LkqJL<#jtrS{gr5G6NSn=mxJilaf@c5`7E5P!5)NosE-0A9knsh?o=V%vBp!!t%1PT>?O z{)lM2Ry}nxFWK#~GM4}`2ZNW<7J1A0Gd3+7YDDqTl_iX>@n6Skj)}gz*$K8vSM!D* z>g(|u+MIMf%GdJVY7WO`fAvUjC(wy(p((gqX3G_k^2X=WIqsmC-9q3v^S-`qO;t_1 zIEB-LSZ8sb7fKL8yy^PD*&Gt8SkeQIRu$_V)8^Yy-?JL`yK}!!fHm$2WglRMz=s)x z^twTQ9=7qkW(%QxhjCFhvUke-yWV`G8% z!bQ(98>&5GF#T09S!-WAWio%s%PF4!u$GBV@g3=VcBn&kK4DMmRFWq*($>l23zT_O zB2oRSqI;PenG2s&V3W+fO6){rOpGO=-1sECX=DD-<79IMc}p2!@ALhy63ZVl=QXL5z3L(>uyNjFzdPyI+O3h6+OP?rgr&qY9b=6iR%^LRZ18t=c zaApu5-vfNV*t=cVRLxM!L*7BWUCK76WI0uYc$-hlLo=!W^ET4yw_7}$eyztw%grm3 z^DHV0-p#XuwDUWw7P+_ZyQ)78$i&!Cz?m&r?ZdzyN6)3%uG#DV?dZYjk}rA4>iqv} z^aM*!F>%30&3#z=RoZ3#QvuD<*wh9#qp(>%v9qm|?@=zST2Mm>7=(hrvEJaUk@iJA z@To9(q++B#)&$%q42}&4f%n>{L2P6`A1GC7oq%R^J4$mNVIGkx^i8RJ z!F0TyhV$V0zCO*{x|vF&Q0H(^b%JVZ4&aqGJz0{K&_zbv)_&3;y0Y%#dpZ-h*$9mD z9{mdK{+%-R4i79(2n&DJ!88m{G)vWdl9ok!>pVyojYIM~|rXTRx z1Go9#p_Ei0wP-yfJ%!dA6a>I+g!#J^4;Nu4W~yN^!Cy)LpSKG#_xRfZ*R=8?(<1O? zAhn|NOqsA>Y}e6$Y{lH`{GyI0nm?yqXY?tC>RP*128sOm4xMhw$1ZuK9C7so!XC{8 zwN=cZiu<_vgs0xR%lO2WH`e_8OWYt8jm>=ol8+P(Zeb19)m-uZ12NnsSyzeCv=q*&0K$xC=O| z*ch;!z&8xFk6((cN!S0#M5IPCUfv7-yvJ1h2A9)5zMfxe(q)-TF{% zf<*#ebC79qg-xwnuI>Cu_?mo0cFV)W-W~x^Rgs4DZo3JWkhDm>NjX!>0fBWHcUk;9 zev5v#p#=AmUQ!cQ=Q!?FM^MbSKE^1(#bBkPYUQy$?&g#0XNWCG_dUiWOd4R_DF+u!8=Yb{cY`D6+EHT;}TicuH<$r6MUk* zW>lAx>1FO2$=JG5q!uy>EKPX~OipCMEK&oef&>!%@#E3(`a#x8N_XCZ>q1oO75Wr~ z0}`=M2iv2zO#w)96;VkR#1%?H(IOt z$Mn9D)Bv2`!6;-L8|f^BkW3T|in8N#wewOQ7_06VccEwXnzK5rzTf|2ZkU6M3Y4xet zGRl`j`txUEq#on#iuI47${usg^^m$}Y;x^?Z9hh$40$~T4Qn&p)&fvM&BqRQo|-qX zF7d`Rh;QoL>BaN_`x}x8pVWY?yZ9D%dbqXZ9|@-(u;;_}!k+QFpX7`6rkm<)Qa^Kd zm>Alkg)i*2w|~y}OjuAh>#{4hh(194CRaA=nty5=eDVRWGGlt!&EPw>4kx#DR`8s zU-ZLx-$Y^>QdsFP#t@=a2_`Se&OsXwr`5lt-s!yWq~H6=ck2_Qex6vh9*O6>p7F@m z`;C1Ir~2sMK1V!1E%)-^J_+K>C;d7Tk+k8T-Li7q8l&-kT-Xt50K;x$` zhluhm#ErO}7;H1H@0*b9WG!p7h~DHg@eIFjVvg=h_04|x!N}BXFjX}>689@3)Pv!q zXFjB8y8cPU&EGK+YS3P8F9wQ?AqdH*A*Bf6{Z;N}P4&k7#@C>fcdC>Y=aLlG=?-&J z8_ka$qb+G7=5b4T$=`oN^^F)anG=dG$zC9+nv+=pX^kUpp2)T0FvLnUdSH3X){%&W zkkflTdgzN}I@3CmD13Nd%0tI0HhWQjRWW2cu_$&4a2&CA^LNho zw}qNBy`m_F_fOM|SdN$mkPm`PGD{t(Q^Ua~ErRz~$M^WQEulU^rkR5G)k5CyX>%yo zMyC0o@*#=@hZu)$h;Y4fwXLHVvY*zep{RFR7!cx1w%U*&>!hVSxhJL_#hJUnlEc%x z?-b5C#vQKdv_<2Z=-8@oNS;m6CL=0OF+);inxaO0IP4Z6^;~X1=M%-wJ(pKi{6{73 zRMhyM^&~?>!H7y9*~I4v({ggWKz6d*w;o8K(qpIO;V9B3U-)O9k;$HesVLH?h|6*=Ojgp*(KU{xjj`uM>CGM^bjR z1?Oc)`g|*5e9)47dwNCR?+bWGPHs`nrFRbZ`Lc6vkGg!gkmn&M3^Y+uQSLRDwh!qu*J8OL_4xew2+=W=7K>#4<;2_QW&>2_d&vdb za{aMB05tkrC^wfH82$CXPP&7LQI(QC)u~F~$6yNkw`Sqd*10X?__(sElzf54i|tLz zi56HiNVbN(=`8mSTirh@{3>lXIVzQ_x!RLKOKZ5|GN|I?m-FsIYE@=Lt|3@;Fxk&G zlgel&c%f^b%}2z(V}k+dn8t2Vh2YJ_R%UrUHdZm6u0dOHM2WbYeBzWf6GL>H>`I={ zwtgDDPO-bnQa_ilEuyqyXF&nR5hkg|Dpud7@f)-Po;=(LWxCDCd^sf}4y7;rBL2ss z42VEmv`%b1d`t7JyEMt%cqPVnLb9<gs`*v)NRLQKkqr7(csf46$8{-tIpqby~fD41JtMvSSgb`Gj84D?0^eY3S0#~iHqlLT!ShhQbi{3x%!3^=rV3vd**uN#2lA$CDmco9S`r*BQ-APmXZbko04U>#nNM zm@v2I;_|!;${#8?am1`0INaU zlKFLxm)et)dF&9-vY&Hij4g`*HlM>BbLiL9^Wu++Hd9>RZkMffC3Vpno2W?PVcbCh zzzWeg>B6!gir$tc+U+_i+~01XKJ*SPrmt2RQoXP0Pa9SQq2#b{B~Xo9;<0!*@{yyQ zwOP<@BJ6pCSwlxsd8~#GrCyiaCr|lkO1y0Sh7%8e`;)J`%9Ga9duZJ1g%g_(yNgC` zm*u<$faa2+;Z4~(Ry1j>EYqH~FH>Ln)wH+jf&;30GN+G;T5h^?-d?Xm`1pE6@($fu zCTRks$~iQ&m-+2JN8q~O0& zrN~SLo_)d0^Wwy^#Z5$-;Bn=F?8*_NjQ~Q_(pJ7;r5NsY<@wQ5+0cGK z`V4i>*EEPqbk7f*Brsh@j&EWMZ)aE;8Vby{jYOak)D7sgC;N0KA#cY6w|&w8r8mk) z&IxB!{niUF{NtV{H}f5bB(6H$i@XuP^E&GJSn`Nz26IqZb&%4%Ra=BR5BWsG?|Q6e0!G0)D8wRGA2__y;y6J$&({d|CC3S#I3i8vR z`Iw-OB8WS0h`Nh7Y?YJ7dPRt}TNu-xQ~o~5z4Kw#=Y>sf08hv`2Vglaj zi@gaB@7oI>p#i7B++lKX)lmInY~N{pdrDs{@P`L`3$}dSK*UG--vaEg{$Lj_!p4Ii z@Be75U&^un4gIqq`wzg6E61N1_WBR>nmqgU&VNX{|NQu`mmjL=m)DQZS7HCcCiedV zz_P%&je5OBmDJi7YR=TU&3@nq{2;V*YNwX_>ywKn9KX(j&7~~4cBK|k>+R+gB zj^UHKSMY49pYY3x^<-r*}w88@I3IThAW6%UruHJQIRu3N14-)CqyPW_ diff --git a/src/main/resources/mcpi/api/java/src-api/pi/Block.java b/src/main/resources/mcpi/api/java/src-api/pi/Block.java deleted file mode 100644 index 07083745..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/Block.java +++ /dev/null @@ -1,140 +0,0 @@ -package pi; - -/** - * A Minecraft Block description - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class Block { - - final int id, data; - - Block(int id, int data) { - this.id = id; - this.data = data & 0xf; - } - - /** - * Get a block with and withId (use a constant like Block.TNT) - */ - public static Block id(int id) { - return new Block(id, 0); - } - - /** - * Get a block with extra data - */ - public Block withData(int data) { - return new Block(id, data); - } - - static Block decode(String s) { - return id(Integer.parseInt(s)); - } - - static Block decodeWithData(String s) { - String[] ss = s.split(","); - int id = Integer.parseInt(ss[0]); - int data = Integer.parseInt(ss[1]); - return new Block(id, data); - } - - @Override - public int hashCode() { - return (id << 8) + data; - } - - @Override - public boolean equals(Object obj) { - if (obj == null || !(obj instanceof Block)) { - return false; - } - return hashCode() == ((Block) obj).hashCode(); - } - - @Override - public String toString() { - return id + (data == 0 ? "" : "," + data); - } - - /** - * Get a wool block of a specific color - */ - public static Block wool(Color color) { - return WOOL.withData(color.woolColorData); - } - // Predefined blocks - public static final Block // - AIR = id(0), - STONE = id(1), - GRASS = id(2), - DIRT = id(3), - COBBLESTONE = id(4), - WOOD_PLANKS = id(5), - SAPLING = id(6), - BEDROCK = id(7), - WATER_FLOWING = id(8), - WATER = WATER_FLOWING, - WATER_STATIONARY = id(9), - LAVA_FLOWING = id(10), - LAVA = LAVA_FLOWING, - LAVA_STATIONARY = id(11), - SAND = id(12), - GRAVEL = id(13), - GOLD_ORE = id(14), - IRON_ORE = id(15), - COAL_ORE = id(16), - WOOD = id(17), - LEAVES = id(18), - GLASS = id(20), - LAPIS_LAZULI_ORE = id(21), - LAPIS_LAZULI_BLOCK = id(22), - SANDSTONE = id(24), - BED = id(26), - COBWEB = id(30), - GRASS_TALL = id(31), - WOOL = id(35), - FLOWER_YELLOW = id(37), - FLOWER_CYAN = id(38), - MUSHROOM_BROWN = id(39), - MUSHROOM_RED = id(40), - GOLD_BLOCK = id(41), - IRON_BLOCK = id(42), - STONE_SLAB_DOUBLE = id(43), - STONE_SLAB = id(44), - BRICK_BLOCK = id(45), - TNT = id(46), - BOOKSHELF = id(47), - MOSS_STONE = id(48), - OBSIDIAN = id(49), - TORCH = id(50), - FIRE = id(51), - STAIRS_WOOD = id(53), - CHEST = id(54), - DIAMOND_ORE = id(56), - DIAMOND_BLOCK = id(57), - CRAFTING_TABLE = id(58), - FARMLAND = id(60), - FURNACE_INACTIVE = id(61), - FURNACE_ACTIVE = id(62), - DOOR_WOOD = id(64), - LADDER = id(65), - STAIRS_COBBLESTONE = id(67), - DOOR_IRON = id(71), - REDSTONE_ORE = id(73), - SNOW = id(78), - ICE = id(79), - SNOW_BLOCK = id(80), - CACTUS = id(81), - CLAY = id(82), - SUGAR_CANE = id(83), - FENCE = id(85), - GLOWSTONE_BLOCK = id(89), - BEDROCK_INVISIBLE = id(95), - STONE_BRICK = id(98), - GLASS_PANE = id(102), - MELON = id(103), - FENCE_GATE = id(107), - GLOWING_OBSIDIAN = id(246), - NETHER_REACTOR_CORE = id(247); -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/Color.java b/src/main/resources/mcpi/api/java/src-api/pi/Color.java deleted file mode 100644 index dd2330eb..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/Color.java +++ /dev/null @@ -1,19 +0,0 @@ -package pi; - -/** - * Colors - * - * @author Daniel Frisk, twitter:danfrisk - */ -public enum Color { - - WHITE, ORANGE, MAGENTA, LIGHT_BLUE, - YELLOW, LIME, PINK, GRAY, - LIGHT_GRAY, CYAN, PURPLE, BLUE, - BROWN, GREEN, RED, BLACK; - - /** - * the block DATA for the color - */ - final int woolColorData = ordinal(); -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/Connection.java b/src/main/resources/mcpi/api/java/src-api/pi/Connection.java deleted file mode 100644 index d5ad20d8..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/Connection.java +++ /dev/null @@ -1,124 +0,0 @@ -package pi; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.net.Socket; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Connection to a Minecraft Pi game - * - * @author Daniel Frisk, twitter:danfrisk - */ -class Connection { - - Socket socket; - BufferedWriter out; - BufferedReader in; - boolean autoFlush = true; - - Connection(String host, int port) { - Log.info("Connecting to " + host + ":" + port); - if (host != null) { - try { - this.socket = new Socket(host, port); - socket.setTcpNoDelay(true); - socket.setKeepAlive(true); - socket.setTrafficClass(0x10); - this.in = new BufferedReader(new InputStreamReader(socket.getInputStream())); - this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); - } catch (IOException e) { - throw new ConnectionException("Couldn't connect to Minecraft, is it running?"); - } - } - Log.info("Connected"); - } - - void send(Object... parts) { - try { - drain(in); - for (int i = 0; i < parts.length; i++) { - out.write(parts[i].toString()); - if (i == 0) { - out.write('('); - } else if (i < parts.length - 1) { - out.write(','); - } - } - out.write(")\n"); - if (autoFlush) { - flush(); - } - } catch (IOException e) { - throw new ConnectionException(e); - } - } - - void flush() { - try { - out.flush(); - } catch (IOException e) { - throw new ConnectionException(e); - } - } - - void drain(BufferedReader in) throws IOException { - while (in.ready()) { - int c = in.read(); - System.err.print((char) c); - } - } - - String receive() { - try { - return in.readLine(); - } catch (IOException e) { - throw new ConnectionException(e); - } - } - - void close() { - close(in, out); - try { - socket.close(); - } catch (IOException _) { - } - } - - void close(Closeable... cs) { - for (Closeable c : cs) { - try { - if (c != null) { - c.close(); - } - } catch (IOException _) { - } - } - } - - void autoFlush(boolean flush) { - this.autoFlush = flush; - if (flush) { - flush(); - } - } - - /** - * - */ - static class ConnectionException extends RuntimeException { - - ConnectionException(String message) { - super(message); - } - - ConnectionException(Throwable cause) { - super(cause); - } - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/EventFactory.java b/src/main/resources/mcpi/api/java/src-api/pi/EventFactory.java deleted file mode 100644 index a6df8125..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/EventFactory.java +++ /dev/null @@ -1,35 +0,0 @@ -package pi; - -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; -import static pi.Vec.Unit.*; -import pi.event.BlockHitEvent; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -class EventFactory { - - static List createBlockHitEvents(String eventList) { - List events = new ArrayList(); - - if (!eventList.isEmpty()) { - for (String event : eventList.split("\\|")) { - Scanner s = new Scanner(event).useDelimiter(","); - Vec position = Vec.xyz(s.nextInt(), s.nextInt(), s.nextInt()); - Vec.Unit surfaceDirection = faceIdxToDirection(s.nextInt()); - int entityId = s.nextInt(); - events.add(new BlockHitEvent(position, surfaceDirection, entityId)); - } - } - - return events; - } - - static Unit faceIdxToDirection(int faceIdx) { - Unit[] faceDirs = {Y.neg(), Y, Z.neg(), Z, X.neg(), X}; - return faceDirs[faceIdx]; - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/Item.java b/src/main/resources/mcpi/api/java/src-api/pi/Item.java deleted file mode 100644 index 715fe5cd..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/Item.java +++ /dev/null @@ -1,96 +0,0 @@ -package pi; - -/** - * A Minecraft Item description (no use yet) - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class Item { - - final int id; - - Item(int id) { - this.id = id; - } - - static Item id(int id) { - return new Item(id); - } - - static Item decode(String s) { - return id(Integer.parseInt(s)); - } - - @Override - public int hashCode() { - return id; - } - - @Override - public boolean equals(Object obj) { - if (obj == null || !(obj instanceof Item)) { - return false; - } - return id == ((Item) obj).id; - } - - @Override - public String toString() { - return Integer.toString(id); - } - // Predefined items - public static final Item // - IRON_SHOVEL = id(256), - IRON_PICKAXE = id(257), - IRON_AXE = id(258), - BOW = id(261), - ARROW = id(262), - COAL = id(263), - DIAMOND = id(264), - IRON_INGOT = id(265), - GOLD_INGOT = id(266), - IRON_SWORD = id(267), - WOODEN_SWORD = id(268), - WOODEN_SHOVEL = id(269), - WOODEN_PICKAXE = id(270), - WOODEN_AXE = id(271), - STONE_SWORD = id(272), - STONE_SHOVEL = id(273), - STONE_PICKAXE = id(274), - STONE_AXE = id(275), - DIAMOND_SWORD = id(276), - DIAMOND_SHOVEL = id(277), - DIAMOND_PICKAXE = id(278), - DIAMOND_AXE = id(279), - STICK = id(280), - BOWL = id(281), - GOLD_SWORD = id(283), - GOLD_SHOVEL = id(284), - GOLD_PICKAXE = id(285), - GOLD_AXE = id(286), - STRING = id(287), - FEATHER = id(288), - GUNPOWDER = id(289), - FLINT = id(292), - WHEAT = id(296), - SIGN = id(323), - WOODEN_DOOR = id(324), - IRON_DOOR = id(330), - SNOWBALL = id(332), - LEATHER = id(334), - CLAY_BRICK = id(336), - CLAY = id(337), - SUGAR_CANE = id(338), - PAPER = id(339), - BOOK = id(340), - SLIMEBALL = id(341), - EGG = id(344), - COMPASS = id(345), - CLOCK = id(347), - GLOWSTONE_DUST = id(348), - DYE = id(351), - BONE = id(352), - SUGAR = id(353), - SHEARS = id(359), - CAMERA = id(456); -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/Log.java b/src/main/resources/mcpi/api/java/src-api/pi/Log.java deleted file mode 100644 index d80f23a1..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/Log.java +++ /dev/null @@ -1,22 +0,0 @@ -package pi; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -class Log { - - static void debug(String s) { - if (false) { - System.out.println(s); - } - } - - static void info(String s) { - System.out.println(s); - } - - static void error(String s) { - System.err.println(s); - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/Minecraft.java b/src/main/resources/mcpi/api/java/src-api/pi/Minecraft.java deleted file mode 100644 index c9c2ef84..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/Minecraft.java +++ /dev/null @@ -1,297 +0,0 @@ -package pi; - -import java.util.Arrays; -import java.util.List; -import pi.event.BlockHitEvent; -import pi.tool.Tools; - -/** - * The main class to interact with a running instance of Minecraft Pi. - * - *

    Example:   - * Minecraft.connect().setBlock(0, 2, 0, Block.GOLD_ORE) - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class Minecraft { - - Connection connection; - static final int DEFAULT_PORT = 4711; - // - public final Camera camera = new Camera(); - public final Player player = new Player(); - public final Entities entities = new Entities(); - public final Events events = new Events(); - public final Tools tools = new Tools(this); - - Minecraft(Connection connection) { - this.connection = connection; - } - - /** - * Connect to a local mcpi game - */ - public static Minecraft connect() { - return connect("127.0.0.1"); - } - - /** - * Connect to a remote mcpi game - */ - public static Minecraft connect(String host) { - return connect(host, DEFAULT_PORT); - } - - /** - * Connect to mcpi on a specific host/port - */ - static Minecraft connect(String host, int port) { - return new Minecraft(new Connection(host, port)); - } - - /** - * Connect with string args - * - * @param args an array with optional host, port - */ - public static Minecraft connect(String[] args) { - System.err.println(Arrays.asList(args)); - String host = args.length >= 1 ? args[0] : "127.0.0.1"; - int port = args.length >= 2 ? Integer.parseInt(args[1]) : Minecraft.DEFAULT_PORT; - return Minecraft.connect(host, port); - } - - /** - * Get a block - */ - public Block getBlock(Vec position) { - send("world.getBlock", position); - return Block.decode(receive()); - } - - /** - * Get a block - */ - public Block getBlockWithData(Vec position) { - send("world.getBlock", position); - return Block.decodeWithData(receive()); - } - - /** - * Set a block - */ - public void setBlock(int x, int y, int z, Block block) { - setBlock(Vec.xyz(x, y, z), block); - } - - /** - * Set a block - */ - public void setBlock(Vec position, Block block) { - send("world.setBlock", position, block); - } - - /** - * Set a cuboid of blocks - */ - public void setBlocks(int x1, int y1, int z1, int x2, int y2, int z2, Block block) { - setBlocks(Vec.xyz(x1, y1, z1), Vec.xyz(x2, y2, z2), block); - } - - /** - * Set a cuboid of blocks - */ - public void setBlocks(Vec begin, Vec end, Block block) { - send("world.setBlocks", begin, end, block); - } - - /** - * Get the height of the world (last Y that isn't solid from top-down) - */ - public int getHeight(int x, int z) { - send("world.getHeight", x, z); - return Integer.parseInt(receive()); - } - - /** - * Get the entity ids of the connected players - */ - public int[] getPlayerEntityIds() { - send("world.getPlayerIds"); - String[] strIds = receive().split("|"); - int[] ids = new int[strIds.length]; - for (int i = 0; i < ids.length; i++) { - ids[i] = Integer.parseInt(strIds[i]); - } - return ids; - } - - /** - * Keys: "world_immutable", "nametags_visible" - */ - public void setting(String key, boolean value) { - send("world.setting", key, value == false ? 0 : 1); - } - - /** - * Save a checkpoint that can be used for restoring the world - */ - public void saveCheckpoint() { - send("world.checkpoint.save"); - } - - /** - * Restore the world state to the checkpoint - */ - public void restoreCheckpoint() { - send("world.checkpoint.restore"); - } - - /** - * Post a message to the game chat - */ - public void postToChat(String message) { - send("chat.post", message); - } - - /** - * If auto is false, commands are kept in a buffer until they are flushed - * with flush() or the buffer fills up.
    Default is to automatically - * flush each command separately. - */ - public void autoFlush(boolean auto) { - connection.autoFlush(auto); - } - - /** - * Flush commands that are buffered, not needed, unless autoFlush(false). - */ - public void flush() { - connection.flush(); - } - - /** - * Methods for the player in the connected game - */ - public class Player { - - public Vec getPosition() { - send("player.getTile"); - return Vec.decode(receive()); - } - - public void setPosition(Vec position) { - send("player.setTile", position); - } - - public VecFloat getExactPosition() { - send("player.getPos"); - return VecFloat.decode(receive()); - } - - public void setExactPosition(VecFloat position) { - send("player.setPos", position); - } - - /** - * Keys: autojump, Values: true/false
    For example to disable - * automatic jumping: - * mc.player.setting("autojump", false); - */ - public void setting(String key, boolean value) { - send("player.setting", key, value == false ? 0 : 1); - } - } - - /** - * Methods for entities - */ - public class Entities { - - public Vec getPosition(int entityId) { - send("entity.getTile", entityId); - return Vec.decode(receive()); - } - - public void setPosition(int entityId, Vec tile) { - send("entity.setTile", entityId, tile); - } - - public VecFloat getExactPosition(int entityId) { - send("entity.getPos", entityId); - return VecFloat.decode(receive()); - } - - public void setExactPosition(VecFloat pos) { - send("entity.setPos"); - } - } - - /** - * Control the camera in the game we're connected to - */ - public class Camera { - - public void setNormal() { - send("camera.mode.setNormal"); - } - - public void setNormal(int mobEntityId) { - send("camera.mode.setNormal", mobEntityId); - } - - public void setThirdPerson() { - send("camera.mode.setFollow"); - } - - public void setThirdPerson(int entityId) { - send("camera.mode.setFollow", entityId); - } - - public void setFixed() { - send("camera.mode.setFixed"); - } - - public void setPosition(VecFloat position) { - send("camera.setPos", position); - } - } - - /** - * Events - */ - public class Events { - - /** - * Clear all old events - */ - public void clearAll() { - send("events.clear"); - } - - /** - * Only triggered by sword - */ - public List pollBlockHits() { - send("events.block.hits"); - return EventFactory.createBlockHitEvents(receive()); - } - } - - void send(Object... parts) { - connection.send(parts); - } - - String receive() { - if (!connection.autoFlush) { - throw new IllegalStateException("Methods that return data aren't supported with autoflush off!"); - } - return connection.receive(); - } - - @Override - protected void finalize() throws Throwable { - super.finalize(); - connection.close(); - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/Vec.java b/src/main/resources/mcpi/api/java/src-api/pi/Vec.java deleted file mode 100644 index d3429bf6..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/Vec.java +++ /dev/null @@ -1,111 +0,0 @@ -package pi; - -import java.util.Scanner; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class Vec { - - public final static Vec ZERO = new Vec(0, 0, 0); - public final static int MIN_Y = -128, MAX_Y = 127; - public final int x, y, z; - - Vec(int x, int y, int z) { - this.x = x; - this.y = y; - this.z = z; - } - - /** - * Create - */ - public static Vec xyz(int x, int y, int z) { - return new Vec(x, y, z); - } - - /** - * Add - */ - public Vec add(Vec v) { - return xyz(x + v.x, y + v.y, z + v.z); - } - - /** - * Add - */ - public Vec add(int x, int y, int z) { - return xyz(this.x + x, this.y + y, this.z + z); - } - - /** - * Subtract - */ - public Vec sub(Vec v) { - return xyz(x - v.x, y - v.y, z - v.z); - } - - /** - * Multiply with integer (scale) - */ - public Vec mul(int s) { - return xyz(s * x, s * y, s * z); - } - - /** - * Negate (multiply with -1) - */ - public Vec neg() { - return xyz(-x, -y, -z); - } - - /** - * Scalar product - */ - public int dot(Vec v) { - return x * v.x + y * v.y + z * v.z; - } - - @Override - public int hashCode() { - return x | (y << 20) | (z << 10); - } - - @Override - public boolean equals(Object obj) { - if (obj == null || !(obj instanceof Vec)) { - return false; - } - return hashCode() == ((Vec) obj).hashCode(); - } - - @Override - public final String toString() { - return x + "," + y + "," + z; - } - - static Vec decode(String encoded) { - Scanner s = new Scanner(encoded).useDelimiter("\\,"); - return xyz(s.nextInt(), s.nextInt(), s.nextInt()); - } - - /** - * A vector with length=1 - */ - public static class Unit extends Vec { - - public final static Unit X = new Unit(1, 0, 0); - public final static Unit Y = new Unit(0, 1, 0); - public final static Unit Z = new Unit(0, 0, 1); - - Unit(int x, int y, int z) { - super(x, y, z); - } - - @Override - public Unit neg() { - return new Unit(-x, -y, -z); - } - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/VecFloat.java b/src/main/resources/mcpi/api/java/src-api/pi/VecFloat.java deleted file mode 100644 index ccfcb840..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/VecFloat.java +++ /dev/null @@ -1,100 +0,0 @@ -package pi; - -import java.util.Scanner; - -/** - * A vector of three floats - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class VecFloat { - - public static final VecFloat ZERO = new VecFloat(0, 0, 0); - public final float x, y, z; - - VecFloat(float x, float y, float z) { - this.x = x; - this.y = y; - this.z = z; - } - - /** - * Create - */ - public static VecFloat xyz(float x, float y, float z) { - return new VecFloat(x, y, z); - } - - /** - * Add - */ - public VecFloat add(VecFloat v) { - return xyz(x + v.x, y + v.y, z + v.z); - } - - /** - * Subtract - */ - public VecFloat sub(VecFloat v) { - return xyz(x - v.x, y - v.y, z - v.z); - } - - /** - * Multiply with a float (scale) - */ - public VecFloat mul(float s) { - return xyz(s * x, s * y, s * z); - } - - /** - * Negate (multiply with -1) - */ - public VecFloat neg() { - return mul(-1); - } - - /** - * Scalar product - */ - public float dot(VecFloat v) { - return x * v.x + y * v.y + z * v.z; - } - - /** - * Cross product - */ - VecFloat cross(VecFloat v) { - throw new UnsupportedOperationException("not implemented yet"); - } - - /** - * Get a vector in the same direction but with length 1 - */ - public VecFloat normalized() { - return mul(1f / length()); - } - - /** - * Length - */ - public float length() { - return (float) Math.sqrt(lengthSq()); - } - - /** - * length * length - */ - public float lengthSq() { - return dot(this); - } - - static VecFloat decode(String encoded) { - Scanner s = new Scanner(encoded).useDelimiter("\\,"); - return xyz(s.nextFloat(), s.nextFloat(), s.nextFloat()); - } - - @Override - public final String toString() { - return x + "," + y + "," + z; - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/event/BlockAddedEvent.java b/src/main/resources/mcpi/api/java/src-api/pi/event/BlockAddedEvent.java deleted file mode 100644 index 850f6c2e..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/event/BlockAddedEvent.java +++ /dev/null @@ -1,14 +0,0 @@ -package pi.event; - -import pi.Vec; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -class BlockAddedEvent extends BlockEvent { - - public BlockAddedEvent(Vec position) { - super(position); - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/event/BlockEvent.java b/src/main/resources/mcpi/api/java/src-api/pi/event/BlockEvent.java deleted file mode 100644 index d7b70152..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/event/BlockEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package pi.event; - -import pi.Vec; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -public abstract class BlockEvent { - - public final Vec position; - - public BlockEvent(Vec position) { - this.position = position; - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/event/BlockHitEvent.java b/src/main/resources/mcpi/api/java/src-api/pi/event/BlockHitEvent.java deleted file mode 100644 index 9a725edb..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/event/BlockHitEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package pi.event; - -import pi.Vec; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class BlockHitEvent extends BlockEvent { - - public final Vec.Unit surfaceDirection; - public final int entityId; - - public BlockHitEvent(Vec position, Vec.Unit surfaceDirection, int entityId) { - super(position); - this.surfaceDirection = surfaceDirection; - this.entityId = entityId; - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/event/BlockRemovedEvent.java b/src/main/resources/mcpi/api/java/src-api/pi/event/BlockRemovedEvent.java deleted file mode 100644 index d81eef32..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/event/BlockRemovedEvent.java +++ /dev/null @@ -1,14 +0,0 @@ -package pi.event; - -import pi.Vec; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -class BlockRemovedEvent extends BlockEvent { - - public BlockRemovedEvent(Vec position) { - super(position); - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/event/ChatMessageEvent.java b/src/main/resources/mcpi/api/java/src-api/pi/event/ChatMessageEvent.java deleted file mode 100644 index e09b4af8..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/event/ChatMessageEvent.java +++ /dev/null @@ -1,9 +0,0 @@ -package pi.event; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -class ChatMessageEvent { - -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/event/EntityEvent.java b/src/main/resources/mcpi/api/java/src-api/pi/event/EntityEvent.java deleted file mode 100644 index f02b5fc0..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/event/EntityEvent.java +++ /dev/null @@ -1,9 +0,0 @@ -package pi.event; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -abstract class EntityEvent { - -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/event/PlayerConnectEvent.java b/src/main/resources/mcpi/api/java/src-api/pi/event/PlayerConnectEvent.java deleted file mode 100644 index 36389156..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/event/PlayerConnectEvent.java +++ /dev/null @@ -1,14 +0,0 @@ -package pi.event; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -class PlayerConnectEvent extends PlayerEvent { - - public final int entityId; - - public PlayerConnectEvent(int entityId) { - this.entityId = entityId; - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/event/PlayerEvent.java b/src/main/resources/mcpi/api/java/src-api/pi/event/PlayerEvent.java deleted file mode 100644 index d90740da..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/event/PlayerEvent.java +++ /dev/null @@ -1,9 +0,0 @@ -package pi.event; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -abstract class PlayerEvent { - -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/event/package.html b/src/main/resources/mcpi/api/java/src-api/pi/event/package.html deleted file mode 100644 index b1909ed8..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/event/package.html +++ /dev/null @@ -1,3 +0,0 @@ - - Use to react on events in the game - diff --git a/src/main/resources/mcpi/api/java/src-api/pi/package.html b/src/main/resources/mcpi/api/java/src-api/pi/package.html deleted file mode 100644 index 28d932a2..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/package.html +++ /dev/null @@ -1,3 +0,0 @@ - - Protocol classes - diff --git a/src/main/resources/mcpi/api/java/src-api/pi/tool/Csg.java b/src/main/resources/mcpi/api/java/src-api/pi/tool/Csg.java deleted file mode 100644 index d66344c0..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/tool/Csg.java +++ /dev/null @@ -1,10 +0,0 @@ -package pi.tool; - -/** - * Constructive Solid Geometry tool - * - * @author Daniel Frisk, twitter:danfrisk - */ -class Csg { - -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/tool/Text.java b/src/main/resources/mcpi/api/java/src-api/pi/tool/Text.java deleted file mode 100644 index 1ae53140..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/tool/Text.java +++ /dev/null @@ -1,94 +0,0 @@ -package pi.tool; - -import java.awt.*; -import java.awt.geom.*; -import java.awt.image.*; -import pi.*; - -/** - * A tool to draw text in the Minecraft world.
    Example: - * - * text.with("Arial", 18).xyz2(Vec.xyz(0, 2, 0)).draw("Hello, world!"). - * - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class Text { - - Minecraft minecraft; - // - Vec basePos = Vec.xyz(0, 1, 0); - Font font = Font.decode("SansSerif-PLAIN-9"); - Vec u = Vec.Unit.X, v = Vec.Unit.Y; - Block block = Block.WOOD_PLANKS; - - Text(Minecraft minecraft) { - this.minecraft = minecraft; - } - - /** - * Set the position of the text - */ - public Text at(Vec pos) { - this.basePos = pos; - return this; - } - - /** - * Set the block type to use for drawing - */ - public Text with(Block block) { - this.block = block; - return this; - } - - /** - * Set the font - */ - public Text with(String fontName, int fontSizeInPoints) { - this.font = new Font(fontName, Font.PLAIN, fontSizeInPoints); - return this; - } - - /** - * Set the orientation of the text - */ - public Text withOrientation(Vec.Unit u, Vec.Unit v) { - if (u.equals(v)) { - throw new IllegalArgumentException("u and v can't be equal!"); - } - this.u = u; - this.v = v; - return this; - } - - /** - * Draw a text with the current settings in the Minecraft world - */ - public void draw(String text) { - BufferedImage img = createImage(text); - final int w = img.getWidth(), h = img.getHeight(); - for (int j = h - 1; j >= 0; j--) { - for (int i = 0; i < w; i++) { - if ((img.getRGB(i, j) & 1) == 1) { - Vec relativeBlockPos = u.mul(i).add(v.mul((h - j))); - Vec blockPos = basePos.add(relativeBlockPos); - minecraft.setBlock(blockPos, block); - } - } - } - } - - private BufferedImage createImage(String text) { - BufferedImage buf = new BufferedImage(1000, 200, BufferedImage.TYPE_BYTE_BINARY); - Graphics2D g = buf.createGraphics(); - - g.setFont(font); - FontMetrics fm = g.getFontMetrics(); - g.drawString(text, 1, 1 + fm.getAscent()); - Rectangle2D bounds = fm.getStringBounds(text, g); - buf = buf.getSubimage(0, 0, (int) bounds.getWidth() + 1, (int) bounds.getHeight() + 1); - g.dispose(); - return buf; - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/tool/Tools.java b/src/main/resources/mcpi/api/java/src-api/pi/tool/Tools.java deleted file mode 100644 index 6433fb75..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/tool/Tools.java +++ /dev/null @@ -1,18 +0,0 @@ -package pi.tool; - -import pi.Minecraft; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class Tools { - - public final Text text; - public final Turtle turtle; - - public Tools(Minecraft world) { - this.text = new Text(world); - this.turtle = new Turtle(world); - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/tool/Turtle.java b/src/main/resources/mcpi/api/java/src-api/pi/tool/Turtle.java deleted file mode 100644 index 7862d081..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/tool/Turtle.java +++ /dev/null @@ -1,124 +0,0 @@ -package pi.tool; - -import pi.*; -import static pi.Vec.xyz; - -/** - * A turtle that can be used for shouldPlaceBlock - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class Turtle { - - Minecraft minecraft; - // - Vec home = Vec.ZERO; - Vec pos = Vec.ZERO, dir = Vec.Unit.X; - Block block = Block.WOOD_PLANKS; - boolean shouldPlaceBlock = false; - - public Turtle(Minecraft mc) { - this.minecraft = mc; - } - - /** - * Set the turtle setHome pos - */ - public Turtle setHome(Vec home) { - this.home = home; - return this; - } - - /** - * Move the turtle to setHome with default orientation - */ - public Turtle home() { - this.pos = Vec.ZERO; - this.dir = Vec.Unit.X; - return this; - } - - /** - * Start shouldPlaceBlock - */ - public Turtle on() { - this.shouldPlaceBlock = true; - placeBlock(); - return this; - } - - /** - * Stop shouldPlaceBlock - */ - public Turtle off() { - this.shouldPlaceBlock = false; - return this; - } - - public Turtle block(Block block) { - this.block = block; - return this; - } - - void placeBlock() { - if (shouldPlaceBlock) { - minecraft.setBlock(home.add(pos), block); - } - } - - /** - * Jump without placing blocks - */ - public Turtle jump(int dx, int dy, int dz) { - pos = pos.add(dx, dy, dz); - return this; - } - - /** - * Turn 90 degrees CCW - */ - public Turtle left() { - this.dir = xyz(dir.z, 0, -dir.x); - return this; - } - - /** - * Turn 90 degrees CW - */ - public Turtle right() { - this.dir = xyz(-dir.z, 0, dir.x); - return this; - } - - /** - * Turn 180 degrees - */ - public Turtle around() { - this.dir = xyz(-dir.x, 0, -dir.z); - return this; - } - - public Turtle forward(int steps) { - return move(steps, dir); - } - - public Turtle back(int steps) { - return move(steps, dir.neg()); - } - - public Turtle up(int steps) { - return move(steps, Vec.Unit.Y); - } - - public Turtle down(int steps) { - return move(steps, Vec.Unit.Y.neg()); - } - - Turtle move(int steps, Vec d) { - while (steps-- > 0) { - this.pos = pos.add(d); - placeBlock(); - } - return this; - } -} diff --git a/src/main/resources/mcpi/api/java/src-api/pi/tool/package.html b/src/main/resources/mcpi/api/java/src-api/pi/tool/package.html deleted file mode 100644 index e31aeafd..00000000 --- a/src/main/resources/mcpi/api/java/src-api/pi/tool/package.html +++ /dev/null @@ -1,3 +0,0 @@ - - Tools with higher level functionality - diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/ChristmasTreeDemo.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/ChristmasTreeDemo.java deleted file mode 100644 index 6be42ad8..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/ChristmasTreeDemo.java +++ /dev/null @@ -1,64 +0,0 @@ -package pi.demo; - -import pi.*; -import static pi.Vec.xyz; - -/** - * Build a big christmas tree! - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class ChristmasTreeDemo { - // - static double[] tree = {// - 0.5, 1, 1.5, 2, 2.6, 3, 4, 5, 6,// - 4, 5, 6, 7, 8, 8.6,// - 7, 8, 9, 10, 10.6,// - 9, 10, 11, 12, 13}; - - public static void main(String[] args) { - Minecraft mc = Minecraft.connect(args); - drawChristmasTree(mc, Vec.ZERO); - } - - static void drawChristmasTree(Minecraft mc, Vec p) { - // Clear area and add snow on the ground - Vec v = xyz(20, 0, 20); - mc.setBlocks(v.neg(), v.add(0, 50, 0), Block.AIR); - mc.setBlocks(v.neg(), v, Block.SNOW_BLOCK); - - int h = 6; - - // Draw "branches" - for (int i = 0; i < tree.length; i++) { - drawDisc(mc, p.add(0, h, 0), tree[tree.length - i - 1], Block.LEAVES.withData(1)); - h++; - } - - // Draw trunk - mc.setBlocks(p.add(-1, 0, 0), p.add(1, h - 6, 0), Block.WOOD); - mc.setBlocks(p.add(0, 0, -1), p.add(0, h - 6, 1), Block.WOOD); - - // Draw star - drawStar(mc, p.add(0, h, 0)); - } - - static void drawDisc(Minecraft mc, Vec p, double r, Block b) { - int rr = (int) Math.ceil(r); - for (int j = -rr; j <= rr; j++) { - for (int i = -rr; i <= rr; i++) { - double diff = i * i + j * j - r * r; - if (diff <= 0) { - mc.setBlock(p.add(i, 0, j), b); - } - } - } - } - - private static void drawStar(Minecraft mc, Vec p) { - double[] radii = {0, 0, 1, 2, 1, 0}; - for (int i = 0; i < radii.length; i++) { - drawDisc(mc, p.add(0, i, 0), radii[i], Block.GOLD_BLOCK); - } - } -} diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/DigitalClock.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/DigitalClock.java deleted file mode 100644 index 1f8168bf..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/DigitalClock.java +++ /dev/null @@ -1,30 +0,0 @@ -package pi.demo; - -import java.text.DateFormat; -import java.util.Date; -import pi.Minecraft; -import pi.tool.Text; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class DigitalClock { - public static void main(String[] args) { - //Text textTool = Minecraft.connect(args).tools.text; - - String lastTime = ""; - DateFormat timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT); - while (true) { - String time = timeFormatter.format(new Date()); - if (!time.equals(lastTime)) { - System.out.println(time); - lastTime = time; - } - try { - Thread.sleep(100); - } catch (InterruptedException _) { - } - } - } -} diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/LoopDemo.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/LoopDemo.java deleted file mode 100644 index c8672dda..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/LoopDemo.java +++ /dev/null @@ -1,21 +0,0 @@ -package pi.demo; - -import static pi.Block.*; -import pi.Minecraft; -import pi.Vec; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class LoopDemo { - public static void main(String[] args) { - Minecraft mc = Minecraft.connect(args); - - for (int i = 0; i < 8; i++) { - for (int j = 0; j < 8; j++) { - mc.setBlock(Vec.xyz(i, 2, j), IRON_BLOCK); - } - } - } -} diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/LowLevelDemo.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/LowLevelDemo.java deleted file mode 100644 index 6b793d5e..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/LowLevelDemo.java +++ /dev/null @@ -1,41 +0,0 @@ -package pi.demo; - -import static pi.Block.*; -import pi.Minecraft; -import static pi.Vec.xyz; - -/** - * Manipulate blocks with the low level api - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class LowLevelDemo { - - public static void main(String[] args) { - createPool(Minecraft.connect(args)); - } - - static void createPool(Minecraft mc) { - final int height = 0; - - final int r = 7; - // Build a kind of half sphere pool - for (int k = -r; k <= height; k++) { - for (int j = -r; j <= r; j++) { - for (int i = -r; i <= r; i++) { - if (i * i + j * j + k * k < r * r) { - mc.setBlock(xyz(i, k, j), WATER_STATIONARY); - } else { - mc.setBlock(xyz(i, k, j), STONE); - } - } - } - } - - // Set air above pool - mc.setBlocks(xyz(r, height + 1, -r), xyz(-r, height + 30, r), AIR); - - // Drop the player in the pool - mc.player.setPosition(xyz(0, 10, 0)); - } -} diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/TextDemo.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/TextDemo.java deleted file mode 100644 index 4792fb0f..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/TextDemo.java +++ /dev/null @@ -1,27 +0,0 @@ -package pi.demo; - -import pi.Minecraft; -import pi.tool.Text; -import static pi.Block.*; -import static pi.Vec.Unit.*; -import static pi.Vec.xyz; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class TextDemo { - - public static void main(String[] args) { - Text textTool = Minecraft.connect(args).tools.text; - - // Just draw a text - textTool.at(xyz(0, 0, 20)).draw("pi"); - - // Symbols are fun (skull and bones, arrr!) - textTool.at(xyz(0, 0, 35)).with("Wingdings", 50).with(STONE).draw("\u2620"); - - // More settings - textTool.at(xyz(0, 10, 0)).with("Arial", 12).with(SAND).withOrientation(X, Z).draw("fun!"); - } -} diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/TurtleDemo.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/TurtleDemo.java deleted file mode 100644 index c17fe217..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/TurtleDemo.java +++ /dev/null @@ -1,52 +0,0 @@ -package pi.demo; - -import pi.*; -import pi.tool.Turtle; -import static pi.Block.*; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class TurtleDemo { - public static void main(String[] args) { - Turtle turtle = Minecraft.connect(args).tools.turtle; - - int width = 9, depth = 5, height = 3; - drawHouse(turtle, width, depth, height); - } - - /** - * Draw a square house at turtle setHome - * - * @param turtle the turtle to use for drawing - * @param width the width of the house - * @param height the height of the walls - */ - private static void drawHouse(Turtle turtle, int width, int depth, int height) { - width--; - - // Floor - - // Walls - turtle.home().off().up(1).block(BRICK_BLOCK).on(); - for (int i = 0; i < height; i++) { - turtle.forward(depth).right(). - forward(width).right(). - forward(depth).right(). - forward(width).right(); - turtle.up(1); - } - - // Roof - turtle.jump(0, 0, -1).block(WOOD); - for (int s = depth; s >= 0; s -= 2) { - turtle.forward(s).right().forward(width + 2).right() - .forward(s).right().forward(width + 2).right(); - turtle.jump(1, 1, 0); - } - - // Door - turtle.home().block(AIR).off().up(1).right().forward(width / 2).on().up(1); - } -} diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/Usage.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/Usage.java deleted file mode 100644 index 8fe5ed00..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/Usage.java +++ /dev/null @@ -1,11 +0,0 @@ -package pi.demo; - -/** - * - * @author Daniel Frisk, twitter:danfrisk - */ -class Usage { - public static void main(String[] args) { - System.out.println("Read the file HOW_TO_RUN.txt in the McPiDemos directory"); - } -} diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Level.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Level.java deleted file mode 100644 index 62d89d3c..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Level.java +++ /dev/null @@ -1,54 +0,0 @@ -package pi.demo.sokoban; - -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; - -/** - * A Sokoban level - * - * @author Daniel Frisk, twitter:danfrisk - */ -class Level { - int number; - String name; - LevelTile[][] tiles; - int width, height; - - Level(String data, int number) { - this.number = number; - Scanner s = new Scanner(data); - this.name = s.nextLine(); - List rows = new ArrayList(); - while (s.hasNextLine()) { - LevelTile[] row = parseRow(s.nextLine()); - this.width = Math.max(width, row.length); - rows.add(row); - } - this.height = rows.size(); - tiles = rows.toArray(new LevelTile[height][]); - } - - LevelTile get(Position p) { - LevelTile[] row = tiles[p.j]; - return (p.i < row.length) ? row[p.i] : LevelTile.EMPTY; - } - - private static LevelTile[] parseRow(String line) { - List row = new ArrayList(); - for (char c : line.toCharArray()) { - row.add(LevelTile.from(c)); - } - return row.toArray(new LevelTile[row.size()]); - } - - static List loadLevels() { - List levels = new ArrayList(); - Scanner s = new Scanner(Level.class.getResourceAsStream("Level_Data")); - s.useDelimiter("#").next(); - while (s.hasNext()) { - levels.add(new Level(s.next(), levels.size() + 1)); - } - return levels; - } -} diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/LevelTile.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/LevelTile.java deleted file mode 100644 index e556565b..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/LevelTile.java +++ /dev/null @@ -1,24 +0,0 @@ -package pi.demo.sokoban; - -/** - * Level tile - * - * @author Daniel Frisk, twitter:danfrisk - */ -enum LevelTile { - EMPTY(' '), WALL('='), PLAYER('p'), STONE('s'), TARGET('t'), TARGET_AND_STONE('T'); - private char id; - - private LevelTile(char id) { - this.id = id; - } - - static LevelTile from(char id) { - for (LevelTile t : values()) { - if (t.id == id) { - return t; - } - } - throw new RuntimeException("Unknown id: " + id); - } -} diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Level_Data b/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Level_Data deleted file mode 100644 index f2eff4ed..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Level_Data +++ /dev/null @@ -1,49 +0,0 @@ -= wall, p player, s stone, t target - -#Too easy -============ -= p s t= -============ -#Still easy -============ -= t= -= = - = s= - = p = - ========== -#Just work -========== -=t s t= -= = -=s s p= -= = -=t s t= -========== -#Not hard - ===== - = ==== - = = = - == ps t= -=== ===t= -= s = =t= -= s = === -= = -===== -#centimoves -======== -= = = -= = =st= -= st= -= = =st= -= = = -===== p= - ==== -#harder now? -======= -= t = -= = = = -= sps = -= = =t= -= T = -======= - diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Position.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Position.java deleted file mode 100644 index 2815abc3..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Position.java +++ /dev/null @@ -1,47 +0,0 @@ -package pi.demo.sokoban; - -import pi.Vec; - -/** - * A position in a Sokoban level - * - * @author Daniel Frisk, twitter:danfrisk - */ -class Position { - final int i, j; - - private Position(int i, int j) { - this.i = i; - this.j = j; - } - - static Position uv(int i, int j) { - return new Position(i, j); - } - - static Position fromWorld(Vec v) { - return new Position(v.x, v.z); - } - - Vec toWorld(int height) { - return Vec.xyz(i, height, j); - } - - @Override - public int hashCode() { - return (i << 16) + j; - } - - @Override - public boolean equals(Object obj) { - if ((obj == null) || !(obj instanceof Position)) { - return false; - } - return hashCode() == ((Position) obj).hashCode(); - } - - @Override - public String toString() { - return i + "," + j; - } -} diff --git a/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Sokoban.java b/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Sokoban.java deleted file mode 100644 index 365e4267..00000000 --- a/src/main/resources/mcpi/api/java/src-demos/pi/demo/sokoban/Sokoban.java +++ /dev/null @@ -1,128 +0,0 @@ -package pi.demo.sokoban; - -import java.util.*; -import static pi.Block.*; -import pi.*; -import pi.event.BlockHitEvent; - -/** - * Sokoban game for Minecraft - * - * @author Daniel Frisk, twitter:danfrisk - */ -public class Sokoban { - Minecraft mc; - // - List levels = Level.loadLevels(); - Level level; - // - PositionSet walls = new PositionSet(), targets = new PositionSet(), stones = new PositionSet(); - - public Sokoban(Minecraft minecraft) { - this.mc = minecraft; - } - - /** - * - */ - public static void main(String[] args) { - new Sokoban(Minecraft.connect(args)).run(); - } - - public void run() { - mc.postToChat("Sokoban!"); - mc.camera.setNormal(); - mc.setting("immutable", true); - - while (true) { - if (stones.equals(targets)) { - if (level != null) { - mc.postToChat("Level finished!"); - sleep(2000); - } - int ni = level == null ? 0 : level.number >= levels.size() ? 0 : level.number; - startLevel(levels.get(ni)); - } - - List hits = mc.events.pollBlockHits(); - if (!hits.isEmpty()) { - BlockHitEvent ev = hits.iterator().next(); - onBlockHit(ev.position, ev.surfaceDirection.neg()); - } - - sleep(80); - } - } - - void startLevel(Level level) { - this.level = level; - - walls.clear(); - targets.clear(); - stones.clear(); - - // Clear the ground - mc.setBlocks(Position.uv(0, 0).toWorld(0), - Position.uv(level.width - 1, level.height - 1).toWorld(10), - AIR); - - mc.setBlocks(Position.uv(0, 0).toWorld(-1), - Position.uv(level.width - 1, level.height - 1).toWorld(-1), - SANDSTONE); - - // Set level blocks and teleport the player - for (int v = 0; v < level.height; v++) { - for (int u = 0; u < level.width; u++) { - Position pos = Position.uv(u, v); - - LevelTile t = level.get(pos); - if (LevelTile.EMPTY == t) { - continue; - } - if (LevelTile.WALL == t) { - walls.add(pos); - mc.setBlocks(pos.toWorld(0), pos.toWorld(2), STONE); - } - if (LevelTile.PLAYER == t) { - mc.player.setPosition(pos.toWorld(2)); - } - if (LevelTile.TARGET == t || LevelTile.TARGET_AND_STONE == t) { - targets.add(pos); - mc.setBlock(pos.toWorld(-1), wool(Color.LIGHT_BLUE)); - } - if (LevelTile.STONE == t || LevelTile.TARGET_AND_STONE == t) { - stones.add(pos); - mc.setBlock(pos.toWorld(0), IRON_BLOCK); - } - } - } - - mc.events.clearAll(); - mc.postToChat("Level " + level.number + " - " + level.name); - } - - void onBlockHit(Vec position, Vec.Unit direction) { - Position from = Position.fromWorld(position); - Position to = Position.fromWorld(position.add(direction)); - if (!from.equals(to) && !walls.contains(to) && !stones.contains(to)) { - if (stones.remove(from)) { - stones.add(to); - mc.setBlock(to.toWorld(0), targets.contains(to) ? GOLD_BLOCK : IRON_BLOCK); - mc.setBlock(position, AIR); - } - } - } - - void sleep(long millis) { - try { - Thread.sleep(millis); - } catch (InterruptedException _) { - } - } - - /** - * - */ - private static class PositionSet extends HashSet { - } -} diff --git a/src/test/java/net/zhuoweizhang/raspberryjuice/SessionStepDefs.java b/src/test/java/net/zhuoweizhang/raspberryjuice/SessionStepDefs.java deleted file mode 100644 index 9b66940e..00000000 --- a/src/test/java/net/zhuoweizhang/raspberryjuice/SessionStepDefs.java +++ /dev/null @@ -1,100 +0,0 @@ -package net.zhuoweizhang.raspberryjuice; - -import cucumber.api.java.en.And; -import cucumber.api.java.en.Given; -import cucumber.api.java.en.Then; -import cucumber.api.java.en.When; -import mockit.Mock; -import mockit.MockUp; -import mockit.Mocked; -import org.bukkit.Location; -import org.bukkit.World; -//import org.bukkit.craftbukkit.v1_9_R1.CraftWorld; -import org.testng.Assert; - -import java.net.Socket; - -public class SessionStepDefs { - - @Mocked - private World world; - - private RemoteSession remoteSession; - private LocationType locationType; - private Location requestedPosition; - private String locationAsString; - private Location location; - - - @Given("^The location type (.*)$") - public void theLocationType(String type) throws Throwable { - locationType = LocationType.valueOf(type); - - RaspberryJuicePlugin plugin = new MockUp() { - @Mock - public LocationType getLocationType() { - return locationType; - } - }.getMockInstance(); - - Socket socket = new MockUp() { - }.getMockInstance(); - - new MockUp() { - @Mock - public void init() { - //Avoid the real init as it errors out and we don't need it for our tests - } - }; - - remoteSession = new RemoteSession(plugin, socket); - } - - @And("^a spawn point of (.*), (.*), (.*)$") - public void aSpawnPointOf(double x, double y, double z) throws Throwable { - Location origin = new Location(world, x, y, z); - remoteSession.setOrigin(origin); - } - - @And("^a location point of (\\d+), (\\d+), (-?\\d+)$") - public void aLocationPointOf(int x, int y, int z) throws Throwable { - requestedPosition = new Location(world, x, y, z); - } - - @When("^a request for a relative location is made$") - public void aRequestForARelativeLocationIsMade() throws Throwable { - locationAsString = remoteSession.locationToRelative(requestedPosition); - } - - @Then("^the relative location should have co-ordinates (.*), (.*), (.*)$") - public void theRelativeLocationShouldHaveCoOrdinates(String x, String y, String z) throws Throwable { - String[] split = locationAsString.split(","); - Assert.assertEquals(split[0], x); - Assert.assertEquals(split[1], y); - Assert.assertEquals(split[2], z); - } - - @When("^a request for a relative block location is made at (.*), (.*), (.*)$") - public void aRequestForARelativeBlockLocationIsMade(String x, String y, String z) throws Throwable { - location = remoteSession.parseRelativeBlockLocation(x, y, z); - } - - @Then("^the block location should have co-ordinates (.*), (.*), (.*)$") - public void theBlockLocationShouldHaveCoOrdinates(int x, int y, int z) throws Throwable { - Assert.assertEquals(location.getBlockX(), x); - Assert.assertEquals(location.getBlockY(), y); - Assert.assertEquals(location.getBlockZ(), z); - } - - @When("^a request for a relative location is made at (.*), (.*), (.*)$") - public void aRequestForARelativeLocationIsMade(String x, String y, String z) throws Throwable { - location = remoteSession.parseRelativeLocation(x, y, z); - } - - @Then("^the location should have co-ordinates (.*), (.*), (.*)$") - public void theLocationShouldHaveCoOrdinates(double x, double y, double z) throws Throwable { - Assert.assertEquals(location.getX(), x); - Assert.assertEquals(location.getY(), y); - Assert.assertEquals(location.getZ(), z); - } -} diff --git a/src/test/resources/net/zhuoweizhang/raspberryjuice/remotesession.feature b/src/test/resources/net/zhuoweizhang/raspberryjuice/remotesession.feature deleted file mode 100644 index f988cf93..00000000 --- a/src/test/resources/net/zhuoweizhang/raspberryjuice/remotesession.feature +++ /dev/null @@ -1,44 +0,0 @@ -Feature: Calculate the relative locations as different config options and pi/bukkit can provide different locations - - Scenario Outline: Test the locationToRelative function - - Given The location type - And a spawn point of , , - And a location point of 20, 3, -5 - When a request for a relative location is made - Then the relative location should have co-ordinates , , - - Examples: - | LocationType | SpawnX | SpawnY | SpawnZ | LocationX | LocationY | LocationZ | - | RELATIVE | 0 | 0 | 0 | 20.0 | 3.0 | -5.0 | - | RELATIVE | -100 | 50 | 100 | 120.0 | -47.0 | -105.0 | - | ABSOLUTE | 0 | 0 | 0 | 20.0 | 3.0 | -5.0 | - | ABSOLUTE | -100 | 50 | 100 | 20.0 | 3.0 | -5.0 | - - Scenario Outline: Determine the location of co-ordinates relative to a block - - Given The location type - And a spawn point of , , - When a request for a relative block location is made at 32, 69, -100 - Then the block location should have co-ordinates , , - - Examples: - | LocationType | SpawnX | SpawnY | SpawnZ | LocationX | LocationY | LocationZ | - | RELATIVE | 0 | 0 | 0 | 32 | 69 | -100 | - | RELATIVE | -100 | 50 | 100 | -68 | 119 | 0 | - | ABSOLUTE | 0 | 0 | 0 | 32 | 69 | -100 | - | ABSOLUTE | -100 | 50 | 100 | 32 | 69 | -100 | - - Scenario Outline: Determine the location of co-ordinates - - Given The location type - And a spawn point of , , - When a request for a relative location is made at 32, 69, -100 - Then the location should have co-ordinates , , - - Examples: - | LocationType | SpawnX | SpawnY | SpawnZ | LocationX | LocationY | LocationZ | - | RELATIVE | 0 | 0 | 0 | 32 | 69 | -100 | - | RELATIVE | -100 | 50 | 100 | -68 | 119 | 0 | - | ABSOLUTE | 0 | 0 | 0 | 32 | 69 | -100 | - | ABSOLUTE | -100 | 50 | 100 | 32 | 69 | -100 | From cec5f9962abb35e394bd476d50d1229b8a6f9a55 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sat, 13 Jul 2019 19:13:23 +0800 Subject: [PATCH 02/82] =?UTF-8?q?1.14=20setBlock=20=E3=80=81=20setSign=20?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../raspberryjuice/RaspberryJuicePlugin.java | 66 +++++++++++-------- .../raspberryjuice/RemoteSession.java | 21 +++--- src/main/java/plugin.yml | 4 +- 3 files changed, 52 insertions(+), 39 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java index 34af9ed6..8b839685 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java @@ -1,27 +1,30 @@ package net.zhuoweizhang.raspberryjuice; -import java.net.*; -import java.util.*; - -import org.bukkit.*; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; +import java.net.InetSocketAddress; +import java.util.*; + public class RaspberryJuicePlugin extends JavaPlugin implements Listener { public static final Set blockBreakDetectionTools = EnumSet.of( Material.DIAMOND_SWORD, - Material.GOLD_SWORD, - Material.IRON_SWORD, - Material.STONE_SWORD, - Material.WOOD_SWORD); +// Material.GOLDEN_SWORD, + Material.IRON_SWORD, + Material.STONE_SWORD +// Material.WOODEN_SWORD + ); public ServerListenerThread serverThread; @@ -32,25 +35,27 @@ public class RaspberryJuicePlugin extends JavaPlugin implements Listener { private LocationType locationType; private HitClickType hitClickType; + public LocationType getLocationType() { return locationType; } + public HitClickType getHitClickType() { return hitClickType; } public void onEnable() { //save a copy of the default config.yml if one is not there - this.saveDefaultConfig(); - //get port from config.yml + this.saveDefaultConfig(); + //get port from config.yml int port = this.getConfig().getInt("port"); getLogger().info("Using port " + Integer.toString(port)); - + //get location type (ABSOLUTE or RELATIVE) from config.yml String location = this.getConfig().getString("location").toUpperCase(); try { locationType = LocationType.valueOf(location); - } catch(IllegalArgumentException e) { + } catch (IllegalArgumentException e) { getLogger().warning("warning - location value in config.yml should be ABSOLUTE or RELATIVE - '" + location + "' found"); locationType = LocationType.valueOf("RELATIVE"); } @@ -60,7 +65,7 @@ public void onEnable() { String hitClick = this.getConfig().getString("hitclick").toUpperCase(); try { hitClickType = HitClickType.valueOf(hitClick); - } catch(IllegalArgumentException e) { + } catch (IllegalArgumentException e) { getLogger().warning("warning - hitclick value in config.yml should be LEFT, RIGHT or BOTH - '" + hitClick + "' found"); hitClickType = HitClickType.valueOf("RIGHT"); } @@ -68,7 +73,7 @@ public void onEnable() { //setup session array sessions = new ArrayList(); - + //create new tcp listener thread try { serverThread = new ServerListenerThread(this, new InetSocketAddress(port)); @@ -85,12 +90,13 @@ public void onEnable() { getServer().getScheduler().scheduleSyncRepeatingTask(this, new TickHandler(), 1, 1); } - @EventHandler(ignoreCancelled=true) + @EventHandler(ignoreCancelled = true) public void onPlayerInteract(PlayerInteractEvent event) { // only react to events which are of the correct type - switch(hitClickType) { + switch (hitClickType) { case BOTH: - if ((event.getAction() != Action.RIGHT_CLICK_BLOCK) && (event.getAction() != Action.LEFT_CLICK_BLOCK)) return; + if ((event.getAction() != Action.RIGHT_CLICK_BLOCK) && (event.getAction() != Action.LEFT_CLICK_BLOCK)) + return; break; case LEFT: if (event.getAction() != Action.LEFT_CLICK_BLOCK) return; @@ -103,35 +109,37 @@ public void onPlayerInteract(PlayerInteractEvent event) { if (currentTool == null || !blockBreakDetectionTools.contains(currentTool.getType())) { return; } - for (RemoteSession session: sessions) { + for (RemoteSession session : sessions) { session.queuePlayerInteractEvent(event); } } - @EventHandler(ignoreCancelled=true) + @EventHandler(ignoreCancelled = true) public void onChatPosted(AsyncPlayerChatEvent event) { //debug //getLogger().info("Chat event fired"); - for (RemoteSession session: sessions) { + for (RemoteSession session : sessions) { session.queueChatPostedEvent(event); } } - /** called when a new session is established. */ + /** + * called when a new session is established. + */ public void handleConnection(RemoteSession newSession) { if (checkBanned(newSession)) { getLogger().warning("Kicking " + newSession.getSocket().getRemoteSocketAddress() + " because the IP address has been banned."); newSession.kick("You've been banned from this server!"); return; } - synchronized(sessions) { + synchronized (sessions) { sessions.add(newSession); } } public Player getNamedPlayer(String name) { if (name == null) return null; - for(Player player : Bukkit.getOnlinePlayers()) { + for (Player player : Bukkit.getOnlinePlayers()) { if (name.equals(player.getPlayerListName())) { return player; } @@ -141,7 +149,7 @@ public Player getNamedPlayer(String name) { public Player getHostPlayer() { if (hostPlayer != null) return hostPlayer; - for(Player player : Bukkit.getOnlinePlayers()) { + for (Player player : Bukkit.getOnlinePlayers()) { return player; } return null; @@ -149,7 +157,7 @@ public Player getHostPlayer() { //get entity by id - DONE to be compatible with the pi it should be changed to return an entity not a player... public Entity getEntity(int id) { - for (Player p: getServer().getOnlinePlayers()) { + for (Player p : getServer().getOnlinePlayers()) { if (p.getEntityId() == id) { return p; } @@ -174,7 +182,7 @@ public boolean checkBanned(RemoteSession session) { public void onDisable() { getServer().getScheduler().cancelTasks(this); - for (RemoteSession session: sessions) { + for (RemoteSession session : sessions) { try { session.close(); } catch (Exception e) { @@ -197,7 +205,7 @@ public void onDisable() { private class TickHandler implements Runnable { public void run() { Iterator sI = sessions.iterator(); - while(sI.hasNext()) { + while (sI.hasNext()) { RemoteSession s = sI.next(); if (s.pendingRemoval) { s.close(); diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 5c0acbbe..a46028ed 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -9,6 +9,7 @@ import org.bukkit.block.*; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.material.Directional; import org.bukkit.util.Vector; public class RemoteSession { @@ -146,7 +147,7 @@ protected void handleCommand(String c, String[] args) { // world.getBlock if (c.equals("world.getBlock")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - send(world.getBlockTypeIdAt(loc)); + send(world.getBlockAt(loc).getType().getId()); // world.getBlocks } else if (c.equals("world.getBlocks")) { @@ -157,7 +158,7 @@ protected void handleCommand(String c, String[] args) { // world.getBlockWithData } else if (c.equals("world.getBlockWithData")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - send(world.getBlockTypeIdAt(loc) + "," + world.getBlockAt(loc).getData()); + send(world.getBlockAt(loc).getType().getId() + "," + world.getBlockAt(loc).getData()); // world.setBlock } else if (c.equals("world.setBlock")) { @@ -478,8 +479,10 @@ protected void handleCommand(String c, String[] args) { //facing direction for wall sign : 2=north, 3=south, 4=west, 5=east //rotation 0 - to 15 for standing sign : 0=south, 4=west, 8=north, 12=east byte blockData = Byte.parseByte(args[4]); - if ((thisBlock.getTypeId() != blockType) || (thisBlock.getData() != blockData)) { - thisBlock.setTypeIdAndData(blockType, blockData, true); + if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { + thisBlock.setType(Material.DIRT); + ((Directional) thisBlock.getBlockData()).setFacingDirection(BlockFace.EAST); +// thisBlock.setTypeIdAndData(blockType, blockData, true); } //plugin.getLogger().info("Creating sign at " + loc); if ( thisBlock.getState() instanceof Sign ) { @@ -559,7 +562,7 @@ private String getBlocks(Location pos1, Location pos2) { for (int y = minY; y <= maxY; ++y) { for (int x = minX; x <= maxX; ++x) { for (int z = minZ; z <= maxZ; ++z) { - blockData.append(new Integer(world.getBlockTypeIdAt(x, y, z)).toString() + ","); + blockData.append(new Integer(world.getBlockAt(x, y, z).getType().getId()).toString() + ","); } } } @@ -577,11 +580,13 @@ private void updateBlock(World world, int x, int y, int z, int blockType, byte b Block thisBlock = world.getBlockAt(x,y,z); updateBlock(thisBlock, blockType, blockData); } - + + //暫時使用,需要及時修改 private void updateBlock(Block thisBlock, int blockType, byte blockData) { // check to see if the block is different - otherwise leave it - if ((thisBlock.getTypeId() != blockType) || (thisBlock.getData() != blockData)) { - thisBlock.setTypeIdAndData(blockType, blockData, true); + if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { + thisBlock.setType(Material.valueOf("STONE")); +// thisBlock.setTypeIdAndData(blockType, blockData, true); } } diff --git a/src/main/java/plugin.yml b/src/main/java/plugin.yml index 4271bc56..79d666cc 100644 --- a/src/main/java/plugin.yml +++ b/src/main/java/plugin.yml @@ -1,7 +1,7 @@ -author: Zhuowei +author: MinecraftDawn database: false description: Implementation of the Minecraft PI modding API main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin name: RaspberryJuice startup: postworld -version: '1.11' +version: 1.14 From da40e1bd89546550ae7c9517e7d2059c349dacc8 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 14 Jul 2019 22:35:43 +0800 Subject: [PATCH 03/82] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8setbl?= =?UTF-8?q?ock(=E4=BD=86=E9=A0=88=E8=99=95=E7=90=86=E6=89=93=E9=8C=AF?= =?UTF-8?q?=E5=AD=97=E5=95=8F=E9=A1=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhuoweizhang/raspberryjuice/RemoteSession.java | 14 +++++++------- .../mcpi/api/python/original/mcpi/minecraft.py | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index a46028ed..f0269d93 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -163,13 +163,13 @@ protected void handleCommand(String c, String[] args) { // world.setBlock } else if (c.equals("world.setBlock")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - updateBlock(world, loc, Integer.parseInt(args[3]), (args.length > 4? Byte.parseByte(args[4]) : (byte) 0)); + updateBlock(world, loc, args[3], (args.length > 4? Byte.parseByte(args[4]) : (byte) 0)); // world.setBlocks } else if (c.equals("world.setBlocks")) { Location loc1 = parseRelativeBlockLocation(args[0], args[1], args[2]); Location loc2 = parseRelativeBlockLocation(args[3], args[4], args[5]); - int blockType = Integer.parseInt(args[6]); + String blockType = args[6]; byte data = args.length > 7? Byte.parseByte(args[7]) : (byte) 0; setCuboid(loc1, loc2, blockType, data); @@ -527,7 +527,7 @@ protected void handleCommand(String c, String[] args) { } // create a cuboid of lots of blocks - private void setCuboid(Location pos1, Location pos2, int blockType, byte data) { + private void setCuboid(Location pos1, Location pos2, String blockType, byte data) { int minX, maxX, minY, maxY, minZ, maxZ; World world = pos1.getWorld(); minX = pos1.getBlockX() < pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); @@ -571,20 +571,20 @@ private String getBlocks(Location pos1, Location pos2) { } // updates a block - private void updateBlock(World world, Location loc, int blockType, byte blockData) { + private void updateBlock(World world, Location loc, String blockType, byte blockData) { Block thisBlock = world.getBlockAt(loc); updateBlock(thisBlock, blockType, blockData); } - private void updateBlock(World world, int x, int y, int z, int blockType, byte blockData) { + private void updateBlock(World world, int x, int y, int z, String blockType, byte blockData) { Block thisBlock = world.getBlockAt(x,y,z); updateBlock(thisBlock, blockType, blockData); } //暫時使用,需要及時修改 - private void updateBlock(Block thisBlock, int blockType, byte blockData) { + private void updateBlock(Block thisBlock, String blockType, byte blockData) { // check to see if the block is different - otherwise leave it - if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { + if ((thisBlock.getType() != Material.valueOf(blockType))) { thisBlock.setType(Material.valueOf("STONE")); // thisBlock.setTypeIdAndData(blockType, blockData, true); } diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py index 1d1f293d..2d551b43 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py @@ -135,7 +135,7 @@ def getBlocks(self, *args): def setBlock(self, *args): """Set block (x,y,z,id,[data])""" - self.conn.send(b"world.setBlock", intFloor(args)) + self.conn.send(b"world.setBlock", args) def setBlocks(self, *args): """Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])""" From 50d9198684117962ec25bb89181dc9d2ea9da609 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 14 Jul 2019 22:43:15 +0800 Subject: [PATCH 04/82] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8setbl?= =?UTF-8?q?ock(=E9=9C=80=E8=99=95=E7=90=86=E9=8C=AF=E5=AD=97=E5=95=8F?= =?UTF-8?q?=E9=A1=8C=EF=BC=8C=E5=A4=A7=E5=B0=8F=E5=AF=AB=E5=B7=B2=E8=A7=A3?= =?UTF-8?q?=E6=B1=BA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/net/zhuoweizhang/raspberryjuice/RemoteSession.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index f0269d93..2a5063bc 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -583,9 +583,10 @@ private void updateBlock(World world, int x, int y, int z, String blockType, byt //暫時使用,需要及時修改 private void updateBlock(Block thisBlock, String blockType, byte blockData) { - // check to see if the block is different - otherwise leave it + // check to see if the block is different - otherwise leave it + blockType = blockType.toUpperCase(); if ((thisBlock.getType() != Material.valueOf(blockType))) { - thisBlock.setType(Material.valueOf("STONE")); + thisBlock.setType(Material.valueOf(blockType.toUpperCase())); // thisBlock.setTypeIdAndData(blockType, blockData, true); } } From d32f21af42c83f063a4f2e21cfa3cdcdb87a5386 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Mon, 15 Jul 2019 21:25:14 +0800 Subject: [PATCH 05/82] =?UTF-8?q?=E8=A8=AD=E7=BD=AEPython=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mcpi/api/python/original/mcpi/minecraft.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py index 2d551b43..ba2a77d1 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py @@ -2,7 +2,6 @@ from .vec3 import Vec3 from .event import BlockEvent from .block import Block -import math from .util import flatten """ Minecraft PI low level api v0.1_1 @@ -19,7 +18,7 @@ def intFloor(*args): - return [int(math.floor(x)) for x in flatten(args)] + return [int(x) for x in flatten(args)] class CmdPositioner: """Methods for setting and getting positions""" @@ -44,6 +43,15 @@ def getTilePos(self, id): def setTilePos(self, id, *args): """Set entity tile position (entityId:int) => Vec3""" self.conn.send(self.pkg + b".setTile", id, intFloor(*args)) + + def getDirection(self, id): + """取得玩家視線方向""" + s = self.conn.sendReceive(self.pkg + b".getDirection", id) + return Vec3(*list(s.split(","))) + + def setDirection(self, id, *args): + """設置玩家視線方向""" + self.conn.send(self.pkg + b".setDirection", id, intFloor(*args)) def setting(self, setting, status): """Set a player setting (setting, status). keys: autojump""" @@ -70,6 +78,10 @@ def getTilePos(self): return CmdPositioner.getTilePos(self, []) def setTilePos(self, *args): return CmdPositioner.setTilePos(self, [], args) + def getDirection(self): + return CmdPositioner.getDirection(self, []) + def setDirection(self, *args): + return CmdPositioner.setDirection(self, [], args) class CmdCamera: def __init__(self, connection): @@ -139,7 +151,7 @@ def setBlock(self, *args): def setBlocks(self, *args): """Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])""" - self.conn.send(b"world.setBlocks", intFloor(args)) + self.conn.send(b"world.setBlocks", intFloor(args[:6])+[args[6]]) def getHeight(self, *args): """Get the height of the world (x,z) => int""" From af58017aaae77d846789b4164a21fe529a7185db Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 17 Jul 2019 22:30:27 +0800 Subject: [PATCH 06/82] =?UTF-8?q?=E6=96=B0=E5=A2=9EgetRotation=E3=80=81set?= =?UTF-8?q?Rotation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/artifacts/RaspberryJuice_jar.xml | 8 ++++++++ .idea/modules.xml | 1 + .../mcpi/api/python/original/mcpi/minecraft.py | 14 ++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 .idea/artifacts/RaspberryJuice_jar.xml diff --git a/.idea/artifacts/RaspberryJuice_jar.xml b/.idea/artifacts/RaspberryJuice_jar.xml new file mode 100644 index 00000000..5cf20ae0 --- /dev/null +++ b/.idea/artifacts/RaspberryJuice_jar.xml @@ -0,0 +1,8 @@ + + + $PROJECT_DIR$/out/artifacts/RaspberryJuice_jar + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index d0670cd6..e9119e4a 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,6 +2,7 @@ + diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py index ba2a77d1..dc4e16ed 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py @@ -52,6 +52,15 @@ def getDirection(self, id): def setDirection(self, id, *args): """設置玩家視線方向""" self.conn.send(self.pkg + b".setDirection", id, intFloor(*args)) + + def getRotation(self, id): + """取得玩家轉向""" + s = self.conn.sendReceive(self.pkg + b".getRotation", id) + return float(s) + + def setRotation(self, id, yaw): + """設置玩家轉向""" + self.conn.send(self.pkg + b".setRotation", id, yaw) def setting(self, setting, status): """Set a player setting (setting, status). keys: autojump""" @@ -82,6 +91,11 @@ def getDirection(self): return CmdPositioner.getDirection(self, []) def setDirection(self, *args): return CmdPositioner.setDirection(self, [], args) + def getRotation(self): + return CmdPositioner.getRotation(self, []) + def setRotation(self, yaw): + return CmdPositioner.setRotation(self, [], yaw) + class CmdCamera: def __init__(self, connection): From 1240cce2d8f7da23bac04b9d0a4afd07a14ae8a7 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Thu, 18 Jul 2019 22:25:26 +0800 Subject: [PATCH 07/82] =?UTF-8?q?pyhon=20(getPitch=E3=80=81setPitch)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mcpi/api/python/original/mcpi/minecraft.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py index dc4e16ed..c6d6483e 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py @@ -61,6 +61,13 @@ def getRotation(self, id): def setRotation(self, id, yaw): """設置玩家轉向""" self.conn.send(self.pkg + b".setRotation", id, yaw) + + def getPitch(self, id): + s = self.conn.sendReceive(self.pkg + b".getPitch",id) + return float(s) + + def setPitch(self, id, pitch): + self.conn.send(self.pkg + b".setPitch", id, pitch) def setting(self, setting, status): """Set a player setting (setting, status). keys: autojump""" @@ -95,7 +102,10 @@ def getRotation(self): return CmdPositioner.getRotation(self, []) def setRotation(self, yaw): return CmdPositioner.setRotation(self, [], yaw) - + def getPitch(self): + return CmdPositioner.getPitch(self, []) + def setPitch(self, pitch): + return CmdPositioner.setPitch(self, [], pitch) class CmdCamera: def __init__(self, connection): From dc8186d538a83cdcac972ec12e4c2e223b20dea6 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sat, 20 Jul 2019 23:54:05 +0800 Subject: [PATCH 08/82] =?UTF-8?q?setSign=20(=E5=B0=9A=E6=9C=AA=E5=AE=8C?= =?UTF-8?q?=E6=88=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../raspberryjuice/RemoteSession.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 2a5063bc..5eeab0b3 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -472,18 +472,21 @@ protected void handleCommand(String c, String[] args) { // world.setSign } else if (c.equals("world.setSign")) { + for(String s: args){ + System.out.println(s); + } Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); Block thisBlock = world.getBlockAt(loc); //blockType should be 68 for wall sign or 63 for standing sign - int blockType = Integer.parseInt(args[3]); +// int blockType = Integer.parseInt(args[3]); //facing direction for wall sign : 2=north, 3=south, 4=west, 5=east //rotation 0 - to 15 for standing sign : 0=south, 4=west, 8=north, 12=east - byte blockData = Byte.parseByte(args[4]); - if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { - thisBlock.setType(Material.DIRT); - ((Directional) thisBlock.getBlockData()).setFacingDirection(BlockFace.EAST); +// byte blockData = Byte.parseByte(args[4]); +// if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { + thisBlock.setType(Material.SPRUCE_SIGN); + //((Directional) thisBlock.getBlockData()).setFacingDirection(BlockFace.EAST); // thisBlock.setTypeIdAndData(blockType, blockData, true); - } +// } //plugin.getLogger().info("Creating sign at " + loc); if ( thisBlock.getState() instanceof Sign ) { Sign sign = (Sign) thisBlock.getState(); @@ -581,7 +584,6 @@ private void updateBlock(World world, int x, int y, int z, String blockType, byt updateBlock(thisBlock, blockType, blockData); } - //暫時使用,需要及時修改 private void updateBlock(Block thisBlock, String blockType, byte blockData) { // check to see if the block is different - otherwise leave it blockType = blockType.toUpperCase(); From 7111e7d616ced8787f862316803e3286a2c22dea Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 21 Jul 2019 23:50:06 +0800 Subject: [PATCH 09/82] =?UTF-8?q?setSign=20(=E5=B0=9A=E6=9C=AA=E5=AE=8C?= =?UTF-8?q?=E6=88=90)=20=E4=BF=AE=E6=94=B9plugin.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/net/zhuoweizhang/raspberryjuice/RemoteSession.java | 2 +- src/main/java/plugin.yml | 5 +++-- .../resources/mcpi/api/python/original/mcpi/minecraft.py | 5 +++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 5eeab0b3..cda144d0 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -483,7 +483,7 @@ protected void handleCommand(String c, String[] args) { //rotation 0 - to 15 for standing sign : 0=south, 4=west, 8=north, 12=east // byte blockData = Byte.parseByte(args[4]); // if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { - thisBlock.setType(Material.SPRUCE_SIGN); + thisBlock.setType(Material.JUNGLE_SIGN); //((Directional) thisBlock.getBlockData()).setFacingDirection(BlockFace.EAST); // thisBlock.setTypeIdAndData(blockType, blockData, true); // } diff --git a/src/main/java/plugin.yml b/src/main/java/plugin.yml index 79d666cc..d1e03137 100644 --- a/src/main/java/plugin.yml +++ b/src/main/java/plugin.yml @@ -1,7 +1,8 @@ -author: MinecraftDawn +author: [MinecraftDawn,Zhuowei] database: false description: Implementation of the Minecraft PI modding API main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin name: RaspberryJuice startup: postworld -version: 1.14 +version: 1.14a +api-version: 1.13 \ No newline at end of file diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py index c6d6483e..88efa315 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py @@ -63,10 +63,12 @@ def setRotation(self, id, yaw): self.conn.send(self.pkg + b".setRotation", id, yaw) def getPitch(self, id): + """取得玩家俯仰""" s = self.conn.sendReceive(self.pkg + b".getPitch",id) return float(s) def setPitch(self, id, pitch): + """設置玩家俯仰""" self.conn.send(self.pkg + b".setPitch", id, pitch) def setting(self, setting, status): @@ -197,6 +199,9 @@ def restoreCheckpoint(self): def postToChat(self, msg): """Post a message to the game chat""" self.conn.send(b"chat.post", msg) + + def setSign(self, x, y, z, *args): + self.conn.send(b"world.setSign", x,y,z ,args) def setting(self, setting, status): """Set a world setting (setting, status). keys: world_immutable, nametags_visible""" From 4af8b9f7a91e094511912d9def12b0834d0e5ce3 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Thu, 25 Jul 2019 16:34:24 +0800 Subject: [PATCH 10/82] =?UTF-8?q?=E5=B0=87mcpi(modded)=E7=9A=84=E6=AA=94?= =?UTF-8?q?=E6=A1=88=E6=95=B4=E5=90=88=E8=87=B3mcpi(origin)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../raspberryjuice/RemoteSession.java | 5 +---- .../mcpi/api/python/original/mcpi/event.py | 21 +++++++++++++++++++ .../api/python/original/mcpi/minecraft.py | 8 ++++++- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index cda144d0..7cbfd735 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -472,14 +472,11 @@ protected void handleCommand(String c, String[] args) { // world.setSign } else if (c.equals("world.setSign")) { - for(String s: args){ - System.out.println(s); - } Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); Block thisBlock = world.getBlockAt(loc); //blockType should be 68 for wall sign or 63 for standing sign // int blockType = Integer.parseInt(args[3]); - //facing direction for wall sign : 2=north, 3=south, 4=west, 5=east + //facing direction for wall sign : 2=north, 3=south, 4=west, 5=east //rotation 0 - to 15 for standing sign : 0=south, 4=west, 8=north, 12=east // byte blockData = Byte.parseByte(args[4]); // if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { diff --git a/src/main/resources/mcpi/api/python/original/mcpi/event.py b/src/main/resources/mcpi/api/python/original/mcpi/event.py index 68193bc9..436cfa1b 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/event.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/event.py @@ -21,3 +21,24 @@ def __repr__(self): @staticmethod def Hit(x, y, z, face, entityId): return BlockEvent(BlockEvent.HIT, x, y, z, face, entityId) + +class ChatEvent: + """An Event related to chat (e.g. posts)""" + POST = 0 + + def __init__(self, type, entityId, message): + self.type = type + self.entityId = entityId + self.message = message + + def __repr__(self): + sType = { + ChatEvent.POST: "ChatEvent.POST" + }.get(self.type, "???") + + return "ChatEvent(%s, %d, %s)"%( + sType,self.entityId,self.message); + + @staticmethod + def Post(entityId, message): + return ChatEvent(ChatEvent.POST, entityId, message) \ No newline at end of file diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py index 88efa315..057bba82 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py @@ -1,6 +1,6 @@ from .connection import Connection from .vec3 import Vec3 -from .event import BlockEvent +from .event import BlockEvent, ChatEvent from .block import Block from .util import flatten @@ -144,6 +144,12 @@ def pollBlockHits(self): s = self.conn.sendReceive(b"events.block.hits") events = [e for e in s.split("|") if e] return [BlockEvent.Hit(*list(map(int, e.split(",")))) for e in events] + + def pollChatPosts(self): + """Triggered by posts to chat => [ChatEvent]""" + s = self.conn.sendReceive(b"events.chat.posts") + events = [e for e in s.split("|") if e] + return [ChatEvent.Post(int(e[:e.find(",")]), e[e.find(",") + 1:]) for e in events] class Minecraft: From bb4133fb5ef64b597d8eb4897b4a4d0e5d226481 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Thu, 25 Jul 2019 18:34:40 +0800 Subject: [PATCH 11/82] =?UTF-8?q?=E5=B0=87mcpi(modded)=E7=9A=84=E6=AA=94?= =?UTF-8?q?=E6=A1=88=E6=95=B4=E5=90=88=E8=87=B3mcpi(origin)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mcpi/api/python/original/mcpi/minecraft.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py index 057bba82..a6047ab0 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py @@ -1,6 +1,7 @@ from .connection import Connection from .vec3 import Vec3 from .event import BlockEvent, ChatEvent +from .entity import Entity from .block import Block from .util import flatten @@ -80,6 +81,12 @@ class CmdEntity(CmdPositioner): """Methods for entities""" def __init__(self, connection): CmdPositioner.__init__(self, connection, b"entity") + + def getName(self, id): + """Get the list name of the player with entity id => [name:str] + + Also can be used to find name of entity if entity is not a player.""" + return self.conn.sendReceive(b"entity.getName", id) class CmdPlayer(CmdPositioner): @@ -208,6 +215,14 @@ def postToChat(self, msg): def setSign(self, x, y, z, *args): self.conn.send(b"world.setSign", x,y,z ,args) + + def spawnEntity(self, *args): + """Spawn entity (x,y,z,id,[data])""" + return int(self.conn.sendReceive(b"world.spawnEntity", intFloor(args))) + + def getPlayerEntityId(self, name): + """Get the entity id of the named player => [id:int]""" + return int(self.conn.sendReceive(b"world.getPlayerId", name)) def setting(self, setting, status): """Set a world setting (setting, status). keys: world_immutable, nametags_visible""" From d571b4d5b053313214155daa5219336da759b4c0 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Thu, 25 Jul 2019 19:37:14 +0800 Subject: [PATCH 12/82] =?UTF-8?q?=E4=BF=AE=E6=94=B9getBlock=E3=80=81getBlo?= =?UTF-8?q?cks=E7=9A=84=E5=9B=9E=E5=82=B3=E5=9E=8B=E6=85=8B=EF=BC=8C?= =?UTF-8?q?=E7=94=B1int=E8=BD=89=E7=82=BAstring?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/net/zhuoweizhang/raspberryjuice/RemoteSession.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 7cbfd735..6728c948 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -147,7 +147,7 @@ protected void handleCommand(String c, String[] args) { // world.getBlock if (c.equals("world.getBlock")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - send(world.getBlockAt(loc).getType().getId()); + send(world.getBlockAt(loc).getType().name()); // world.getBlocks } else if (c.equals("world.getBlocks")) { @@ -562,7 +562,7 @@ private String getBlocks(Location pos1, Location pos2) { for (int y = minY; y <= maxY; ++y) { for (int x = minX; x <= maxX; ++x) { for (int z = minZ; z <= maxZ; ++z) { - blockData.append(new Integer(world.getBlockAt(x, y, z).getType().getId()).toString() + ","); + blockData.append(world.getBlockAt(x, y, z).getType().name() + ","); } } } From 22a4fe9be4ea8ef08c0314c89dcfa9d3b8695db8 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Fri, 26 Jul 2019 14:46:33 +0800 Subject: [PATCH 13/82] =?UTF-8?q?=E4=BF=AE=E6=94=B9PostToChat=E5=8F=8AMine?= =?UTF-8?q?craft.py=E6=96=B9=E6=B3=95=E5=8F=83=E6=95=B8=EF=BC=8C=E4=B8=A6?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=9E=8B=E6=85=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../raspberryjuice/RemoteSession.java | 2 +- .../api/python/original/mcpi/minecraft.py | 58 +++++++++---------- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 6728c948..245f59eb 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -216,7 +216,7 @@ protected void handleCommand(String c, String[] args) { String chatMessage = ""; int count; for(count=0;count str: """Get block (x,y,z) => id:int""" - return int(self.conn.sendReceive(b"world.getBlock", intFloor(args))) + return self.conn.sendReceive(b"world.getBlock", x, y, z) - def getBlockWithData(self, *args): + def getBlockWithData(self, x:int, y:int, z:int) -> Block: """Get block with data (x,y,z) => Block""" - ans = self.conn.sendReceive(b"world.getBlockWithData", intFloor(args)) + ans = self.conn.sendReceive(b"world.getBlockWithData", x, y, z) return Block(*list(map(int, ans.split(",")))) - """ - @TODO - """ - def getBlocks(self, *args): + + def getBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int): """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" - return int(self.conn.sendReceive(b"world.getBlocks", intFloor(args))) + return self.conn.sendReceive(b"world.getBlocks", x1, y1, z1, x2, y2, z2) - def setBlock(self, *args): + def setBlock(self, x:int, y:int, z:int, block:str) -> None: """Set block (x,y,z,id,[data])""" - self.conn.send(b"world.setBlock", args) + self.conn.send(b"world.setBlock", x, y, z, block) - def setBlocks(self, *args): - """Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])""" - self.conn.send(b"world.setBlocks", intFloor(args[:6])+[args[6]]) + def setBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int, block): + """Set a cuboid of blocks (x1,y1,z1,x2,y2,z2,id,[data])""" + self.conn.send(b"world.setBlocks", x1, y1, z1, x2, y2, z2, block) - def getHeight(self, *args): + def getHeight(self, x, z) -> int: """Get the height of the world (x,z) => int""" - return int(self.conn.sendReceive(b"world.getHeight", intFloor(args))) + return self.conn.sendReceive(b"world.getHeight", x, z) - def getPlayerEntityIds(self): + def getPlayerEntityIds(self) -> list: """Get the entity ids of the connected players => [id:int]""" ids = self.conn.sendReceive(b"world.getPlayerIds") return list(map(int, ids.split("|"))) - def saveCheckpoint(self): - """Save a checkpoint that can be used for restoring the world""" - self.conn.send(b"world.checkpoint.save") +# def saveCheckpoint(self): +# """Save a checkpoint that can be used for restoring the world""" +# self.conn.send(b"world.checkpoint.save") - def restoreCheckpoint(self): - """Restore the world state to the checkpoint""" - self.conn.send(b"world.checkpoint.restore") +# def restoreCheckpoint(self): +# """Restore the world state to the checkpoint""" +# self.conn.send(b"world.checkpoint.restore") - def postToChat(self, msg): + def postToChat(self, *msg): """Post a message to the game chat""" self.conn.send(b"chat.post", msg) - def setSign(self, x, y, z, *args): - self.conn.send(b"world.setSign", x,y,z ,args) + def setSign(self, x:int, y:int, z:int, signType:str, signDir, line1="",line2="",line3="",line4=""): + self.conn.send(b"world.setSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) - def spawnEntity(self, *args): + def spawnEntity(self, x:int, y:int, z:int, entityID:int): """Spawn entity (x,y,z,id,[data])""" - return int(self.conn.sendReceive(b"world.spawnEntity", intFloor(args))) + return int(self.conn.sendReceive(b"world.spawnEntity", x, y, z, entityID)) - def getPlayerEntityId(self, name): + def getPlayerEntityId(self, name:str): """Get the entity id of the named player => [id:int]""" return int(self.conn.sendReceive(b"world.getPlayerId", name)) From 1c3c46692e1feded8c2e6db55b51987395696986 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 28 Jul 2019 20:01:17 +0800 Subject: [PATCH 14/82] =?UTF-8?q?=E5=98=97=E8=A9=A6=E8=83=BD=E8=AE=93?= =?UTF-8?q?=E5=91=8A=E7=A4=BA=E7=89=8C=E6=96=B9=E5=90=91=E8=BD=89=E8=AE=8A?= =?UTF-8?q?(=E5=B0=9A=E6=9C=AA=E5=AE=8C=E6=88=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../raspberryjuice/RemoteSession.java | 258 ++++++++++-------- 1 file changed, 142 insertions(+), 116 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 245f59eb..3370e4ed 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -5,11 +5,13 @@ import java.util.*; import org.bukkit.*; +import org.bukkit.block.data.BlockData; import org.bukkit.entity.*; import org.bukkit.block.*; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.material.Directional; +import org.bukkit.material.MaterialData; import org.bukkit.util.Vector; public class RemoteSession { @@ -23,9 +25,9 @@ public class RemoteSession { private BufferedReader in; private BufferedWriter out; - + private Thread inThread; - + private Thread outThread; private ArrayDeque inQueue = new ArrayDeque(); @@ -39,7 +41,7 @@ public class RemoteSession { public RaspberryJuicePlugin plugin; protected ArrayDeque interactEventQueue = new ArrayDeque(); - + protected ArrayDeque chatPostedQueue = new ArrayDeque(); private int maxCommandsPerTick = 9000; @@ -95,7 +97,9 @@ public void queueChatPostedEvent(AsyncPlayerChatEvent event) { chatPostedQueue.add(event); } - /** called from the server main thread */ + /** + * called from the server main thread + */ public void tick() { if (origin == null) { switch (locationType) { @@ -116,7 +120,7 @@ public void tick() { processedCount++; if (processedCount >= maxCommandsPerTick) { plugin.getLogger().warning("Over " + maxCommandsPerTick + - " commands were queued - deferring " + inQueue.size() + " to next tick"); + " commands were queued - deferring " + inQueue.size() + " to next tick"); break; } } @@ -136,59 +140,59 @@ protected void handleLine(String line) { } protected void handleCommand(String c, String[] args) { - + try { // get the server Server server = plugin.getServer(); - + // get the world World world = origin.getWorld(); - + // world.getBlock if (c.equals("world.getBlock")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); send(world.getBlockAt(loc).getType().name()); - - // world.getBlocks + + // world.getBlocks } else if (c.equals("world.getBlocks")) { Location loc1 = parseRelativeBlockLocation(args[0], args[1], args[2]); Location loc2 = parseRelativeBlockLocation(args[3], args[4], args[5]); send(getBlocks(loc1, loc2)); - - // world.getBlockWithData + + // world.getBlockWithData } else if (c.equals("world.getBlockWithData")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); send(world.getBlockAt(loc).getType().getId() + "," + world.getBlockAt(loc).getData()); - - // world.setBlock + + // world.setBlock } else if (c.equals("world.setBlock")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - updateBlock(world, loc, args[3], (args.length > 4? Byte.parseByte(args[4]) : (byte) 0)); - - // world.setBlocks + updateBlock(world, loc, args[3], (args.length > 4 ? Byte.parseByte(args[4]) : (byte) 0)); + + // world.setBlocks } else if (c.equals("world.setBlocks")) { Location loc1 = parseRelativeBlockLocation(args[0], args[1], args[2]); Location loc2 = parseRelativeBlockLocation(args[3], args[4], args[5]); String blockType = args[6]; - byte data = args.length > 7? Byte.parseByte(args[7]) : (byte) 0; + byte data = args.length > 7 ? Byte.parseByte(args[7]) : (byte) 0; setCuboid(loc1, loc2, blockType, data); - - // world.getPlayerIds + + // world.getPlayerIds } else if (c.equals("world.getPlayerIds")) { StringBuilder bdr = new StringBuilder(); Collection players = Bukkit.getOnlinePlayers(); if (players.size() > 0) { - for (Player p: players) { + for (Player p : players) { bdr.append(p.getEntityId()); bdr.append("|"); } - bdr.deleteCharAt(bdr.length()-1); + bdr.deleteCharAt(bdr.length() - 1); send(bdr.toString()); } else { send("Fail"); } - - // world.getPlayerId + + // world.getPlayerId } else if (c.equals("world.getPlayerId")) { Player p = plugin.getNamedPlayer(args[0]); if (p != null) { @@ -197,7 +201,7 @@ protected void handleCommand(String c, String[] args) { plugin.getLogger().info("Player [" + args[0] + "] not found."); send("Fail"); } - // entity.getListName + // entity.getListName } else if (c.equals("entity.getName")) { Entity e = plugin.getEntity(Integer.parseInt(args[0])); if (e == null) { @@ -209,27 +213,27 @@ protected void handleCommand(String c, String[] args) { } else if (e != null) { send(e.getName()); } - - // chat.post + + // chat.post } else if (c.equals("chat.post")) { //create chat message from args as it was split by , String chatMessage = ""; int count; - for(count=0;count= 0 ) { + if (entityType.isSpawnable() && entityType.getTypeId() >= 0) { bdr.append(entityType.getTypeId()); bdr.append(","); bdr.append(entityType.toString()); @@ -512,17 +535,17 @@ protected void handleCommand(String c, String[] args) { } send(bdr.toString()); - // not a command which is supported + // not a command which is supported } else { plugin.getLogger().warning(c + " is not supported."); send("Fail"); } } catch (Exception e) { - + plugin.getLogger().warning("Error occured handling command"); e.printStackTrace(); send("Fail"); - + } } @@ -560,14 +583,14 @@ private String getBlocks(Location pos1, Location pos2) { maxZ = pos1.getBlockZ() >= pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); for (int y = minY; y <= maxY; ++y) { - for (int x = minX; x <= maxX; ++x) { - for (int z = minZ; z <= maxZ; ++z) { + for (int x = minX; x <= maxX; ++x) { + for (int z = minZ; z <= maxZ; ++z) { blockData.append(world.getBlockAt(x, y, z).getType().name() + ","); } } } - return blockData.substring(0, blockData.length() > 0 ? blockData.length() - 1 : 0); // We don't want last comma + return blockData.substring(0, blockData.length() > 0 ? blockData.length() - 1 : 0); // We don't want last comma } // updates a block @@ -575,9 +598,9 @@ private void updateBlock(World world, Location loc, String blockType, byte block Block thisBlock = world.getBlockAt(loc); updateBlock(thisBlock, blockType, blockData); } - + private void updateBlock(World world, int x, int y, int z, String blockType, byte blockData) { - Block thisBlock = world.getBlockAt(x,y,z); + Block thisBlock = world.getBlockAt(x, y, z); updateBlock(thisBlock, blockType, blockData); } @@ -589,7 +612,7 @@ private void updateBlock(Block thisBlock, String blockType, byte blockData) { // thisBlock.setTypeIdAndData(blockType, blockData, true); } } - + // gets the current player public Player getCurrentPlayer() { Player player = attachedPlayer; @@ -628,7 +651,7 @@ public Location parseRelativeLocation(String xstr, String ystr, String zstr, flo loc.setYaw(yaw); return loc; } - + public String blockLocationToRelative(Location loc) { return parseLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), origin.getBlockX(), origin.getBlockY(), origin.getBlockZ()); } @@ -659,7 +682,7 @@ public void send(Object a) { public void send(String a) { if (pendingRemoval) return; - synchronized(outQueue) { + synchronized (outQueue) { outQueue.add(a); } } @@ -673,8 +696,7 @@ public void close() { try { inThread.join(2000); outThread.join(2000); - } - catch (InterruptedException e) { + } catch (InterruptedException e) { plugin.getLogger().warning("Failed to stop in/out thread"); e.printStackTrace(); } @@ -696,7 +718,9 @@ public void kick(String reason) { close(); } - /** socket listening thread */ + /** + * socket listening thread + */ private class InputThread implements Runnable { public void run() { plugin.getLogger().info("Starting input thread"); @@ -720,7 +744,7 @@ public void run() { } running = false; } - } + } } //close in buffer try { @@ -738,7 +762,7 @@ public void run() { while (running) { try { String line; - while((line = outQueue.poll()) != null) { + while ((line = outQueue.poll()) != null) { out.write(line); out.write('\n'); } @@ -763,23 +787,25 @@ public void run() { } } - /** from CraftBukkit's org.bukkit.craftbukkit.block.CraftBlock.blockFactToNotch */ + /** + * from CraftBukkit's org.bukkit.craftbukkit.block.CraftBlock.blockFactToNotch + */ public static int blockFaceToNotch(BlockFace face) { switch (face) { - case DOWN: - return 0; - case UP: - return 1; - case NORTH: - return 2; - case SOUTH: - return 3; - case WEST: - return 4; - case EAST: - return 5; - default: - return 7; // Good as anything here, but technically invalid + case DOWN: + return 0; + case UP: + return 1; + case NORTH: + return 2; + case SOUTH: + return 3; + case WEST: + return 4; + case EAST: + return 5; + default: + return 7; // Good as anything here, but technically invalid } } From 2d4000351f04dc20fc23885b1f5e6463e4ae7bc0 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Mon, 29 Jul 2019 23:51:37 +0800 Subject: [PATCH 15/82] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=A4=9A=E7=A8=AE=E5=91=8A=E7=A4=BA=E7=89=8C(=E6=96=B9?= =?UTF-8?q?=E5=90=91=E5=B0=9A=E6=9C=AA=E8=A8=AD=E5=AE=9A=E5=AE=8C=E6=95=B4?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../raspberryjuice/CustomBlockFace.java | 12 + .../raspberryjuice/RemoteSession.java | 2 +- .../mcpi/api/python/modded/mcpi/__init__.py | 0 .../mcpi/api/python/modded/mcpi/block.py | 133 --------- .../mcpi/api/python/modded/mcpi/connection.py | 63 ----- .../mcpi/api/python/modded/mcpi/event.py | 45 --- .../mcpi/api/python/modded/mcpi/minecraft.py | 261 ------------------ .../mcpi/api/python/modded/mcpi/util.py | 18 -- .../mcpi/api/python/modded/mcpi/vec3.py | 114 -------- .../{modded => original}/mcpi/entity.py | 0 .../api/python/original/mcpi/minecraft.py | 4 + 11 files changed, 17 insertions(+), 635 deletions(-) create mode 100644 src/main/java/net/zhuoweizhang/raspberryjuice/CustomBlockFace.java delete mode 100644 src/main/resources/mcpi/api/python/modded/mcpi/__init__.py delete mode 100644 src/main/resources/mcpi/api/python/modded/mcpi/block.py delete mode 100644 src/main/resources/mcpi/api/python/modded/mcpi/connection.py delete mode 100644 src/main/resources/mcpi/api/python/modded/mcpi/event.py delete mode 100644 src/main/resources/mcpi/api/python/modded/mcpi/minecraft.py delete mode 100644 src/main/resources/mcpi/api/python/modded/mcpi/util.py delete mode 100644 src/main/resources/mcpi/api/python/modded/mcpi/vec3.py rename src/main/resources/mcpi/api/python/{modded => original}/mcpi/entity.py (100%) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/CustomBlockFace.java b/src/main/java/net/zhuoweizhang/raspberryjuice/CustomBlockFace.java new file mode 100644 index 00000000..e83e971d --- /dev/null +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/CustomBlockFace.java @@ -0,0 +1,12 @@ +package net.zhuoweizhang.raspberryjuice; + +import org.bukkit.Material; +import org.bukkit.block.BlockFace; + +public class CustomBlockFace { + + //TODO + public static BlockFace getSignValueOf(String str){ + return null; + } +} diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 3370e4ed..a0c0c546 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -485,7 +485,7 @@ protected void handleCommand(String c, String[] args) { // byte blockData = Byte.parseByte(args[4]); // if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { - thisBlock.setType(Material.JUNGLE_SIGN); + thisBlock.setType(Material.valueOf(args[3])); // BlockData data = thisBlock.getBlockData(); // ((Directional) data).setFacingDirection(BlockFace.SOUTH_EAST); diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/__init__.py b/src/main/resources/mcpi/api/python/modded/mcpi/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/block.py b/src/main/resources/mcpi/api/python/modded/mcpi/block.py deleted file mode 100644 index b64bc6c1..00000000 --- a/src/main/resources/mcpi/api/python/modded/mcpi/block.py +++ /dev/null @@ -1,133 +0,0 @@ -class Block: - """Minecraft PI block description. Can be sent to Minecraft.setBlock/s""" - def __init__(self, id, data=0): - self.id = id - self.data = data - - def __cmp__(self, rhs): - return hash(self) - hash(rhs) - - def __eq__(self, rhs): - return self.id == rhs.id and self.data == rhs.data - - def __hash__(self): - return (self.id << 8) + self.data - - def withData(self, data): - return Block(self.id, data) - - def __iter__(self): - """Allows a Block to be sent whenever id [and data] is needed""" - return iter((self.id, self.data)) - - def __repr__(self): - return "Block(%d, %d)"%(self.id, self.data) - -AIR = Block(0) -STONE = Block(1) -GRASS = Block(2) -DIRT = Block(3) -COBBLESTONE = Block(4) -WOOD_PLANKS = Block(5) -SAPLING = Block(6) -BEDROCK = Block(7) -WATER_FLOWING = Block(8) -WATER = WATER_FLOWING -WATER_STATIONARY = Block(9) -LAVA_FLOWING = Block(10) -LAVA = LAVA_FLOWING -LAVA_STATIONARY = Block(11) -SAND = Block(12) -GRAVEL = Block(13) -GOLD_ORE = Block(14) -IRON_ORE = Block(15) -COAL_ORE = Block(16) -WOOD = Block(17) -LEAVES = Block(18) -GLASS = Block(20) -LAPIS_LAZULI_ORE = Block(21) -LAPIS_LAZULI_BLOCK = Block(22) -SANDSTONE = Block(24) -BED = Block(26) -RAIL_POWERED = Block(27) -RAIL_DETECTOR = Block(28) -COBWEB = Block(30) -GRASS_TALL = Block(31) -DEAD_BUSH = Block(32) -WOOL = Block(35) -FLOWER_YELLOW = Block(37) -FLOWER_CYAN = Block(38) -MUSHROOM_BROWN = Block(39) -MUSHROOM_RED = Block(40) -GOLD_BLOCK = Block(41) -IRON_BLOCK = Block(42) -STONE_SLAB_DOUBLE = Block(43) -STONE_SLAB = Block(44) -BRICK_BLOCK = Block(45) -TNT = Block(46) -BOOKSHELF = Block(47) -MOSS_STONE = Block(48) -OBSIDIAN = Block(49) -TORCH = Block(50) -FIRE = Block(51) -STAIRS_WOOD = Block(53) -CHEST = Block(54) -DIAMOND_ORE = Block(56) -DIAMOND_BLOCK = Block(57) -CRAFTING_TABLE = Block(58) -FARMLAND = Block(60) -FURNACE_INACTIVE = Block(61) -FURNACE_ACTIVE = Block(62) -SIGN_STANDING = Block(63) -DOOR_WOOD = Block(64) -LADDER = Block(65) -RAIL = Block(66) -STAIRS_COBBLESTONE = Block(67) -SIGN_WALL = Block(68) -DOOR_IRON = Block(71) -REDSTONE_ORE = Block(73) -TORCH_REDSTONE = Block(76) -SNOW = Block(78) -ICE = Block(79) -SNOW_BLOCK = Block(80) -CACTUS = Block(81) -CLAY = Block(82) -SUGAR_CANE = Block(83) -FENCE = Block(85) -PUMPKIN = Block(86) -NETHERRACK = Block(87) -SOUL_SAND = Block(88) -GLOWSTONE_BLOCK = Block(89) -LIT_PUMPKIN = Block(91) -STAINED_GLASS = Block(95) -BEDROCK_INVISIBLE = Block(95) -TRAPDOOR = Block(96) -STONE_BRICK = Block(98) -GLASS_PANE = Block(102) -MELON = Block(103) -FENCE_GATE = Block(107) -STAIRS_BRICK = Block(108) -STAIRS_STONE_BRICK = Block(109) -MYCELIUM = Block(110) -NETHER_BRICK = Block(112) -FENCE_NETHER_BRICK = Block(113) -STAIRS_NETHER_BRICK = Block(114) -END_STONE = Block(121) -WOODEN_SLAB = Block(126) -STAIRS_SANDSTONE = Block(128) -EMERALD_ORE = Block(129) -RAIL_ACTIVATOR = Block(157) -LEAVES2 = Block(161) -TRAPDOOR_IRON = Block(167) -FENCE_SPRUCE = Block(188) -FENCE_BIRCH = Block(189) -FENCE_JUNGLE = Block(190) -FENCE_DARK_OAK = Block(191) -FENCE_ACACIA = Block(192) -DOOR_SPRUCE = Block(193) -DOOR_BIRCH = Block(194) -DOOR_JUNGLE = Block(195) -DOOR_ACACIA = Block(196) -DOOR_DARK_OAK = Block(197) -GLOWING_OBSIDIAN = Block(246) -NETHER_REACTOR_CORE = Block(247) diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/connection.py b/src/main/resources/mcpi/api/python/modded/mcpi/connection.py deleted file mode 100644 index ab078e88..00000000 --- a/src/main/resources/mcpi/api/python/modded/mcpi/connection.py +++ /dev/null @@ -1,63 +0,0 @@ -import socket -import select -import sys -from .util import flatten_parameters_to_bytestring - -""" @author: Aron Nieminen, Mojang AB""" - -class RequestError(Exception): - pass - -class Connection: - """Connection to a Minecraft Pi game""" - RequestFailed = "Fail" - - def __init__(self, address, port): - self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.socket.connect((address, port)) - self.lastSent = "" - - def drain(self): - """Drains the socket of incoming data""" - while True: - readable, _, _ = select.select([self.socket], [], [], 0.0) - if not readable: - break - data = self.socket.recv(1500) - e = "Drained Data: <%s>\n"%data.strip() - e += "Last Message: <%s>\n"%self.lastSent.strip() - sys.stderr.write(e) - - def send(self, f, *data): - """ - Sends data. Note that a trailing newline '\n' is added here - - The protocol uses CP437 encoding - https://en.wikipedia.org/wiki/Code_page_437 - which is mildly distressing as it can't encode all of Unicode. - """ - - s = b"".join([f, b"(", flatten_parameters_to_bytestring(data), b")", b"\n"]) - - self._send(s) - - def _send(self, s): - """ - The actual socket interaction from self.send, extracted for easier mocking - and testing - """ - self.drain() - self.lastSent = s - - self.socket.sendall(s) - - def receive(self): - """Receives data. Note that the trailing newline '\n' is trimmed""" - s = self.socket.makefile("r").readline().rstrip("\n") - if s == Connection.RequestFailed: - raise RequestError("%s failed"%self.lastSent.strip()) - return s - - def sendReceive(self, *data): - """Sends and receive data""" - self.send(*data) - return self.receive() diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/event.py b/src/main/resources/mcpi/api/python/modded/mcpi/event.py deleted file mode 100644 index ccf023bd..00000000 --- a/src/main/resources/mcpi/api/python/modded/mcpi/event.py +++ /dev/null @@ -1,45 +0,0 @@ -from .vec3 import Vec3 - -class BlockEvent: - """An Event related to blocks (e.g. placed, removed, hit)""" - HIT = 0 - - def __init__(self, type, x, y, z, face, entityId): - self.type = type - self.pos = Vec3(x, y, z) - self.face = face - self.entityId = entityId - - def __repr__(self): - sType = { - BlockEvent.HIT: "BlockEvent.HIT" - }.get(self.type, "???") - - return "BlockEvent(%s, %d, %d, %d, %d, %d)"%( - sType,self.pos.x,self.pos.y,self.pos.z,self.face,self.entityId); - - @staticmethod - def Hit(x, y, z, face, entityId): - return BlockEvent(BlockEvent.HIT, x, y, z, face, entityId) - -class ChatEvent: - """An Event related to chat (e.g. posts)""" - POST = 0 - - def __init__(self, type, entityId, message): - self.type = type - self.entityId = entityId - self.message = message - - def __repr__(self): - sType = { - ChatEvent.POST: "ChatEvent.POST" - }.get(self.type, "???") - - return "ChatEvent(%s, %d, %s)"%( - sType,self.entityId,self.message); - - @staticmethod - def Post(entityId, message): - return ChatEvent(ChatEvent.POST, entityId, message) - diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/modded/mcpi/minecraft.py deleted file mode 100644 index bffb491d..00000000 --- a/src/main/resources/mcpi/api/python/modded/mcpi/minecraft.py +++ /dev/null @@ -1,261 +0,0 @@ -from .connection import Connection -from .vec3 import Vec3 -from .event import BlockEvent, ChatEvent -from .entity import Entity -from .block import Block -import math -from .util import flatten - -""" Minecraft PI low level api v0.1_1 - - Note: many methods have the parameter *arg. This solution makes it - simple to allow different types, and variable number of arguments. - The actual magic is a mix of flatten_parameters() and __iter__. Example: - A Cube class could implement __iter__ to work in Minecraft.setBlocks(c, id). - - (Because of this, it's possible to "erase" arguments. CmdPlayer removes - entityId, by injecting [] that flattens to nothing) - - @author: Aron Nieminen, Mojang AB""" - -""" Updated to include functionality provided by RaspberryJuice: -- getBlocks() -- getDirection() -- getPitch() -- getRotation() -- getPlayerEntityId() -- pollChatPosts() -- setSign() -- spawnEntity()""" - -def intFloor(*args): - return [int(math.floor(x)) for x in flatten(args)] - -class CmdPositioner: - """Methods for setting and getting positions""" - def __init__(self, connection, packagePrefix): - self.conn = connection - self.pkg = packagePrefix - - def getPos(self, id): - """Get entity position (entityId:int) => Vec3""" - s = self.conn.sendReceive(self.pkg + b".getPos", id) - return Vec3(*list(map(float, s.split(",")))) - - def setPos(self, id, *args): - """Set entity position (entityId:int, x,y,z)""" - self.conn.send(self.pkg + b".setPos", id, args) - - def getTilePos(self, id): - """Get entity tile position (entityId:int) => Vec3""" - s = self.conn.sendReceive(self.pkg + b".getTile", id) - return Vec3(*list(map(int, s.split(",")))) - - def setTilePos(self, id, *args): - """Set entity tile position (entityId:int) => Vec3""" - self.conn.send(self.pkg + b".setTile", id, intFloor(*args)) - - def setDirection(self, id, *args): - """Set entity direction (entityId:int, x,y,z)""" - self.conn.send(self.pkg + b".setDirection", id, args) - - def getDirection(self, id): - """Get entity direction (entityId:int) => Vec3""" - s = self.conn.sendReceive(self.pkg + b".getDirection", id) - return Vec3(*map(float, s.split(","))) - - def setRotation(self, id, yaw): - """Set entity rotation (entityId:int, yaw)""" - self.conn.send(self.pkg + b".setRotation", id, yaw) - - def getRotation(self, id): - """get entity rotation (entityId:int) => float""" - return float(self.conn.sendReceive(self.pkg + b".getRotation", id)) - - def setPitch(self, id, pitch): - """Set entity pitch (entityId:int, pitch)""" - self.conn.send(self.pkg + b".setPitch", id, pitch) - - def getPitch(self, id): - """get entity pitch (entityId:int) => float""" - return float(self.conn.sendReceive(self.pkg + b".getPitch", id)) - - def setting(self, setting, status): - """Set a player setting (setting, status). keys: autojump""" - self.conn.send(self.pkg + b".setting", setting, 1 if bool(status) else 0) - -class CmdEntity(CmdPositioner): - """Methods for entities""" - def __init__(self, connection): - CmdPositioner.__init__(self, connection, b"entity") - - def getName(self, id): - """Get the list name of the player with entity id => [name:str] - - Also can be used to find name of entity if entity is not a player.""" - return self.conn.sendReceive(b"entity.getName", id) - - -class CmdPlayer(CmdPositioner): - """Methods for the host (Raspberry Pi) player""" - def __init__(self, connection): - CmdPositioner.__init__(self, connection, b"player") - self.conn = connection - - def getPos(self): - return CmdPositioner.getPos(self, []) - def setPos(self, *args): - return CmdPositioner.setPos(self, [], args) - def getTilePos(self): - return CmdPositioner.getTilePos(self, []) - def setTilePos(self, *args): - return CmdPositioner.setTilePos(self, [], args) - def setDirection(self, *args): - return CmdPositioner.setDirection(self, [], args) - def getDirection(self): - return CmdPositioner.getDirection(self, []) - def setRotation(self, yaw): - return CmdPositioner.setRotation(self, [], yaw) - def getRotation(self): - return CmdPositioner.getRotation(self, []) - def setPitch(self, pitch): - return CmdPositioner.setPitch(self, [], pitch) - def getPitch(self): - return CmdPositioner.getPitch(self, []) - -class CmdCamera: - def __init__(self, connection): - self.conn = connection - - def setNormal(self, *args): - """Set camera mode to normal Minecraft view ([entityId])""" - self.conn.send(b"camera.mode.setNormal", args) - - def setFixed(self): - """Set camera mode to fixed view""" - self.conn.send(b"camera.mode.setFixed") - - def setFollow(self, *args): - """Set camera mode to follow an entity ([entityId])""" - self.conn.send(b"camera.mode.setFollow", args) - - def setPos(self, *args): - """Set camera entity position (x,y,z)""" - self.conn.send(b"camera.setPos", args) - - -class CmdEvents: - """Events""" - def __init__(self, connection): - self.conn = connection - - def clearAll(self): - """Clear all old events""" - self.conn.send(b"events.clear") - - def pollBlockHits(self): - """Only triggered by sword => [BlockEvent]""" - s = self.conn.sendReceive(b"events.block.hits") - events = [e for e in s.split("|") if e] - return [BlockEvent.Hit(*list(map(int, e.split(",")))) for e in events] - - def pollChatPosts(self): - """Triggered by posts to chat => [ChatEvent]""" - s = self.conn.sendReceive(b"events.chat.posts") - events = [e for e in s.split("|") if e] - return [ChatEvent.Post(int(e[:e.find(",")]), e[e.find(",") + 1:]) for e in events] - -class Minecraft: - """The main class to interact with a running instance of Minecraft Pi.""" - def __init__(self, connection): - self.conn = connection - - self.camera = CmdCamera(connection) - self.entity = CmdEntity(connection) - self.player = CmdPlayer(connection) - self.events = CmdEvents(connection) - - def getBlock(self, *args): - """Get block (x,y,z) => id:int""" - return int(self.conn.sendReceive(b"world.getBlock", intFloor(args))) - - def getBlockWithData(self, *args): - """Get block with data (x,y,z) => Block""" - ans = self.conn.sendReceive(b"world.getBlockWithData", intFloor(args)) - return Block(*list(map(int, ans.split(",")))) - - def getBlocks(self, *args): - """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" - s = self.conn.sendReceive(b"world.getBlocks", intFloor(args)) - return map(int, s.split(",")) - - def setBlock(self, *args): - """Set block (x,y,z,id,[data])""" - self.conn.send(b"world.setBlock", intFloor(args)) - - def setBlocks(self, *args): - """Set a cuboid of blocks (x0,y0,z0,x1,y1,z1,id,[data])""" - self.conn.send(b"world.setBlocks", intFloor(args)) - - def setSign(self, *args): - """Set a sign (x,y,z,id,data,[line1,line2,line3,line4]) - - Wall signs (id=68) require data for facing direction 2=north, 3=south, 4=west, 5=east - Standing signs (id=63) require data for facing rotation (0-15) 0=south, 4=west, 8=north, 12=east - @author: Tim Cummings https://www.triptera.com.au/wordpress/""" - lines = [] - flatargs = [] - for arg in flatten(args): - flatargs.append(arg) - for flatarg in flatargs[5:]: - lines.append(flatarg.replace(",",";").replace(")","]").replace("(","[")) - self.conn.send(b"world.setSign",intFloor(flatargs[0:5]) + lines) - - def spawnEntity(self, *args): - """Spawn entity (x,y,z,id,[data])""" - return int(self.conn.sendReceive(b"world.spawnEntity", intFloor(args))) - - def getHeight(self, *args): - """Get the height of the world (x,z) => int""" - return int(self.conn.sendReceive(b"world.getHeight", intFloor(args))) - - def getPlayerEntityIds(self): - """Get the entity ids of the connected players => [id:int]""" - ids = self.conn.sendReceive(b"world.getPlayerIds") - return list(map(int, ids.split("|"))) - - def getPlayerEntityId(self, name): - """Get the entity id of the named player => [id:int]""" - return int(self.conn.sendReceive(b"world.getPlayerId", name)) - - def saveCheckpoint(self): - """Save a checkpoint that can be used for restoring the world""" - self.conn.send(b"world.checkpoint.save") - - def restoreCheckpoint(self): - """Restore the world state to the checkpoint""" - self.conn.send(b"world.checkpoint.restore") - - def postToChat(self, msg): - """Post a message to the game chat""" - self.conn.send(b"chat.post", msg) - - def setting(self, setting, status): - """Set a world setting (setting, status). keys: world_immutable, nametags_visible""" - self.conn.send(b"world.setting", setting, 1 if bool(status) else 0) - - def getEntityTypes(self): - """Return a list of Entity objects representing all the entity types in Minecraft""" - s = self.conn.sendReceive(b"world.getEntityTypes") - types = [t for t in s.split("|") if t] - return [Entity(int(e[:e.find(",")]), e[e.find(",") + 1:]) for e in types] - - - @staticmethod - def create(address = "localhost", port = 4711): - return Minecraft(Connection(address, port)) - - -if __name__ == "__main__": - mc = Minecraft.create() - mc.postToChat("Hello, Minecraft!") diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/util.py b/src/main/resources/mcpi/api/python/modded/mcpi/util.py deleted file mode 100644 index 9791072e..00000000 --- a/src/main/resources/mcpi/api/python/modded/mcpi/util.py +++ /dev/null @@ -1,18 +0,0 @@ -import collections - -def flatten(l): - for e in l: - if isinstance(e, collections.Iterable) and not isinstance(e, str): - for ee in flatten(e): yield ee - else: yield e - -def flatten_parameters_to_bytestring(l): - return b",".join(map(_misc_to_bytes, flatten(l))) - -def _misc_to_bytes(m): - """ - Convert an arbitrary object into a string encoded as a CP437 series of bytes. - - See `Connection.send` for more details. - """ - return str(m).encode("cp437") diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/vec3.py b/src/main/resources/mcpi/api/python/modded/mcpi/vec3.py deleted file mode 100644 index f0cd42ab..00000000 --- a/src/main/resources/mcpi/api/python/modded/mcpi/vec3.py +++ /dev/null @@ -1,114 +0,0 @@ -class Vec3: - def __init__(self, x=0, y=0, z=0): - self.x = x - self.y = y - self.z = z - - def __add__(self, rhs): - c = self.clone() - c += rhs - return c - - def __iadd__(self, rhs): - self.x += rhs.x - self.y += rhs.y - self.z += rhs.z - return self - - def length(self): - return self.lengthSqr() ** .5 - - def lengthSqr(self): - return self.x * self.x + self.y * self.y + self.z * self.z - - def __mul__(self, k): - c = self.clone() - c *= k - return c - - def __imul__(self, k): - self.x *= k - self.y *= k - self.z *= k - return self - - def clone(self): - return Vec3(self.x, self.y, self.z) - - def __neg__(self): - return Vec3(-self.x, -self.y, -self.z) - - def __sub__(self, rhs): - return self.__add__(-rhs) - - def __isub__(self, rhs): - return self.__iadd__(-rhs) - - def __repr__(self): - return "Vec3(%s,%s,%s)"%(self.x,self.y,self.z) - - def __iter__(self): - return iter((self.x, self.y, self.z)) - - def _map(self, func): - self.x = func(self.x) - self.y = func(self.y) - self.z = func(self.z) - - def __cmp__(self, rhs): - dx = self.x - rhs.x - if dx != 0: return dx - dy = self.y - rhs.y - if dy != 0: return dy - dz = self.z - rhs.z - if dz != 0: return dz - return 0 - - def __eq__(self, rhs): - if self.x == rhs.x and self.y == rhs.y and self.z == rhs.z: - return True - - return False - - def iround(self): self._map(lambda v:int(v+0.5)) - def ifloor(self): self._map(int) - - def rotateLeft(self): self.x, self.z = self.z, -self.x - def rotateRight(self): self.x, self.z = -self.z, self.x - -def testVec3(): - # Note: It's not testing everything - - # 1.1 Test initialization - it = Vec3(1, -2, 3) - assert it.x == 1 - assert it.y == -2 - assert it.z == 3 - - assert it.x != -1 - assert it.y != +2 - assert it.z != -3 - - # 2.1 Test cloning and equality - clone = it.clone() - assert it == clone - it.x += 1 - assert it != clone - - # 3.1 Arithmetic - a = Vec3(10, -3, 4) - b = Vec3(-7, 1, 2) - c = a + b - assert c - a == b - assert c - b == a - assert a + a == a * 2 - - assert a - a == Vec3(0,0,0) - assert a + (-a) == Vec3(0,0,0) - - # Test repr - e = eval(repr(it)) - assert e == it - -if __name__ == "__main__": - testVec3() diff --git a/src/main/resources/mcpi/api/python/modded/mcpi/entity.py b/src/main/resources/mcpi/api/python/original/mcpi/entity.py similarity index 100% rename from src/main/resources/mcpi/api/python/modded/mcpi/entity.py rename to src/main/resources/mcpi/api/python/original/mcpi/entity.py diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py index 50e81b4f..b3dc2bae 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py @@ -211,7 +211,11 @@ def postToChat(self, *msg): """Post a message to the game chat""" self.conn.send(b"chat.post", msg) + # TODO:修改成一個py檔處理Sign def setSign(self, x:int, y:int, z:int, signType:str, signDir, line1="",line2="",line3="",line4=""): + minecraftSigns = ["SPRUCE_SIGN","ACACIA_SIGN","BIRCH_SIGN","DARK_OAK_SIGN","JUNGLE_SIGN","OAK_SIGN"] + signType = signType.upper() + if signType not in minecraftSigns: raise Exception("告示牌名稱打錯") self.conn.send(b"world.setSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) def spawnEntity(self, x:int, y:int, z:int, entityID:int): From 4e7cbbb905d496e1101741623ad80d9be9b5fec9 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Mon, 29 Jul 2019 23:52:58 +0800 Subject: [PATCH 16/82] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=A4=9A=E7=A8=AE=E5=91=8A=E7=A4=BA=E7=89=8C(=E6=96=B9?= =?UTF-8?q?=E5=90=91=E5=B0=9A=E6=9C=AA=E8=A8=AD=E5=AE=9A=E5=AE=8C=E6=95=B4?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- out/artifacts/main_jar/main.jar | Bin 0 -> 24826 bytes out/production/main/META-INF/main.kotlin_module | Bin 0 -> 16 bytes out/production/main/config.yml | 8 ++++++++ .../raspberryjuice/CustomBlockFace.class | Bin 0 -> 487 bytes .../raspberryjuice/HitClickType.class | Bin 0 -> 1126 bytes .../raspberryjuice/LocationType.class | Bin 0 -> 1086 bytes .../raspberryjuice/RaspberryJuicePlugin$1.class | Bin 0 -> 863 bytes .../RaspberryJuicePlugin$TickHandler.class | Bin 0 -> 1745 bytes .../raspberryjuice/RaspberryJuicePlugin.class | Bin 0 -> 9481 bytes .../raspberryjuice/RemoteSession$1.class | Bin 0 -> 1258 bytes .../RemoteSession$InputThread.class | Bin 0 -> 2236 bytes .../RemoteSession$OutputThread.class | Bin 0 -> 2243 bytes .../raspberryjuice/RemoteSession.class | Bin 0 -> 23387 bytes .../raspberryjuice/ServerListenerThread.class | Bin 0 -> 1948 bytes out/production/main/plugin.yml | 8 ++++++++ 15 files changed, 16 insertions(+) create mode 100644 out/artifacts/main_jar/main.jar create mode 100644 out/production/main/META-INF/main.kotlin_module create mode 100644 out/production/main/config.yml create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/HitClickType.class create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/LocationType.class create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$TickHandler.class create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$InputThread.class create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession.class create mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class create mode 100644 out/production/main/plugin.yml diff --git a/out/artifacts/main_jar/main.jar b/out/artifacts/main_jar/main.jar new file mode 100644 index 0000000000000000000000000000000000000000..b13315f01dbc5e2656fedaba2f9d33dbb3bb4534 GIT binary patch literal 24826 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 Nv!YvgNH!lH{Q*>=0rmg@ literal 0 HcmV?d00001 diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/LocationType.class b/out/production/main/net/zhuoweizhang/raspberryjuice/LocationType.class new file mode 100644 index 0000000000000000000000000000000000000000..e6f38600b04a35275e5ff2e74c3f0418271e6ccd GIT binary patch literal 1086 zcmb7C?{Csj6g`g?TDoowRCG9++7haS1dfz?woO|!PzkYxF319~=(h#w!;0c~e$VzyoKt+*nB^k>K zIZGT-mXYD-mV|8vxw+SA>xbPILq&J3Ksy_T-bc$m8yfCF^Nq=I-}3#_QD~c%rhBFl z*q+-xJ+^8T`?jSwy9Ygrl{R}#{jk+x(B3UdlR7b+(3&t*i=~Bw#eMI+#gNf$*Lo9< zDcP>kcj!inSlb^M_KNz*I59MbSJVl7+a1(Oizb=lwL3k-w>kY>Lv)QXN#*|KXGqm; z*A8|W^8b-PDD@b`U}#g->5e^cjUe=iNhorMTsNJ0a3eH?bvAlQbm6VPb`lj{D z=3U9gpRmH)qGFW~OIF2mR2a4wnE@4fXe#bvUBxn1RAjKiuyWOHo-#wybUc^DZx&0j za@zfoWd@Ys%XowK9b+=7#bAFQ>^f_$QKcDHY4C-{8W#uXBz<7Dz)K>Jh%|Dz0a7OG z5uJP~Q?M^cTtfIn7Q-#tQ;|<1d>*&w_#GsoTO}u!zan`Fk>eBB@OS7&ouROXLgc4z z5Q-~SAbCDknsQ;^F&@#A$(Q7Lp;h!!Ug1Wq$5KS pBV#G~gIvOtX6ZgtwW(p6f9lV&we*o)x{rdm_ literal 0 HcmV?d00001 diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class b/out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class new file mode 100644 index 0000000000000000000000000000000000000000..9942e3868b7581923c75ef7570dbe2b439f1983f GIT binary patch literal 863 zcmbVK&2G~`5dJoC>?F7}lmcn_E7Xt#s#-;b9zYz35|WZMsENv<7dFl+*>tfZ$8Oa= z0I$LskPt$s55PkqW-XvpLPACI&dfJE-_CeuzJ3343}78Ad0as;hb$IyWG!lV)xtFm zu4{3_!c7ae7&e^lfsDLSn@=2HM9$GD4i1Do8gYNK5z62OSFVJT1r+Z>ZxdpJT_)XpC|MdX|jNg&tS)2 z^B9aqLU|jmNW|4AA5Y<(%>K-OhQ7`K@oC@8EsvS2LEUuRARlzx6u4jEQ|+BY8ICk}_o@16>tva>-Yw8u zsT+aVbiUx`XuYH`p&0tb}VsNGUt>1f1s&?;}l!sUox?M zD~iv@=&9tOKoy%zQJhVYC}C^X@_Z7n=1+l(wVoMg(<$xnrX8?d1PPC&U<7=#8oJju+I^JCJxCOaJ)by5{eZZ zpdo0ABt+|iajMYf5*Jv zGwui8;3Hb`3GMjIDgG6`_=Y}w4{~Z^+$J2sahwS5kSS&tM;a%&B5;bnROUO#X=-PP z)FQl%xQ^y+wCFhd10gM;&{nRinhemJx=|$6{tTjgJydK}p`CgtEy?PN0Bb{v9yI2x WD%pVseru`4`J+0*ZwqZCs(u6TW75q4 literal 0 HcmV?d00001 diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class b/out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class new file mode 100644 index 0000000000000000000000000000000000000000..989d3657fc14a7668c5dea26242ac1b3d1159675 GIT binary patch literal 9481 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 literal 0 HcmV?d00001 diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class b/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class new file mode 100644 index 0000000000000000000000000000000000000000..ddcb17fb336f916c79690eae104bd611f296d7b4 GIT binary patch literal 1258 zcmb7DYfsZq7=F$!belygUO+@aDOZ6CBA_5TMv26+5jw^PzSwmqtgN)8>p;-&CdU8a zXE7nf7=D01%J`n54iYaRX`kmjr|<2Y_wBduUrqo_Ku@6?cau5)t zYX@@-(SgAtLoDN!X}=|FyF6FlrYr@s#pT^HQU`>=0U|POL!<@LdGLZ%D9HBGNv#s<1wBv zbO;yCp+jpq&!}6KMVmWi-S<6T#*8qV74THRoPcMTmhfBzOUq~#!RC>Xv49MNMi;4_ zy-4l+MQZ1&RmT|QCD-MC#xZL(USm)i)#OWC+zJ>*E) zB2m}C;70cEmNV3+h5UMsq4VEXlINFg*L1?}(pW^+Rv6;B{A%F^v5{XB99!3o0+F5; zH2l8N6sT;)xz17R!G`>}4pMNX8pdBH7fC36fGnCP^k5GDT83 zwLZqBFo%2ydYX@L`Bx5-EhJBKe4+}IRBapLXh#qFi2E^4Qya%5(loAd=vaY4T)-<> z#M^j{H^gu84)2MhLOgJNsw&DiyUtBSs?5vm%sF$;eDj^l>}UUc z{0V>|lnk_Eu#v-%fet*~h{Jfsz_U1#z;gzMaa2j3H#i(Ka2zkF*$D$9$mtk0up1{6 z7&CARFRI13+H*RAmy~H<$ApeEI?if{2lGxj-KQa&cV&=Wov(Py(pjCi++x#oNUEipw#h zu<5Q`R=5m{kq+w>1B8}~KBRas@gVk_*oRIvOY4|4F@IVw=8AdHlbS4~{NMH8>#brWykO&xEUcpG#$3tLCQgv6YN)=jcE zI5km(rJ*_JG1#_ZIpxc;3`nhsdCZw`kT$V^w1&X zT-0!+t{mT*Aw;kV?(FOWp)fl(MUxfRjq-QPz9?f@TlF2w==IiR!CG7@Rf-N1`0)M1 zzFyU*RaKu0?U>X<_dRh3I}MFR8RWfUQTiGVWV)iNs02IG#$z~#b0_+F@ z{zs!Bq54hK5Zc!7xVFCgc|MrV$-Icah;3y8~VDb?<3y2BX#+agI^mCq}Dych7BTJ4Y-P?WmohqIrlMs3^vf cMPC@Tey#)t@F>46oVD|pBgOAiT%$ShFYIh$C;$Ke literal 0 HcmV?d00001 diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class b/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class new file mode 100644 index 0000000000000000000000000000000000000000..b76823414ef1dae5fb69766040693dbe4675af1c GIT binary patch literal 2243 zcmbVO-BTM?6#w15BpcRklk!b%YpRGLu>>kbEw$S6QNd6uAQhDAvbiKnm)&$f1Ul21 z_CN4JAAItW=g!a+eQs$xts;~FM#Ly`|Anba_ak0dFm znAXsOn^HWJz%A+IV->S1=2Xlx#DlWs_Y5%P3yui#_sgNXA*}ml!ztxG!>_Ce&)ZrH zEmP!Y#kw1aIpO=3>x_`;70a=Ls|*)24chiCFf@(2MZu6PSdO?EuG2a5#)?gnmV#>< z_JZMAlCKM!BuoZS1rtCzao>uV*gV|`98obWn zh(xYzQZkjzL59JG?HRN=H}p&~VMUoZlJR~S3LR%~R>x_)ELXiM7IfUkrz#e8Ea5YT zP6~h*P@vLol&W+P;Skl76nvT2j zG+W0ydUZH(8Cnm_o~J-ZMeg52FT?2xgRW6b2X5N5U0+B<>6LJGRd_l)++n!fP{|*u zmm{cWR@Q_WP`Ml+nhhPNR?qpy4xz+dXvl&Zv0{fMi)wfH#Tnmk=_%RLw<0?#>7f^% zc#IuGb4dgRw^R}y!IYiyCi<3e+%7nm|26161ZW8ttgV5U+Wju{9>{g@WL<9l$$~6SRtJ+qAoXw`dU5 zvQ0+&ST0E{lm8Qo<>s$PH7Sa>Ju46%Iqrzi{AY(DwjosrS7uU%Cbnvae)&i#?vKXU zmL+T&kul#Eq9QG(q(!nqLoA4f)Vyby^LFy^0R0`0 zek)1?`Ryou#(xuFf4BG_Q5wcC*!)j<{+|qdM{57F`QP$#M8G158DR`YGOK;|!usYU8oTODVs#kN`^d|GO&WkU6GTdlCv@lm=!trQ$j z5NIdL>q$~OS!$=)>QqauiqhBBDN>|twOTqG1ojEGY7~~FrC1})Yo&Ret(t6gT2!r9 z&C;_$iWVs{wrZ7Or`swk&o*1N%diehZItJxDBZ3$%g8OZIzygkqJ`hJ)mc&XC3UtG z=SXp`^qps`FNYpGm&jJ<%llSaU0|yVZFP}IIz$Z!&XMC1(Q^a+(u;N=%Tw|$gBkDSJeT<$}H%QBkQru*zn`88Xx0KK5`=r=MQn7QwO71^eCJ-}{i@#%`YV44MI zw+#Ry0N@X>np%$QNOyqBe(unY_NL}B)3e#smYM0(JJK?INz>YvRC`AjgQ|)Sni5!L zNqe@bW$h7DG11049&jt$(b9r;CO(0wq&3~rh_}V*4VjIpX7Ho6xkEFo_JFKj>~sDY z;ry|B9@dICwSf3kL;I|a=@x(0S^L2@Ae6KWAJf{L+LF$WIaWXB1|exedN!;}wI7>l zYfm?N^vpg;$kW@lv^2Qj>j6t6sX@m#q&C-QHf%_>G`1a^&Ms|gSPve}1xp&5Gi_<8 zW=X2OJ=L%--RMqd>K{}pVBgff#lswYFsC%NG__A9#i58jz39+T4(C z6~k+@)Q_>O&;o_86datk_Egr>TR@MjO}8)d%&fF>RFEgWH3DL!EkCNPvgjazEx=s+ zW9kE7`x<2#Y@q|{CVEn!AWUNm;2uz+WWBH+#Z(i-=zues`f4mhgIsOYdc-tt{}>ci zJV9afewQvf1;S|8x>?ei%``w_>Bjm@M+>B5ZNOVf(k z4n!*uGhAq6b6S)MF0#_)c5s&97i!ks(GBVLb(zM6sSOw#N@dqV^nFg;cM2AAp?b!| zR9OUYk%_XF0e>$mW*Wx1kMU56)p%X+ZUCXiRC@|$IRpP%F?@AnmZ^LnBxZCpHM=g_ zYSoGYT!UVf`W-{n0X34X(L1REnoX!HDx8Vkt+hL8Cxc`6?(`{pB2*Lt+ zHJH)Rk*T)h^&>Ltk5)+8frv zySVNKjZI)w8}qm{$eQVrOXM zYt6KYDc}K92yJL;IbI&A&HB;QveJFikERyv=+cLW_)#q)NPFr*py7GkpbzjZaHclB zSVt>VCG9EGkp-Y#Asq~P$s+UT&Yc?&a*!FL3r4RNEAwn^KNEU^3-yKeH?VMrDik|( z)Abkd2(77XTY7Q288X}GlIzQgX+aT>wl50%w(M_n3~g>}hdqS0xQ{dRBT;}sesP}3 zwCKM?VD{|&p-`&X>94Xh<5SKws(|bMh$D(>O1#;RzXJezXhQsnU~T10{a;ZCmK(7{ zy}cS#+p9sX#}we=>YEQN;4S>M;28Q>LZ9$o(Zz~^^M@A)7ivSm+-stBltj$yJLtq5uJ4h=^usKa`_&zm?HwPoPndub8PPBo;L zW)^1jHZY`s9|4PyQAdnI^cq@&8q>g_Rdyc-2cBw>P-6J_v16I$eu03sAYSx%TkMFW zHUpp!{V;)k^nVF`-{X)Ec7lNQUnc&KD9D}RqDwLz*@pD&CLLwVK`9p~j~1Wpu){qZ zPH^1e-cm$4=J0SHjUZ9`^lped+>c8gE|X$_j2|S$5Uz0e5NR9A!yL9b;&3_lx75!a z^^*F9!yyhkT*IR+^|GU0QLj4cms0#n{TdseUS}WnBQo+k^r0HAG@aVuo?adG8}(bD zsa})f^&&7_2Ec%P816aU1>$x(YL9wD=KoHL-#a{pM?2~d>W_#;^sK-(;)P^j$|9UO z(~T7k8KePp3|7&eanzsGpB?oV^`_MR3PS>*x76E~`kSNvE*`H}9-x0>o_wHWK!LD^ z2NDZ{?mwjXr^6-O(^3B?;;K71crHI&WE}1VFl@5rsCU%A9QAMYuBF~{)PL0bh;xeg z5=VWYK17h=sE^dgmioj|pQ_J5W?-mxZ-V7s#~?-&Ff`ADxd>p_rkbZ`*LG~c9+vYQ z5ahC!^(~oAEfu~iu8^n>+BKYKItCl6fR_*_j{gqV3y;H#5SCRy0)~ObAR+fOT(JpR zj|zR@X{@NJXiOsuBC{$SBP8VYfB-96(wo~WW7tN-F`_b#s~sa| zI1Ucg$2dk0qXb9lO%m6Q_JbA2=n3ZW&3ubv^fG!QzH*GX(Z@3SIz~dh?eK#Fx@X~} zHiy5-SA+1v<`qrt>m+1xjDG5U$0#+*a?9Z;Is@EUZyDu|(cc*0@HKpG4zAw|xR>zP z;Lme#-QaL;W1D3Rbc{j9V1$H@F~q1qT<92w7(*RnnDDnOAjE1;-d+jI<2!aFkIcWPcY)9C!JO6LA7RxuPZ0Ua;q82v zV@xz^9sWK)>KK#w#ytESN`POzKlsHC(2jAq&{X0Edcw1%aP1D?Akh6*=zwlDCL48* zaRdq|<(-Z(#W)h?lbALZDz7t-<8;Qo5O>OAzt8JzNP7PgE9j|ei;X4uu>j+bg|*}X94lv1$5<+3{br2S z%{j9|!<=-}+I7$&9_tv(jOC88LaZU6y~1-Sx~r(7r+%L&4{$24shaWryURIH?DYqk zmTwL60c7RJ=E?FK3u(=d^oa`K;hxBQxJHbH#j&Z87$}v*LYR70W8WC#lGtq^gHr6=CT4QL=eYCZvHnq&sHf|XZN0V`y zW2`seU;5_!i`y;d@HWTTU;xdGc&%3Bbg-kMsZG0;wvN`;OcwDd%(+i~%L(i;gJ)&4 za44AuBsZ{?>wJ%F2;Pq27+LJ!Mw|HEb`)^0*NH>#klOW*u@SD^*u*zF{B3@~F*ZYK zjV)4~A?o{W{*J@9V+%m-ektye9qCNRILr7FJXao}Vv#cs|tm_#8u20vNtjf2&@_C@KQoUP7IzX zTx%#y^8{1}K~iRuo2Q;|K#ml-R)76K2hH=+>DKAZIQwIsjLN3gtZ8b{*H$uau8b=IR)NqOVXvRE z76HmdmK!c(ZREW5>fJg7N}qg}ceNy~LUAzU77+P^R>2z)hgFSFo+^qhkei0`Q&Rqtl`Dr&?sz;jg48HGUZV2 zP0P!|>%(#dtN3T@z=7EfS@Wyd?HRWTCgH;k96W^g`y&p5Y-(APVQM(oL+Jrkukh?K zPG<*7gZx{JdpI!(-4kw;D-|SvQ;p*CgX4S-Ap0?C_>xVs*&v5M9Gn{-ya*j$co8~0 zsQS3cJQ1mY>I0cx;T&XLa5X5Gg1Gjq9GYAA&&0=cY^3KAZq>+zh9h!R#o8YQH@lD-@=+eEuL~7l07(=s?oK zbT@n7?FMfFa=o}xY{r=2Db{ZW&s+3`P#6H_LUjd@n<$3TAl!B3t<7=97P(4@=wzT< zFVJ(J6POg-?PlmJdsp0xTI4F~SpP;R=MS}l<@Z3~YRd(@yY=-eP(y!96q?ti+7{x} zs`VSz6_O(?ZhJt1yEh6wPGh<`-JY&rm&yuf#o@~lD|ZEql(g39pu;KPv$r$4NMqIB z`QZ}3X#Z>B>b)Z^ng%TjDv>ur2-0lByK9I3<~>Np2c%lC56f!6*Iiny&Aq!55xKQq ztFxI@V?(Mfc)KNMId}J|Z^m&x-ROk_;HE!rh%KfDi_Q zE*tNjgyN9R931e{ZLaWFioxvfs^8mBw3dLixMRpK?0bTsy7>-A>=sM9zN!#-Ziwc$ zuY#^K8dgjN^#M#{AcFw8e{ubGwYb-kMa!1XIn^y^O<%GUx&%z}C&vTi;yoqEt;aOH zNb9JZtg830%AMrM zh#pnElS-IVIGs$BDMfW$iP;q{);x-<@CN+l4hI=isR`c|Cs7Z9 z)@uC2ZH`Cpqh#t)o2wq8o}o_a>pc_l?A5E2`hl|2l@C+dN@?k&@-FJ%MFVzH2pt2_ zG05u}+(kpWsA4BEs5=CMF?s02Gz<(J9zV2`M!54wc2Z@06kabUs2lm@5@$sG`A6DgifmL4?;I93D4nw3@DMWefD z%uX5$JjQm?IInBG?mA3&O+eQKbmfuiN20<?Nm^CnLvh5uo+Xw1YsDpB3K1PCqF5c;{JauPSS zonc{~z!Qrg(z81vD~cjg%agpxGdx71pdt#ztzFR_nUg3&CkK#;=8%c<;XGNmz;%2? z5qPnp@KS)cdcW|dXn05ZLgpJODoT$JQo-eC=<5&CB-G-abol6dz(1G<7>|D<32_io zp9ZN<7KMd!*6k*^cVjnAQS>++SyEEcMN`4@?KGpR=!o5P6q6os$ip-ZYUS$obXT{r za3yrQi)K7#Ou>AkljZZLDMM{A ziYus{uB4508;of?ZKiM27J87*pqJ@P`U9SSrnBg;bS`~F=fR1euO*=!3k2ypmMduk zPvr{m^kz!&Q9KQ*JsoTICae0;ib0=1)Su8Yi)SR@e{r+tiT)gTo)Cs5lSVQ=zmpbp z(!vEvw;EanU04)qL{t3OPC9O3Rdr1#Ezav&Tu;4-9QrC;;w4l?U(=XXxgc{om*iQ% z2k|Nm!S`yw45KYRn&&`ELUQxxBGc~{Xc;yj=R#Ksbqn#F*hx$3Ldp2jPFi*?RaI3R zuQtb5TjQ&3J>9IT zDi4>NU38MnioKtVpR8vs=swF+sP2oMB6$19A9TuKiUg0dQ|ty0jae$UFBB7?xM!+ zvBAlBTElDi2&oJ2qBV79xw)J0(f3WXL}~~n>a22WH#IR`OCzOr8pHn9*V*8by_=9m z0ck7B!|@HEdBygoDnQY-b`k zfZRoGoz%XaYFwe`Os@lL=m{g@8+}tt`f%qb zbC9;v*z)ibwEkKuD-R2iW|c7EETQp)?bJtbEYUdPf~%4y>{<8NXbwG5`U{6|ip2|8EHYLDLD_?PbaMm3qK5XhvNaj-bwj zE2y*dcw3Ydqw6B&z5$d+I_WAYzS&7v@1}1F&+VSc_%#|zske-XL$A`l-TGHDey#4D ze}E+-Dxkz`A{-`j~+5XBe7!_-3u{_FtxK0;lRbnQulSzcgjt1GFm9+8Oiwldgd4x zcupqYJlrfbV^`lm(NZ)1z-fn@Ri$9}z2Y;>S;_c=UwFCi2A7K^;|~?52(S@F~goBO3OZqVZwTcoRDT)V^RT=>OA{6eGYw`!|B`ixC_Y0-@KE@khT9 zaay4d4)%G;_+$Sg;$RE^1#y&&KduqDqL7_>n_3Qz7qK94-)n`__4)0ZQO<(I73a(- zEdIbnZlo*|IDr)v{dNQX{|SxO@kP)o)t*u7lW%(m#dQPv|D=ZAR0R5HO|&*%(L4gJb)!Cx-O6knyz4^kB~wm`UctbO`NN)!P)g%8b#M3Epj8W z4>!?DoW0i3EjY_!xocN9OFyBFs@LlwMWUC(KC+Km0hJL^=(GPhKJ2>Pq^xx*5L)-bSyhdufk) z7S9*ycWMv)UcE_wQt#5A)yMP~BTR1@CG@sYN`E&-(m#yR^iN|F{hv`!?-=vwU&c!M zw~?ZEjnnBp<4pRGaXx)uTu2`pm(eH2_4KK6JMA?d!U6sV%*J!9j91w(e#ar>Z)_Rw zaWupn!;fd2P(SV&8p^#wQTVD{ui<{&=S9KlP>@x0VLl9!qFyxg46E6nA5yt#@`G@JP(Gs`EN z=kqG_GESKfaijTtUSmGTYt5hWI`a>Fnq~2Ns|RPSa&EOMIcrVgHfsuZShIMemEuiS zBX738!dt9M`AgPye2#TDpJ(02U$!3St=1p;0_!dQs`Vef*bej8?7sYUyPPkxhw|n2 zRKCKV&fl=pe5Jjfzh!UYYwQd8TKf{d&c2$jw{PVe>>Yfgy_0XUf5tc4zu{Z#*ZJ0n z;yWTGygf3A?}`lNyCb!HPvivN5n09eN1FM8$eH|Lh?J!;ePZ;>RNYOclp=RkNEYN$$Mf6ej`@FZ^ml)o!Dgl zSFE1@9h=YZ#g_5=v6K0OSfk?DMx|mG;CYD(#jaF#>}C~--KV0lC-D~ROm zKdD|0soqX66?X=xJ`Vm6gELwsoLaO`QDx37HNcsp20Cdq$XTxrbz0OAC!-E=&QwF4 zbJQ^B0yRSN8pbQM8up&xc}SawVeJEWzOJn!hZmq`!r~A2dVh~zJr34B(H#eyAK{LJ z)!abDX4 zNaP;QQ^*Wi)RRvJF5%EfV1J504pq}wJ{2`HG>($IO0W-2qC@pKJ2VY{i9_g(gj#@~ zJNIIm?#;c7rg(F&qDkJ|>u8)ecNDTfSo!OQEq~o`4}aZoKY!iuTx5Sw z;S`0#OTnvCQ8UA*0?I1XtZ5B@MlE?do%nR z_0{7n(?GAL$n1$fLb940$uy5dTUutA_5KWVer`tAhipCv9;^`=S+jght-;jl^2HiP z>s`KBm9)m?i#3T>=oz+kw?Ee&nw$HvKNmT9Z>}Bo=h}V!x%So22;qil--?R};f7`J z01t#4w!PEmfqfxT9vZ*MAgcFjmw+PSh8elarzmnJlH2aMxBPL@<1tQnU`A8^xab^z zT(rv{7h6lic`bA@8fydw>$r&`u>_s1xf_mEP#d2HJvC#K=>%TS&1A)v(Nx~REo8^; zqoLloC#ghZU^+y#oZ(hL`4j9zTMF4u1E0=WGN`w60)EfhP9Y~l{a_y*XhTlX&qkuQ z5xOgT`-M6Osdy81bzEL}*0veehRmso)A66ubPIl%&zSfzE#6C`$+Y-P%Wb## zON6ZqZD*j09=TyFHVFGteh_~|;m_zuJwql<;}59UXEe&Zv}Zo|wa>9E$wO;Cq0xXT(D%|3itIxg$aMezWkS+<6jZp7c<|_d0wSZa7zSWt zJ$ybP5CF^$)V3Gt^jJ5nG*>UM_(F>>viK{IGvMq+=Di5|Q})u}B7{QDvD4cW z-%DlWXk~&;ido9)_z$*Cn6(#IIECGA|Ngsm|L1f||L1k1|8u+X*^7@_n0gdo&iX%e z1I8y5#nn#~PGy>r<@=+lxqxm7Ht%^|LG<7t`jP zmUq);(eh&2oYV4d+8jxkwXsAjVQr%oiI7(8@HU#Au(e`Gw$a2I5C8HglscB^v73G$ z3S0_}(AjW(@Efs0EBUip$#-v!LDlc7F>vl{xrrQkgc{{0rj!04_pS?N)Nz2tNYEiT4LUlCVq~_Ay>KJ-R&7;TEe0m$tckuo`+CNpt>6@`j z!RuW#*;D;{=@?J-Z-au0Vc__{ASPy`iEBi5Kf=3Xw?tX za-0!G^-bI?-l&cL3=#AxXvH$>ik|D*b6AkjV6U16xL1q>o=qypG(UR z0$rn_P4GP?X7ou`>&r*Ehzx5t`p5k3XoL zh@0z^b8~$lYjJZCSg%A#V!8O)jEBT!=#dXIN|OTzB|=)?kr9^cdcy3YeGoa39CZ@) zQ|@O0i`}U?L`rjrlxmd}L`t!L9}xqSk1ZxtGZmIZP|`YQi%2 z2ql@ljCQxLx2Q+y62&C8c>lzWk~as%uhapk9~B$=g;%yJC2fM-pchiCF(Sw z&)wZU3%yg4NEKgN z8v^-wglqHzSI_RKB(0<(*O*(Jct{jkCn_WuSm{E*h;*$Lp7sL2TV2yTz;vEsZ zfi_rzrlDN3ED;{K>Y{`>2!)jht-7cP({2witvrWJd2W*{*Juec-49g)g3`k(F(0f=p8TMX$O^Im7&2V%QTio>#Fk<mN(Ss>Lz57ykhFGwz6y-M>dw@cAQOxR!BAc2B3@1UaaK9pxCeT1XL0({Z%vA#`$ z%;Gt;`-_3%4#rkLfuw#4w4b9s>UlW(7Xs4qBMw03M{?4F!(I#&pnCFW5M0^NRX{;7 zKI%dG1WSH8`rCNHe-rRe+C`0##s-~)j}QszETXaaH{RG0+7aGi?yz>)J9=3=(Bv{! zfB0+kr?JLB3>u8T09`?~#!x!k7*2J@2%2J4YE0b^e~;qF_;IW>9rGh(jddgJUN%3$ zPkI;zKfeuib9C4=1vwX1n4e;xiOE0U9~PNxe6h(-7oDuW*yLyUM@3eK$Mi!oz5f+M f8@}tudepP}u+tyx#H)~l@1{RvaT+yv!jk?U`8Qg$ literal 0 HcmV?d00001 diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class b/out/production/main/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class new file mode 100644 index 0000000000000000000000000000000000000000..da33f9db5ec675d32205141717bcc188171d44be GIT binary patch literal 1948 zcmb_dYf>9W5dKCIEQlrIEgTz1w(}4xU=xC!2aX-UIGD)BmIw*Xb6HJ^#qzFdcV!aa zAV+X6z;CL8s0vj%Kn{@8xJ^~`k7bbsCR_2`dRzx@ti20x@Rg6rKF z#tkJtP~t-kAEnU|t3Ot=StV{N@rj08Y4qTB8lPfL!@L?7x^O3rMchr}HGHPFEp_3Z zhGh+(YbXlnf%KnAzwFshWGIj=ZduPP)0LrFK4q8{=-F`G%3P)5%ODUKJ+&`7+Olw? z<~Ll|ajOF2u|Q|N)~GtJz>T7E`h2tDZA<6*rsY;m-wNs*()WMbYB;tuOGnFPwR{+z zqrc9Zj_ZWC1Rmx8n~Q&fI=&{5TJS1TAX9W)`JnNXXjZL_8Z`q&&$eo7mhY%_OPLBc z9VUN%DskgE$=!itqbjtO{qKAk%OV*62^2~ z#v3|b$3;eKO9vgJxS(SN4|P03NkyY=|MxHiF1Ak8yg(g@DV_^j9G^K4 zXS*5+^qnAF+1TPWkt8Ro5=kF3C(gw2%zG=x_d|xA6tV>)6UeY68-YA-s#N}Q#7Wg@ zOd@}l0Y^QiHg#IIq7n<2A3wW~Y*_xEdSzC{I=5i$I+q1wlUHi;G^wZm1+3E~iNbeR zWmxp8Rp|>{I?A>YIyJLKEic%NtxS6~s&X3}pQUZfkDsOCR$(Kul|!E%qBxm4r(x7a ztG;EkTRLnqNa6}#-VyL|M2eEs=ld*Fe?%iYhGRlCO*9G;`wG`rx%wGNegV_ihcHrm zNEn4ZB#ntZq>KY}tnZ_951R2Sv{VyaYMf}IdpB})jq)nGDEk;#M>qQUh!0?p-^&=n z+k`bmU~h6qE)IjYs8t^`f+M1t0-C@(oGbWw{>EWY5}>%oe}n`r6^2f{z#WC4iF8pd ze?e-OWAXq!>uN0QLvNyY=kU+S`~rhY+eBuduZjLb69YSk2UO9);0}h=rpP+fvhEV2 zM!b{EB1;5nT;d~A;+TZWcAlAn<<*Ed!>1_A(i+TflG#i#$LlQY9C0sFx5SKAP~ho2 zpPzBn_^>e%Rl{JW8Tu%2EqF3Z4^y0#=|7$^<5sOqMjT_rml)CT?jdU`G`y$8bT+|% O%IQ8He4m>VnE4BaYxR5p literal 0 HcmV?d00001 diff --git a/out/production/main/plugin.yml b/out/production/main/plugin.yml new file mode 100644 index 00000000..d1e03137 --- /dev/null +++ b/out/production/main/plugin.yml @@ -0,0 +1,8 @@ +author: [MinecraftDawn,Zhuowei] +database: false +description: Implementation of the Minecraft PI modding API +main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin +name: RaspberryJuice +startup: postworld +version: 1.14a +api-version: 1.13 \ No newline at end of file From 25d8f46f2d01f5305083f3b5ade79460990f2125 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Tue, 30 Jul 2019 22:04:40 +0800 Subject: [PATCH 17/82] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=A4=9A=E7=A8=AE=E5=91=8A=E7=A4=BA=E7=89=8C(=E6=96=B9?= =?UTF-8?q?=E5=90=91=E5=B7=B2=E8=A8=AD=E5=AE=9A=E5=AE=8C=E6=88=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- out/artifacts/main_jar/main.jar | Bin 24826 -> 24816 bytes .../raspberryjuice/CustomBlockFace.java | 21 +++++++++++ .../raspberryjuice/RemoteSession.java | 3 +- .../api/python/original/mcpi/minecraft.py | 33 ++++++++++++++++-- 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/out/artifacts/main_jar/main.jar b/out/artifacts/main_jar/main.jar index b13315f01dbc5e2656fedaba2f9d33dbb3bb4534..a8a8a495b87b2df73438f24a3519d9cf36b70245 100644 GIT binary patch delta 14132 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 z z_xEsQxV>t)kL3JM(|)IpMvzb5;C!U#21mPcI9-6l35mWg% ztAcS;O;Pa7++AvjG^1QVd~vcDGb3K&3T(p?M;((iw2>1r7Eu&&yu%ve8b21fE^{0s z2tXMV`&OMJ_UvQmboi!q6i1CYM?`xPM?OImxTmIx$N_Y=8KWaH7t{elnReyQ7rY?8 z??60xedo+)RJ;Ijz~L|5(cU$5cR&&Z-c(0tUUoVWrF8@jOQRZ>^DHCFH~mo5`ElcF zR1C1y5;{Aa-NFcAK%M)*g(-=69q+KsyI`*FwVrqm7}F}Mx#O7`&+5l-eh}a4&DuHy zh%f#(FaDk506qI()WooEk9T;C?58pWlRqKHbYr;aSqN|S&z?{E8o<$c2zgJ+u`@C{+ubFa$PlO9wQ&T!y>nR8ML^jbexELE zdxCjJ-+q6Og)t+%+ubFeqOE(E%7qonlML^vnV58UUO;=O_xVArtv*~kQQ*ZL4>;87 zJU=N()P8ZaXTtL6e1j10pJMQ-hjT!d3nkjPRvkTta?^p_SITgMbrVXFM@@#K>~g~u z?-%U~3c1?yZoCwQCo}6;iNGDau{OX`C?KOrSL2U=Y#u$V^l<$N40!6(OXlRO`oUHX1z(2 zT7@@V23exQ2$6S$0}>DeV}{v}0NTs(0#v}2t=kp{Sn*9%k)q_zVOvwO0DZL!6dR4j z*F$B7e+H--yJP*>&%vufdofeQfMT3P;Nr1J^KO)3(-5&FUKG1q8-I{drgppZwB z0TPbY&i=X{O=9wBT-u$H7C0f3zH#`mmgCHYThYv}%>Qi~tLRL;759~KFjeA0=g>$C z$FOyhtSb5!qQnuromNszl`M5DD%d)ZE9D}75Hrg1=p zjpvJrF1Q}c0zQPe3t~VOr;e(wdl~@*)tsd{U-0r#iVE4r%5e&U1%AjR{JxNqw)alZ zuQ{KCN%$}e@(!|Iaz$P}aBmHgdQ7Zf$)l5)Mkes1STvS0`-pI858c)wiO7YBkOgM(t6ssTAT8>z;p@*7;Nt>$(<`Xu6(un6}LNAk|szSLp zuu-mZf@45q)G4IvK=hTWmYMTWnU1u77N8o5_vYZ0(dTXzejy~51P;CFDDj~#=Z{m$ zsMtDEWu|>$9Yz1B1VvNBKD~`AYSU&bBf1`GUG|~T2756 zwU0(E5-%5wt;5u?sHJiqfDC5$sDP7`MXz-wsf}@B?>e7Dqb*hOAc>uo#$<^{k}{N? zl+&5y@5fS50nk|rLhnfJZ?8dEQUo(I(V$=w(^

    SIG*pKVU^x-gNlc0;X8xPzOw;aBFH}6 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 delta 14111 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 ra Date: Tue, 30 Jul 2019 22:04:54 +0800 Subject: [PATCH 18/82] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=A4=9A=E7=A8=AE=E5=91=8A=E7=A4=BA=E7=89=8C(=E6=96=B9?= =?UTF-8?q?=E5=90=91=E5=B0=9A=E6=9C=AA=E8=A8=AD=E5=AE=9A=E5=AE=8C=E6=95=B4?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../raspberryjuice/CustomBlockFace.class | Bin 487 -> 487 bytes .../raspberryjuice/RemoteSession$1.class | Bin 1258 -> 1258 bytes .../RemoteSession$InputThread.class | Bin 2236 -> 2236 bytes .../RemoteSession$OutputThread.class | Bin 2243 -> 2243 bytes .../raspberryjuice/RemoteSession.class | Bin 23387 -> 23422 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class b/out/production/main/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class index 6296d8ddbf9adfc6b6b784c32bf4a970a4a2491c..22dd191322ce7580fbe504459bf1514125962ffa 100644 GIT binary patch delta 13 UcmaFP{G55iDMm*5$)_1*04M4M>i_@% delta 13 UcmaFP{G55iDMm)F$)_1*04IS2)&Kwi diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class b/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class index ddcb17fb336f916c79690eae104bd611f296d7b4..9cdd13ba077c496e12ddf7262a43e2e8d8218943 100644 GIT binary patch delta 13 UcmaFG`HFKxCkvzGscvx`5MK;E7lP|H|@%_QT&-9Z)lIahFHq&1QGp2tGuFMP!{>+RFLCj1HVa%Ki zk<82tQOv9iDa>pP8O-bq1wgT4W?qI`Wscvx`5MK;FolP|H|@%_ob&-9BylIbslHq$=_Gp7FxuFQ-K{>)4aLCnkyVa!|% zk<2U%QOs-%Da`B)8O$6E1wgT4Ws%caj zv$j%)Je_rhR>kB#NCVR5j;DH=aF>uxzIR8{UHQ#jNf)FjJDx_QIlF}NWIDTk3XIc&3%?y<|~9t(xakE*;T_dGjkK~lU8)GQ<3Vbg7g?PIZflf{wa zqEqsC&M;|mJ7;pkMQ-DUEVs*a-eJ2c$8wXTJ-0#hTw3(&w;U z`)|Zau@;2OM1G0LtDn7@W zKFLA)>m01V&t`p@L-ZfmqOWqOeup<18iyI-Y&BxpW~6Yqv5W6Byowj{W}}R^85JC5 z9O7uBi<69Qjx~BX-WcQrV}uipF;1o(fIoP*R~u?W617r1LiARo(;+$xvmSvHR6#)q z(BsihZPb83-HS$Qrw#<^^(dfD>Vh(c#Q)DNBa~XG4uOUSHyxp;RF^wwqAJ>t00bK? z)J;9mU^N=4m-=8bdJsvqbab17>W3jar9v&0^-~dOBlF)ZT_o!8pDSx8Zz=-Wfmlw1 zn|I=2egG|;jzP}ABs=jMyD-CZ?P$QXn*2>Etn0JBt+E+x;&-rxFCvlOm8H60yt9h> zVc|LD;4-5519d|Su=9sV<&V^5UqKFkiekQsJ^UF;coBPf3EjLbtM!8sUn=!is^^MQ te~obdMtS^JdLB6&vlSUy6r5TNGPO9kwFG#y`;nt1BTw7zk3LXH{{rF)6jlHL delta 1113 zcmXYwdr;I>6vw~k{FcY^`z^3*Ajv}lWWWs{>;smU5-#y7;<1n*qJkI#iv-e?$wPw~ zdCWAPGHs~LX{Ib9$0ZuI%+RPQ%jzGUiT-iMv6=cu8wZ=orb~7IxaZu@Io~tq+`0Gf zIr@2y&U9*I4s>bO7;QUU3Jk}duvjB&Dt)yj&HwG*!kXGZd3u4_d=h5pfH5jZGdG(u z?6yW}c0|kXnQ^ovW=A!>BikIVFu&c_G6&xYl*wXdf}C@tQG(obJii=v)>DPdI(zAc zq`7M8upD$fOzrZTYl0Rf#l4&QWz3yOKKa1yr3ks>j-$I0o>fIBWk*&b4a#tqmpt-S z)=s)E>Dfs%D;3!udO=3BohGl{c2+90)8%%yg><>6!oNz4CxgyQv8R!?%PG&0=@+~0 zqLg~pNO_KfhGj5kh;TIb*m4uOP0OlWziG;DyDYEgrpS1n+f-n;U6K2_S@Kt&ldj3e z{HCxTyKUj$2}O?QyXb7-$NWmtIt+gxdD9VXu!#Q9E9jo?qb0qG?(3~gdOx#1qU<=E zbm36_EjH^j9H!5+uK&Q{`XWc@w>Z)OTa8Gz8L_;=Nalx(bsS~570=@s!^^Qo3C9_` zIo{~tHHM#88{Pbfae$MIK~6SCIF-_XfW6404emh-?V&`3>8)5#&rmzedK3nzoI((! zC!&}3QX_(O4;rY0IuWA#P(WSeN2or7r2q5g5l(GXk6;6EQ#b8XRc>JiRZ|Uu5Nfng z4?PPFR-=J>sShTj8_`rp`&TKbUJ9ktTBxPGe%cIL_5u%z=ZV?_mr6RwV@EJQiUiJp zo7dqs0oD*m*`_R1l1BMjb# zXl|0bm2X&fB8YdXSPNEjn@l~`Z{4d%r&4sm%6^r%Pm-&~Eqw^#{i=I@R~`>5k Date: Tue, 30 Jul 2019 22:05:09 +0800 Subject: [PATCH 19/82] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=A4=9A=E7=A8=AE=E5=91=8A=E7=A4=BA=E7=89=8C(=E6=96=B9?= =?UTF-8?q?=E5=90=91=E5=B0=9A=E6=9C=AA=E8=A8=AD=E5=AE=9A=E5=AE=8C=E6=95=B4?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e2f00c67..1ba2f1d1 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,7 @@ hs_err_pid* *.iws # IntelliJ -/out/ +#/out/ # JIRA plugin atlassian-ide-plugin.xml From 77351837508065357783bbc6be666fc60b41be15 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 31 Jul 2019 22:38:58 +0800 Subject: [PATCH 20/82] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=A8=AD=E7=BD=AE?= =?UTF-8?q?=E8=B2=BC=E5=9C=A8=E7=89=86=E4=B8=8A=E7=9A=84=E5=91=8A=E7=A4=BA?= =?UTF-8?q?=E7=89=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- out/artifacts/main_jar/main.jar | Bin 24816 -> 24956 bytes .../raspberryjuice/RemoteSession.java | 33 +++++++++++------- .../api/python/original/mcpi/minecraft.py | 25 +++++++++++++ 3 files changed, 46 insertions(+), 12 deletions(-) diff --git a/out/artifacts/main_jar/main.jar b/out/artifacts/main_jar/main.jar index a8a8a495b87b2df73438f24a3519d9cf36b70245..e3267d40defeafb2270ea9f5ab78160b9e6fcee2 100644 GIT binary patch delta 14012 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 Fe*kl=`uP9= delta 13889 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 diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index d09e15e3..7359656d 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -6,6 +6,7 @@ import org.bukkit.*; import org.bukkit.block.data.BlockData; +import org.bukkit.block.data.type.WallSign; import org.bukkit.entity.*; import org.bukkit.block.*; import org.bukkit.event.player.PlayerInteractEvent; @@ -487,13 +488,6 @@ protected void handleCommand(String c, String[] args) { thisBlock.setType(Material.valueOf(args[3])); -// BlockData data = thisBlock.getBlockData(); -// ((Directional) data).setFacingDirection(BlockFace.SOUTH_EAST); -// thisBlock.setBlockData(data); -// thisBlock.setTypeIdAndData(blockType, blockData, true); -// } - //plugin.getLogger().info("Creating sign at " + loc); - org.bukkit.block.data.type.Sign s = (org.bukkit.block.data.type.Sign) thisBlock.getBlockData(); s.setRotation(BlockFace.valueOf(args[4])); thisBlock.setBlockData(s); @@ -503,11 +497,26 @@ protected void handleCommand(String c, String[] args) { if (signState instanceof Sign) { Sign sign = (Sign) signState; -// if (signState.getData() instanceof org.bukkit.material.Sign) { -// System.out.println("Test"); -// org.bukkit.material.Sign signData = (org.bukkit.material.Sign) sign.getData(); -// signData.setFacingDirection(BlockFace.EAST_NORTH_EAST); -// } + for (int i = 5; i - 5 < 4 && i < args.length; i++) { + sign.setLine(i - 5, args[i]); + } + sign.update(); + } + + + } else if (c.equals("world.setWallSign")) { + Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); + Block thisBlock = world.getBlockAt(loc); + thisBlock.setType(Material.valueOf(args[3])); + + org.bukkit.block.data.type.WallSign s = (org.bukkit.block.data.type.WallSign) thisBlock.getBlockData(); + s.setFacing(BlockFace.valueOf(args[4])); + thisBlock.setBlockData(s); + + BlockState signState = thisBlock.getState(); + + if (signState instanceof Sign) { + Sign sign = (Sign) signState; for (int i = 5; i - 5 < 4 && i < args.length; i++) { sign.setLine(i - 5, args[i]); diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py index d701244e..039e005d 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py @@ -214,6 +214,8 @@ def postToChat(self, *msg): # TODO:修改成一個py檔處理Sign def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4=""): minecraftSignsType = ["SPRUCE_SIGN","ACACIA_SIGN","BIRCH_SIGN","DARK_OAK_SIGN","JUNGLE_SIGN","OAK_SIGN"] + + # ["SPRUCE_WALL_SIGN","ACACIA_WALL_SIGN","BIRCH_WALL_SIGN","DARK_OAK_WALL_SIGN","JUNGLE_WALL_SIGN","OAK_WALL_SIGN"] minecraftSignsDir = {0:'SOUTH', 1:'SOUTH_SOUTH_WEST', 2:'SOUTH_WEST', @@ -231,6 +233,7 @@ def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2 14:'SOUTH_EAST', 15:'SOUTH_SOUTH_EAST' } + if type(signDir) == int: if 0 <= signDir < 16: signDir = minecraftSignsDir.get(signDir) @@ -245,6 +248,28 @@ def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2 if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") self.conn.send(b"world.setSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) + def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4=""): + minecraftSignsType = ["SPRUCE_WALL_SIGN","ACACIA_WALL_SIGN","BIRCH_WALL_SIGN","DARK_OAK_WALL_SIGN","JUNGLE_WALL_SIGN","OAK_WALL_SIGN"] + + minecraftSignsDir = {0:'SOUTH', + 1:'WEST', + 2:'NORTH', + 3:'EAST'} + + if type(signDir) == int: + if 0 <= signDir < 4: + signDir = minecraftSignsDir.get(signDir) + elif type(signDir) == str: + for k,v in minecraftSignsDir.items(): + if signDir == v: + break + else: + signDir = minecraftSignsDir.get(0) + + signType = signType.upper() + if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") + self.conn.send(b"world.setWallSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) + def spawnEntity(self, x:int, y:int, z:int, entityID:int): """Spawn entity (x,y,z,id,[data])""" return int(self.conn.sendReceive(b"world.spawnEntity", x, y, z, entityID)) From a12eb8835651d3bfa8aa419a85997c8661ea3452 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 31 Jul 2019 22:43:51 +0800 Subject: [PATCH 21/82] =?UTF-8?q?=E5=8F=AF=E8=A8=AD=E7=BD=AE=E8=B2=BC?= =?UTF-8?q?=E5=9C=A8=E7=89=86=E4=B8=8A=E7=9A=84=E5=91=8A=E7=A4=BA=E7=89=8C?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9Plugin.yml=20=E4=BF=AE=E6=94=B9out=20file?= =?UTF-8?q?=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- out/artifacts/main_jar/main.jar | Bin 24956 -> 0 bytes out/production/main/META-INF/main.kotlin_module | Bin 16 -> 0 bytes out/production/main/config.yml | 8 -------- .../raspberryjuice/CustomBlockFace.class | Bin 487 -> 0 bytes .../raspberryjuice/HitClickType.class | Bin 1126 -> 0 bytes .../raspberryjuice/LocationType.class | Bin 1086 -> 0 bytes .../raspberryjuice/RaspberryJuicePlugin$1.class | Bin 863 -> 0 bytes .../RaspberryJuicePlugin$TickHandler.class | Bin 1745 -> 0 bytes .../raspberryjuice/RaspberryJuicePlugin.class | Bin 9481 -> 0 bytes .../raspberryjuice/RemoteSession$1.class | Bin 1258 -> 0 bytes .../RemoteSession$InputThread.class | Bin 2236 -> 0 bytes .../RemoteSession$OutputThread.class | Bin 2243 -> 0 bytes .../raspberryjuice/RemoteSession.class | Bin 23422 -> 0 bytes .../raspberryjuice/ServerListenerThread.class | Bin 1948 -> 0 bytes out/production/main/plugin.yml | 8 -------- src/main/resources/plugin.yml | 2 +- 16 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 out/artifacts/main_jar/main.jar delete mode 100644 out/production/main/META-INF/main.kotlin_module delete mode 100644 out/production/main/config.yml delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/HitClickType.class delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/LocationType.class delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$TickHandler.class delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$InputThread.class delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession.class delete mode 100644 out/production/main/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class delete mode 100644 out/production/main/plugin.yml diff --git a/out/artifacts/main_jar/main.jar b/out/artifacts/main_jar/main.jar deleted file mode 100644 index e3267d40defeafb2270ea9f5ab78160b9e6fcee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24956 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 diff --git a/out/production/main/META-INF/main.kotlin_module b/out/production/main/META-INF/main.kotlin_module deleted file mode 100644 index 8fb60192d378759239a3ecbf60eac8c8de446e9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 RcmZQzU|?ooU|@t|UH|}6022TJ diff --git a/out/production/main/config.yml b/out/production/main/config.yml deleted file mode 100644 index 46a97e03..00000000 --- a/out/production/main/config.yml +++ /dev/null @@ -1,8 +0,0 @@ -# default config.yml -port: 4711 - -# Determine whether locations are RELATIVE to the spawn point (default like pi) or ABSOLUTE -location: RELATIVE - -# Determine whether hit events are triggered by LEFT clicks, RIGHT clicks or BOTH -hitclick: RIGHT \ No newline at end of file diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class b/out/production/main/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class deleted file mode 100644 index 22dd191322ce7580fbe504459bf1514125962ffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmb7>!A=4(5QhIQum~a|ayQ<<7^{glj0Z_LZRCLA-d*cbSawaf#mH0X$;5*X;6oXw zD+xqT_At|bX1>m3`uX+#0pJpyI!ZXGqFu!ygMXz`Wv&@Y-QI+uJjm`P!+xMrd21J; z)OR9GDAEqHNF)=XmDB5B*-TZ=a1o@^@YU32Pg1R>B8|Bg`6I#ld1h54`M~BTTihgB zG#`pc_8FS7G-DN~6OmXsdSE#31~ah~JaPEgXqCqOUXbaShju diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/HitClickType.class b/out/production/main/net/zhuoweizhang/raspberryjuice/HitClickType.class deleted file mode 100644 index 4a7ee43c34f607313816eefcc2181e0de92d2781..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1126 zcmb7D?{Csz5Pn`L6uORI;*>dm&FO$4h~g*6!bX@ZX(SOOA;u4-Rw$OTly+wOtCS_q zXf*rmA7#9^5XYilXp{GPchB8DcklJr?{7Z=lu!yoz_x@mG9r>9vJxWL;YTins6@^j zM?4N8&SgG?1eXO7PZ$KHe$ZyfE0*pQP6zJzqi&oIRI6XG)yYv$x9yXmYiN3*VK_C@ z&_1+Jj`T7^;ML)a1_cWH&31!9-0JKpuj?&_!kcAN1&>wJ)h7(abY|&bp*DV}Gei}` z(qFnGBHUJcCRs!;Yx6zBep(r-$7;dkU9}wBu=?f9vLqAASX0f8Y8yQLyoO+@BPx~n zH$OwLVpxW=%dqyJ@`srYjm{Yu)OEOJ^exqKZOY_Nb4RG6ne*W4Lh8EZjw;LX-ldz8 zT4UGN^aF!WCBAr#c|H~y*Z9&TWfbw0A-BvP$VlOtj61k1BZ`=eI6o4IF+?s$&Uw?q zXy(`=2FY}0p{HhVsA~?fe7-oPnyF4Ei8T5Q2;Zs)Rw*H5zanq}f#ZEw z@VCe!&rsOFZO>1mAr!Azgr8nO%|irthUa;IDuKe5-|i7*@j48 Nv!YvgNH!lH{Q*>=0rmg@ diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/LocationType.class b/out/production/main/net/zhuoweizhang/raspberryjuice/LocationType.class deleted file mode 100644 index e6f38600b04a35275e5ff2e74c3f0418271e6ccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1086 zcmb7C?{Csj6g`g?TDoowRCG9++7haS1dfz?woO|!PzkYxF319~=(h#w!;0c~e$VzyoKt+*nB^k>K zIZGT-mXYD-mV|8vxw+SA>xbPILq&J3Ksy_T-bc$m8yfCF^Nq=I-}3#_QD~c%rhBFl z*q+-xJ+^8T`?jSwy9Ygrl{R}#{jk+x(B3UdlR7b+(3&t*i=~Bw#eMI+#gNf$*Lo9< zDcP>kcj!inSlb^M_KNz*I59MbSJVl7+a1(Oizb=lwL3k-w>kY>Lv)QXN#*|KXGqm; z*A8|W^8b-PDD@b`U}#g->5e^cjUe=iNhorMTsNJ0a3eH?bvAlQbm6VPb`lj{D z=3U9gpRmH)qGFW~OIF2mR2a4wnE@4fXe#bvUBxn1RAjKiuyWOHo-#wybUc^DZx&0j za@zfoWd@Ys%XowK9b+=7#bAFQ>^f_$QKcDHY4C-{8W#uXBz<7Dz)K>Jh%|Dz0a7OG z5uJP~Q?M^cTtfIn7Q-#tQ;|<1d>*&w_#GsoTO}u!zan`Fk>eBB@OS7&ouROXLgc4z z5Q-~SAbCDknsQ;^F&@#A$(Q7Lp;h!!Ug1Wq$5KS pBV#G~gIvOtX6ZgtwW(p6f9lV&we*o)x{rdm_ diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class b/out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class deleted file mode 100644 index 9942e3868b7581923c75ef7570dbe2b439f1983f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmbVK&2G~`5dJoC>?F7}lmcn_E7Xt#s#-;b9zYz35|WZMsENv<7dFl+*>tfZ$8Oa= z0I$LskPt$s55PkqW-XvpLPACI&dfJE-_CeuzJ3343}78Ad0as;hb$IyWG!lV)xtFm zu4{3_!c7ae7&e^lfsDLSn@=2HM9$GD4i1Do8gYNK5z62OSFVJT1r+Z>ZxdpJT_)XpC|MdX|jNg&tS)2 z^B9aqLU|jmNW|4AA5Y<(%>K-OhQ7`K@oC@8EsvS2LEUuRARlzx6u4jEQ|+BY8ICk}_o@16>tva>-Yw8u zsT+aVbiUx`XuYH`p&0tb}VsNGUt>1f1s&?;}l!sUox?M zD~iv@=&9tOKoy%zQJhVYC}C^X@_Z7n=1+l(wVoMg(<$xnrX8?d1PPC&U<7=#8oJju+I^JCJxCOaJ)by5{eZZ zpdo0ABt+|iajMYf5*Jv zGwui8;3Hb`3GMjIDgG6`_=Y}w4{~Z^+$J2sahwS5kSS&tM;a%&B5;bnROUO#X=-PP z)FQl%xQ^y+wCFhd10gM;&{nRinhemJx=|$6{tTjgJydK}p`CgtEy?PN0Bb{v9yI2x WD%pVseru`4`J+0*ZwqZCs(u6TW75q4 diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class b/out/production/main/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class deleted file mode 100644 index 989d3657fc14a7668c5dea26242ac1b3d1159675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9481 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 diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class b/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class deleted file mode 100644 index 9cdd13ba077c496e12ddf7262a43e2e8d8218943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1258 zcmb7DYfsZq7=F$!belygUbu*YQmz6OL_opI7$p+NMrauy_+rnj#2|a}#+(|;g-6XAgg;XW<3DGZL zK)|4YApyfF+{1{lA5GF~Oh{F%Gzs@5OfXEV#-0<}U=|SKJGG>L@oPZ|+o(gz|841rtu(XU;5o{hA84JiTXmpX< z*^AW9U!-=fT6LU3Uh+I1WL&FSRHz8`_y}H0@e$ zO(g0b9NNhK-Ex-tw2)uVF?9XgO7eq}<5_OKyEGP&wH1bVF28ENAU5)Af@ABtVG`+S zK_mY=(D`W_7nNSbg=$Zv=Z$=J&D0sjF6_IiXVd0VL05X{@3}&MUqopajRuHmdT56- z;5u#)w~^>UlvcopW3ZF2sn3WUiYI!6SSVN!7L?j&}5-pLhThG_`R|Ax+~NhmI8(#3o+B zCf>$tydi#zcX&@6B~KuQ2oUW+2@X0)lR_uG!%)^G+{E%9ASd<;zdulu5%NSD)TZsbIzPI-+bpX``JGq ze*$0#B?IjkY~(OxpaV}g;xL{u@GOob@SK5R995F%4GzZ)9LEc4cEZ32aymv0?8eCi z#tfXoi)t~h_MA@OC1sk|F`?s(jE0K79YM zuUGYHRn_N0J0|teeNWuMPD5i+26?Yol)i=onXafRDuGkVmMCQ=WFsw4*cY<3gO1I> zapydyPi9M1)ygfbN7klGUo1Ta(XecrO(;Fk$6Oz;x2$Rq9WOf)W`--Rb-!v)00(VcT6s^dj(;4n)WT5s$F4?u-h$LzG4?CzBV1uuoqf$v#N5w zL@@|e^pqY5-zC8{V08D~g6O`D*bS}(9^x419*8gSFz2S4!@whWj9(20k&ZlQbKI>w zeAs;x;wBoZ*wqrRLXVb->nNz%M`*0V$oG7TJ!%=dg~S??k*2Aq3iJHhz0dO-HoX+> zX-QVmd>!qPG;~afz6PDz2R7W?dp~l+16tOwx8@|=-daVQ+IxctJNaIY@Zns=6Q=>X zxFY_-Rq;Eni9hh3_!A$9zeB#d(Ljdw<8eGeo^pKupG1bUYiO;_$XJcdF0z+`k-Uq8 zI=b(mX+%fQU1T`M?m!oO-FsS_!Kn2{oMV*tiP0+F-E$k-&JjyRJ8EaBXdWU5DvEJr c(HBOopDTd@Jj!niXYKsuNb&m=*Jw`s3)fU)5&!@I diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class b/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class deleted file mode 100644 index b0b76e21fa1ba5c7e82cdd21fed38f8deefd590f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2243 zcmbVO-BTM?6#v~_l1>kbEm&>&s9-1+kP1q5v$-Tom)&$f1Ul21 z_CN4JAAItW=g!a+eQljxsA(TlKQ@A0-heAxNn88Ov z6co&=Na3b1&&6;{1o>FOyn+Pw#(T{5;=qe7?Xv&vfijavd{m)4$4aDbu8H{}MyXxKrW`iGpeKo52R{v#1v>vZM-* zp<7G3YYM$#Y!NUSw7I~q2L58j<$8(KY1`)RxTSj@r`fUQVDughM(2^;z$Tdq(OCpb zU|H9{(({&JW5IV#yG-jCO>`WYnA|dW)vt5Xy5Q@^-C4aF;->6`RL?5-gu!T*rY4Uw zG%AowTa-*`YlvZ}X@3TF!3kW0PnlsRj%9p6P@&;0&S^M?cQkx~FE!{WDljyZKx8KWO|phHloeDon8L%vx`w-A zH%r3?`ZU;Z7}^fqo~J-VRm|T*AH$g`osLmT`%c=h9FGe`>0+?9#$63A?l4?ws^pK= z%Q4h*#dU7@R4#{z<^$WV*K@wPO(<~}oARJWtXe_Yq}m;MamEi?dPcPLtHmqvbn@53n&hS1uIY1^0(XXJ{xic6*%V6%S7usJ6IrtYuX3yu53a_@ zw#hBJA|sx~c~yAK2#-XSE-^p6q!wM>piq&pH;Cp<-4!$=O|MTk7<#~xNzv)_GRcrc zFlb;~Av;Y0`)$KdzYAg!@bkxu();=a^Jy^mry_+5$;30kG@Nn~J zr^Ee$g!CtRq`#1p{>F&(43jc2Co{~;5|-pRmSq_$as(wgii)hDN;Xe!#RK^?9?GZi zNKW8uIf-xNR7g}7Ey!R1Z;)hkk9MLTSsFb;TVq62HE7HcZRZh7#A$m4Z|>6)rr@Fw z1Dz7R_XBN7P_hQ=RAYipL+}vI=AMF`oTzktMPmn%#34$%NM00|@K%_tVbUaA#%uIV R(Wr}lJ6@%4o^&K*{{Y6_RL=ka diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession.class b/out/production/main/net/zhuoweizhang/raspberryjuice/RemoteSession.class deleted file mode 100644 index 762a3c33ca971668cb670fcc8290af6d94421b98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23422 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 J(a2#*{}0M-XIlUO diff --git a/out/production/main/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class b/out/production/main/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class deleted file mode 100644 index da33f9db5ec675d32205141717bcc188171d44be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1948 zcmb_dYf>9W5dKCIEQlrIEgTz1w(}4xU=xC!2aX-UIGD)BmIw*Xb6HJ^#qzFdcV!aa zAV+X6z;CL8s0vj%Kn{@8xJ^~`k7bbsCR_2`dRzx@ti20x@Rg6rKF z#tkJtP~t-kAEnU|t3Ot=StV{N@rj08Y4qTB8lPfL!@L?7x^O3rMchr}HGHPFEp_3Z zhGh+(YbXlnf%KnAzwFshWGIj=ZduPP)0LrFK4q8{=-F`G%3P)5%ODUKJ+&`7+Olw? z<~Ll|ajOF2u|Q|N)~GtJz>T7E`h2tDZA<6*rsY;m-wNs*()WMbYB;tuOGnFPwR{+z zqrc9Zj_ZWC1Rmx8n~Q&fI=&{5TJS1TAX9W)`JnNXXjZL_8Z`q&&$eo7mhY%_OPLBc z9VUN%DskgE$=!itqbjtO{qKAk%OV*62^2~ z#v3|b$3;eKO9vgJxS(SN4|P03NkyY=|MxHiF1Ak8yg(g@DV_^j9G^K4 zXS*5+^qnAF+1TPWkt8Ro5=kF3C(gw2%zG=x_d|xA6tV>)6UeY68-YA-s#N}Q#7Wg@ zOd@}l0Y^QiHg#IIq7n<2A3wW~Y*_xEdSzC{I=5i$I+q1wlUHi;G^wZm1+3E~iNbeR zWmxp8Rp|>{I?A>YIyJLKEic%NtxS6~s&X3}pQUZfkDsOCR$(Kul|!E%qBxm4r(x7a ztG;EkTRLnqNa6}#-VyL|M2eEs=ld*Fe?%iYhGRlCO*9G;`wG`rx%wGNegV_ihcHrm zNEn4ZB#ntZq>KY}tnZ_951R2Sv{VyaYMf}IdpB})jq)nGDEk;#M>qQUh!0?p-^&=n z+k`bmU~h6qE)IjYs8t^`f+M1t0-C@(oGbWw{>EWY5}>%oe}n`r6^2f{z#WC4iF8pd ze?e-OWAXq!>uN0QLvNyY=kU+S`~rhY+eBuduZjLb69YSk2UO9);0}h=rpP+fvhEV2 zM!b{EB1;5nT;d~A;+TZWcAlAn<<*Ed!>1_A(i+TflG#i#$LlQY9C0sFx5SKAP~ho2 zpPzBn_^>e%Rl{JW8Tu%2EqF3Z4^y0#=|7$^<5sOqMjT_rml)CT?jdU`G`y$8bT+|% O%IQ8He4m>VnE4BaYxR5p diff --git a/out/production/main/plugin.yml b/out/production/main/plugin.yml deleted file mode 100644 index d1e03137..00000000 --- a/out/production/main/plugin.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: [MinecraftDawn,Zhuowei] -database: false -description: Implementation of the Minecraft PI modding API -main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin -name: RaspberryJuice -startup: postworld -version: 1.14a -api-version: 1.13 \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 4271bc56..5a39cd27 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,4 +4,4 @@ description: Implementation of the Minecraft PI modding API main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin name: RaspberryJuice startup: postworld -version: '1.11' +version: '1.14-0.1' From 06b7c2579700414b895cbdab4dbd6c962a8d5fe0 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 31 Jul 2019 22:45:20 +0800 Subject: [PATCH 22/82] out --- .../raspberryJuice_jar/raspberryJuice.jar | Bin 0 -> 24716 bytes out/production/raspberryJuice/config.yml | 8 ++++++++ .../raspberryjuice/CustomBlockFace.class | Bin 0 -> 487 bytes .../raspberryjuice/HitClickType.class | Bin 0 -> 1126 bytes .../raspberryjuice/LocationType.class | Bin 0 -> 1086 bytes .../raspberryjuice/RaspberryJuicePlugin$1.class | Bin 0 -> 863 bytes .../RaspberryJuicePlugin$TickHandler.class | Bin 0 -> 1745 bytes .../raspberryjuice/RaspberryJuicePlugin.class | Bin 0 -> 9481 bytes .../raspberryjuice/RemoteSession$1.class | Bin 0 -> 1258 bytes .../RemoteSession$InputThread.class | Bin 0 -> 2236 bytes .../RemoteSession$OutputThread.class | Bin 0 -> 2243 bytes .../raspberryjuice/RemoteSession.class | Bin 0 -> 23887 bytes .../raspberryjuice/ServerListenerThread.class | Bin 0 -> 1948 bytes out/production/raspberryJuice/plugin.yml | 8 ++++++++ 14 files changed, 16 insertions(+) create mode 100644 out/artifacts/raspberryJuice_jar/raspberryJuice.jar create mode 100644 out/production/raspberryJuice/config.yml create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/HitClickType.class create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/LocationType.class create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$TickHandler.class create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$InputThread.class create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession.class create mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class create mode 100644 out/production/raspberryJuice/plugin.yml diff --git a/out/artifacts/raspberryJuice_jar/raspberryJuice.jar b/out/artifacts/raspberryJuice_jar/raspberryJuice.jar new file mode 100644 index 0000000000000000000000000000000000000000..e8f9485c41d0739dd2fc956a871ae14d5411d813 GIT binary patch literal 24716 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 M+bAdqlk0E)1GR2VOaK4? literal 0 HcmV?d00001 diff --git a/out/production/raspberryJuice/config.yml b/out/production/raspberryJuice/config.yml new file mode 100644 index 00000000..46a97e03 --- /dev/null +++ b/out/production/raspberryJuice/config.yml @@ -0,0 +1,8 @@ +# default config.yml +port: 4711 + +# Determine whether locations are RELATIVE to the spawn point (default like pi) or ABSOLUTE +location: RELATIVE + +# Determine whether hit events are triggered by LEFT clicks, RIGHT clicks or BOTH +hitclick: RIGHT \ No newline at end of file diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class new file mode 100644 index 0000000000000000000000000000000000000000..22dd191322ce7580fbe504459bf1514125962ffa GIT binary patch literal 487 zcmb7>!A=4(5QhIQum~a|ayQ<<7^{glj0Z_LZRCLA-d*cbSawaf#mH0X$;5*X;6oXw zD+xqT_At|bX1>m3`uX+#0pJpyI!ZXGqFu!ygMXz`Wv&@Y-QI+uJjm`P!+xMrd21J; z)OR9GDAEqHNF)=XmDB5B*-TZ=a1o@^@YU32Pg1R>B8|Bg`6I#ld1h54`M~BTTihgB zG#`pc_8FS7G-DN~6OmXsdSE#31~ah~JaPEgXqCqOUXbaShju literal 0 HcmV?d00001 diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/HitClickType.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/HitClickType.class new file mode 100644 index 0000000000000000000000000000000000000000..4a7ee43c34f607313816eefcc2181e0de92d2781 GIT binary patch literal 1126 zcmb7D?{Csz5Pn`L6uORI;*>dm&FO$4h~g*6!bX@ZX(SOOA;u4-Rw$OTly+wOtCS_q zXf*rmA7#9^5XYilXp{GPchB8DcklJr?{7Z=lu!yoz_x@mG9r>9vJxWL;YTins6@^j zM?4N8&SgG?1eXO7PZ$KHe$ZyfE0*pQP6zJzqi&oIRI6XG)yYv$x9yXmYiN3*VK_C@ z&_1+Jj`T7^;ML)a1_cWH&31!9-0JKpuj?&_!kcAN1&>wJ)h7(abY|&bp*DV}Gei}` z(qFnGBHUJcCRs!;Yx6zBep(r-$7;dkU9}wBu=?f9vLqAASX0f8Y8yQLyoO+@BPx~n zH$OwLVpxW=%dqyJ@`srYjm{Yu)OEOJ^exqKZOY_Nb4RG6ne*W4Lh8EZjw;LX-ldz8 zT4UGN^aF!WCBAr#c|H~y*Z9&TWfbw0A-BvP$VlOtj61k1BZ`=eI6o4IF+?s$&Uw?q zXy(`=2FY}0p{HhVsA~?fe7-oPnyF4Ei8T5Q2;Zs)Rw*H5zanq}f#ZEw z@VCe!&rsOFZO>1mAr!Azgr8nO%|irthUa;IDuKe5-|i7*@j48 Nv!YvgNH!lH{Q*>=0rmg@ literal 0 HcmV?d00001 diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/LocationType.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/LocationType.class new file mode 100644 index 0000000000000000000000000000000000000000..e6f38600b04a35275e5ff2e74c3f0418271e6ccd GIT binary patch literal 1086 zcmb7C?{Csj6g`g?TDoowRCG9++7haS1dfz?woO|!PzkYxF319~=(h#w!;0c~e$VzyoKt+*nB^k>K zIZGT-mXYD-mV|8vxw+SA>xbPILq&J3Ksy_T-bc$m8yfCF^Nq=I-}3#_QD~c%rhBFl z*q+-xJ+^8T`?jSwy9Ygrl{R}#{jk+x(B3UdlR7b+(3&t*i=~Bw#eMI+#gNf$*Lo9< zDcP>kcj!inSlb^M_KNz*I59MbSJVl7+a1(Oizb=lwL3k-w>kY>Lv)QXN#*|KXGqm; z*A8|W^8b-PDD@b`U}#g->5e^cjUe=iNhorMTsNJ0a3eH?bvAlQbm6VPb`lj{D z=3U9gpRmH)qGFW~OIF2mR2a4wnE@4fXe#bvUBxn1RAjKiuyWOHo-#wybUc^DZx&0j za@zfoWd@Ys%XowK9b+=7#bAFQ>^f_$QKcDHY4C-{8W#uXBz<7Dz)K>Jh%|Dz0a7OG z5uJP~Q?M^cTtfIn7Q-#tQ;|<1d>*&w_#GsoTO}u!zan`Fk>eBB@OS7&ouROXLgc4z z5Q-~SAbCDknsQ;^F&@#A$(Q7Lp;h!!Ug1Wq$5KS pBV#G~gIvOtX6ZgtwW(p6f9lV&we*o)x{rdm_ literal 0 HcmV?d00001 diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class new file mode 100644 index 0000000000000000000000000000000000000000..9942e3868b7581923c75ef7570dbe2b439f1983f GIT binary patch literal 863 zcmbVK&2G~`5dJoC>?F7}lmcn_E7Xt#s#-;b9zYz35|WZMsENv<7dFl+*>tfZ$8Oa= z0I$LskPt$s55PkqW-XvpLPACI&dfJE-_CeuzJ3343}78Ad0as;hb$IyWG!lV)xtFm zu4{3_!c7ae7&e^lfsDLSn@=2HM9$GD4i1Do8gYNK5z62OSFVJT1r+Z>ZxdpJT_)XpC|MdX|jNg&tS)2 z^B9aqLU|jmNW|4AA5Y<(%>K-OhQ7`K@oC@8EsvS2LEUuRARlzx6u4jEQ|+BY8ICk}_o@16>tva>-Yw8u zsT+aVbiUx`XuYH`p&0tb}VsNGUt>1f1s&?;}l!sUox?M zD~iv@=&9tOKoy%zQJhVYC}C^X@_Z7n=1+l(wVoMg(<$xnrX8?d1PPC&U<7=#8oJju+I^JCJxCOaJ)by5{eZZ zpdo0ABt+|iajMYf5*Jv zGwui8;3Hb`3GMjIDgG6`_=Y}w4{~Z^+$J2sahwS5kSS&tM;a%&B5;bnROUO#X=-PP z)FQl%xQ^y+wCFhd10gM;&{nRinhemJx=|$6{tTjgJydK}p`CgtEy?PN0Bb{v9yI2x WD%pVseru`4`J+0*ZwqZCs(u6TW75q4 literal 0 HcmV?d00001 diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class new file mode 100644 index 0000000000000000000000000000000000000000..989d3657fc14a7668c5dea26242ac1b3d1159675 GIT binary patch literal 9481 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 literal 0 HcmV?d00001 diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class new file mode 100644 index 0000000000000000000000000000000000000000..cee33482d2d3c4859f58c54d286009c990fd41ff GIT binary patch literal 1258 zcmb7DYfsZq7=F$!belygUO+@aC|7|BBA_5RMv26+5jw^PzSwmqtXpYG*MXqlO^pA; z&tgJ|G5i33l<_@79VA{t(mv05PT$)(@7r(RznlV?gq}b*?#H2^Cr+zgAyo-|Li7t5 z5HKiUNWgFc4=^I^N8_{_6H*l`O~OM76AaU;v2O=fY1Q0ST^^{1rJA?T?ZcAkZmYgo z-7Rq6KPcC1i>qnRG6UOla|gSeA+)u^(09(=^S9MPtx~ZAwcvPGMO_rQY+7U-o3k9- zwS#$v@ZeCMA(HZnwBM4pU7o4!P?nroaA>DhWO4GQZwvi%v)Kqtt3ox_H655CVR$v) z;>&j3X`SzQ0XKNHO7)GE%{`N1>#pT^RomTONBDD+Es^bjuitBPe<(SnfuQDi&YO;kgw*rRIOU0xEQ8%=+ZfNyxXy>}ov}Zas zk*I5MXe<49%USBvQg$=L(D`pG$@7c0YdZDr(pZEx))=Ch?0W76v60;n9NE;39Fd+B zH1fX#U7WUYQR!t|sPGoYNYc1Qp<@jOaSpFw z5%1tN-VndVJG>_jlP8cs2nhF}h%#=ICWQ`qhoNjrxP#R{Kt}B4e}AAzopsNKHSy7pG$w zH*f|otHp%cb2f%olxa@Kq>ghs&TEMJ^L8cKuOX9jq@P)xue!_9UY)m`QpU3?OLNlm zt}ayVyv$6=E3Pl6Wu;=f&InD9+m7v@&@h;4(6(n*LsQl*NDZwy+mYw0S9s2hHCLvj zE$8N~@~q|AYF!sLDVQ2sCY+_JKQr%1tDwQ0a2)An%T}c#sT^qxMRJEP-X`Kz9gZo5 zO?Tw7!ll40SnpezvZ7)h{LXUA5lD*co+vw96-04C3Q@hn8u8b z*G$afB3a?>J)bNkY!#@4A4E#W>n1MYvWYkFrir)kwvKm9ybC&>)rs_F}Y9g}+afhXR_PD67^`Z>2$lAeY`sh+SZs=i&$lqqED$->XU@>e!}iTh15gq-LZ9v-OCTU(~M{3soE3N2)o^~oD{!fRQ!mn_z9EZXIv7$U{U-ESNw)$>Q==c zxF-I_b@3-|h`;cGSjR_VBj78ICNgvoPvR-^l;!*XG*X=1Kzn^g#_DYLki7(q)(sri zkzPm3sE*zZq&P;_p$oq5z3p)@YJDN+7~_2+w2G#C??StO#1i3-`WY&kN63MSViXzl b2T>c~N?;I=^V`N*Cx1B-{651q;<0}Ll{;eC literal 0 HcmV?d00001 diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class new file mode 100644 index 0000000000000000000000000000000000000000..7d28b036d1f9a9dff91b672b2da57207e81063d0 GIT binary patch literal 2243 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 literal 0 HcmV?d00001 diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class new file mode 100644 index 0000000000000000000000000000000000000000..da33f9db5ec675d32205141717bcc188171d44be GIT binary patch literal 1948 zcmb_dYf>9W5dKCIEQlrIEgTz1w(}4xU=xC!2aX-UIGD)BmIw*Xb6HJ^#qzFdcV!aa zAV+X6z;CL8s0vj%Kn{@8xJ^~`k7bbsCR_2`dRzx@ti20x@Rg6rKF z#tkJtP~t-kAEnU|t3Ot=StV{N@rj08Y4qTB8lPfL!@L?7x^O3rMchr}HGHPFEp_3Z zhGh+(YbXlnf%KnAzwFshWGIj=ZduPP)0LrFK4q8{=-F`G%3P)5%ODUKJ+&`7+Olw? z<~Ll|ajOF2u|Q|N)~GtJz>T7E`h2tDZA<6*rsY;m-wNs*()WMbYB;tuOGnFPwR{+z zqrc9Zj_ZWC1Rmx8n~Q&fI=&{5TJS1TAX9W)`JnNXXjZL_8Z`q&&$eo7mhY%_OPLBc z9VUN%DskgE$=!itqbjtO{qKAk%OV*62^2~ z#v3|b$3;eKO9vgJxS(SN4|P03NkyY=|MxHiF1Ak8yg(g@DV_^j9G^K4 zXS*5+^qnAF+1TPWkt8Ro5=kF3C(gw2%zG=x_d|xA6tV>)6UeY68-YA-s#N}Q#7Wg@ zOd@}l0Y^QiHg#IIq7n<2A3wW~Y*_xEdSzC{I=5i$I+q1wlUHi;G^wZm1+3E~iNbeR zWmxp8Rp|>{I?A>YIyJLKEic%NtxS6~s&X3}pQUZfkDsOCR$(Kul|!E%qBxm4r(x7a ztG;EkTRLnqNa6}#-VyL|M2eEs=ld*Fe?%iYhGRlCO*9G;`wG`rx%wGNegV_ihcHrm zNEn4ZB#ntZq>KY}tnZ_951R2Sv{VyaYMf}IdpB})jq)nGDEk;#M>qQUh!0?p-^&=n z+k`bmU~h6qE)IjYs8t^`f+M1t0-C@(oGbWw{>EWY5}>%oe}n`r6^2f{z#WC4iF8pd ze?e-OWAXq!>uN0QLvNyY=kU+S`~rhY+eBuduZjLb69YSk2UO9);0}h=rpP+fvhEV2 zM!b{EB1;5nT;d~A;+TZWcAlAn<<*Ed!>1_A(i+TflG#i#$LlQY9C0sFx5SKAP~ho2 zpPzBn_^>e%Rl{JW8Tu%2EqF3Z4^y0#=|7$^<5sOqMjT_rml)CT?jdU`G`y$8bT+|% O%IQ8He4m>VnE4BaYxR5p literal 0 HcmV?d00001 diff --git a/out/production/raspberryJuice/plugin.yml b/out/production/raspberryJuice/plugin.yml new file mode 100644 index 00000000..d1e03137 --- /dev/null +++ b/out/production/raspberryJuice/plugin.yml @@ -0,0 +1,8 @@ +author: [MinecraftDawn,Zhuowei] +database: false +description: Implementation of the Minecraft PI modding API +main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin +name: RaspberryJuice +startup: postworld +version: 1.14a +api-version: 1.13 \ No newline at end of file From 2122d0bb727d7c22c327ac77bbc6c5bdc9572fd7 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 31 Jul 2019 23:01:00 +0800 Subject: [PATCH 23/82] =?UTF-8?q?=E4=BF=AE=E6=94=B9plugin.yml=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/plugin.yml b/src/main/java/plugin.yml index d1e03137..7bae6baf 100644 --- a/src/main/java/plugin.yml +++ b/src/main/java/plugin.yml @@ -4,5 +4,5 @@ description: Implementation of the Minecraft PI modding API main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin name: RaspberryJuice startup: postworld -version: 1.14a +version: '1.14-0.2' api-version: 1.13 \ No newline at end of file From 5c2e5eec495921f039e4d67733025b7aa16714b1 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Thu, 1 Aug 2019 23:31:52 +0800 Subject: [PATCH 24/82] createExplosion --- .../raspberryJuice_jar/raspberryJuice.jar | Bin 24716 -> 24811 bytes out/production/raspberryJuice/plugin.yml | 2 +- .../raspberryjuice/RemoteSession.java | 31 +++++++++++------- .../api/python/original/mcpi/minecraft.py | 3 ++ 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/out/artifacts/raspberryJuice_jar/raspberryJuice.jar b/out/artifacts/raspberryJuice_jar/raspberryJuice.jar index e8f9485c41d0739dd2fc956a871ae14d5411d813..103405f3f316ea6d03e5e3e62ace81f41e1670cd 100644 GIT binary patch delta 14655 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 [id:int]""" From 5cf7636dc76ff5e8801be1b43844f83388b1349e Mon Sep 17 00:00:00 2001 From: MinecraftDawn <30753602+MinecraftDawn@users.noreply.github.com> Date: Sat, 3 Aug 2019 23:06:04 +0800 Subject: [PATCH 25/82] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4737db3f..0fafc155 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # RaspberryJuice -A Bukkit plugin which implements the Minecraft Pi Socket API. +一個Minecraft Bukkit插件,用來實現與Python連接,使用Python控制Minecraft Server ## Commands @@ -70,6 +70,7 @@ mvn package ## Version history + - 1.14 修改指令方式,從數字方塊ID改為方塊名稱。 - 1.11 - spawnEntity, setDirection, setRotation, setPitch - 1.10.1 - bug fixes - 1.10 - left, right, both hit clicks added to config.yml & fixed minor hit events bug From af7133b1e722eb430b3c038059feaaff43a063bf Mon Sep 17 00:00:00 2001 From: MinecraftDawn <30753602+MinecraftDawn@users.noreply.github.com> Date: Mon, 5 Aug 2019 15:38:00 +0800 Subject: [PATCH 26/82] =?UTF-8?q?=E4=BF=AE=E6=94=B9README.MD=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=E7=95=A5=E8=A6=BD=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 46 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 0fafc155..a11322e1 100644 --- a/README.md +++ b/README.md @@ -6,23 +6,47 @@ ### Commands supported - - world.get/setBlock +#### world + - world.getBlock - world.getBlockWithData - - world.setBlocks - - world.getPlayerIds - world.getBlocks - - chat.post - - events.clear - - events.block.hits - - player.getTile - - player.setTile + - world.setBlock + - world.setBlocks + - world.getHeight + - world.getPlayerEntityIds + - world.postToChat + - world.setSign + - world.setWallSign + - world.spawnEntity + - world.createExplosion + - world.getPlayerEntityId + - world.create + +#### player - player.getPos - player.setPos - - world.getHeight - - entity.getTile - - entity.setTile + - player.getTilePos + - player.setTilePos + - player.getDirection + - player.setDirection + - player.getRotation + - player.setRotation + - player.getPitch + - player.setPitch + +#### entity - entity.getPos - entity.setPos + - entity.getTilePos + - entity.setTilePos + - entity.getDirection + - entity.setDirection + - entity.getRotation + - entity.setRotation + - entity.getPitch + - entity.setPitch + - entity.getName + ### Commands that can't be supported From 5c5901746aadf2875558f68a00efc1898e69c9fb Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 7 Aug 2019 19:50:53 +0800 Subject: [PATCH 27/82] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E7=82=BAMaven=E6=9E=B6=E6=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/artifacts/RaspberryJuice_jar.xml | 2 +- .idea/compiler.xml | 2 + .idea/modules.xml | 2 - .../raspberryjuice/CustomBlockFace.class | Bin 487 -> 0 bytes .../raspberryjuice/HitClickType.class | Bin 1126 -> 0 bytes .../raspberryjuice/LocationType.class | Bin 1086 -> 0 bytes .../RaspberryJuicePlugin$1.class | Bin 863 -> 0 bytes .../RaspberryJuicePlugin$TickHandler.class | Bin 1745 -> 0 bytes .../raspberryjuice/RaspberryJuicePlugin.class | Bin 9481 -> 0 bytes .../raspberryjuice/RemoteSession$1.class | Bin 1258 -> 0 bytes .../RemoteSession$InputThread.class | Bin 2236 -> 0 bytes .../RemoteSession$OutputThread.class | Bin 2243 -> 0 bytes .../raspberryjuice/RemoteSession.class | Bin 23887 -> 0 bytes .../raspberryjuice/ServerListenerThread.class | Bin 1948 -> 0 bytes pom.xml | 65 ++++-------------- src/main/java/config.yml | 8 --- src/main/java/plugin.yml | 8 --- src/main/resources/plugin.yml | 5 +- 18 files changed, 19 insertions(+), 73 deletions(-) delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/HitClickType.class delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/LocationType.class delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$TickHandler.class delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$InputThread.class delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession.class delete mode 100644 out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class delete mode 100644 src/main/java/config.yml delete mode 100644 src/main/java/plugin.yml diff --git a/.idea/artifacts/RaspberryJuice_jar.xml b/.idea/artifacts/RaspberryJuice_jar.xml index 5cf20ae0..b2f227a3 100644 --- a/.idea/artifacts/RaspberryJuice_jar.xml +++ b/.idea/artifacts/RaspberryJuice_jar.xml @@ -1,6 +1,6 @@ - $PROJECT_DIR$/out/artifacts/RaspberryJuice_jar + $PROJECT_DIR$/target/artifacts/RaspberryJuice_jar diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b25fe5e0..b375b1ec 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -7,10 +7,12 @@ + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index e9119e4a..fb496126 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,8 +3,6 @@ - - \ No newline at end of file diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/CustomBlockFace.class deleted file mode 100644 index 22dd191322ce7580fbe504459bf1514125962ffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmb7>!A=4(5QhIQum~a|ayQ<<7^{glj0Z_LZRCLA-d*cbSawaf#mH0X$;5*X;6oXw zD+xqT_At|bX1>m3`uX+#0pJpyI!ZXGqFu!ygMXz`Wv&@Y-QI+uJjm`P!+xMrd21J; z)OR9GDAEqHNF)=XmDB5B*-TZ=a1o@^@YU32Pg1R>B8|Bg`6I#ld1h54`M~BTTihgB zG#`pc_8FS7G-DN~6OmXsdSE#31~ah~JaPEgXqCqOUXbaShju diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/HitClickType.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/HitClickType.class deleted file mode 100644 index 4a7ee43c34f607313816eefcc2181e0de92d2781..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1126 zcmb7D?{Csz5Pn`L6uORI;*>dm&FO$4h~g*6!bX@ZX(SOOA;u4-Rw$OTly+wOtCS_q zXf*rmA7#9^5XYilXp{GPchB8DcklJr?{7Z=lu!yoz_x@mG9r>9vJxWL;YTins6@^j zM?4N8&SgG?1eXO7PZ$KHe$ZyfE0*pQP6zJzqi&oIRI6XG)yYv$x9yXmYiN3*VK_C@ z&_1+Jj`T7^;ML)a1_cWH&31!9-0JKpuj?&_!kcAN1&>wJ)h7(abY|&bp*DV}Gei}` z(qFnGBHUJcCRs!;Yx6zBep(r-$7;dkU9}wBu=?f9vLqAASX0f8Y8yQLyoO+@BPx~n zH$OwLVpxW=%dqyJ@`srYjm{Yu)OEOJ^exqKZOY_Nb4RG6ne*W4Lh8EZjw;LX-ldz8 zT4UGN^aF!WCBAr#c|H~y*Z9&TWfbw0A-BvP$VlOtj61k1BZ`=eI6o4IF+?s$&Uw?q zXy(`=2FY}0p{HhVsA~?fe7-oPnyF4Ei8T5Q2;Zs)Rw*H5zanq}f#ZEw z@VCe!&rsOFZO>1mAr!Azgr8nO%|irthUa;IDuKe5-|i7*@j48 Nv!YvgNH!lH{Q*>=0rmg@ diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/LocationType.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/LocationType.class deleted file mode 100644 index e6f38600b04a35275e5ff2e74c3f0418271e6ccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1086 zcmb7C?{Csj6g`g?TDoowRCG9++7haS1dfz?woO|!PzkYxF319~=(h#w!;0c~e$VzyoKt+*nB^k>K zIZGT-mXYD-mV|8vxw+SA>xbPILq&J3Ksy_T-bc$m8yfCF^Nq=I-}3#_QD~c%rhBFl z*q+-xJ+^8T`?jSwy9Ygrl{R}#{jk+x(B3UdlR7b+(3&t*i=~Bw#eMI+#gNf$*Lo9< zDcP>kcj!inSlb^M_KNz*I59MbSJVl7+a1(Oizb=lwL3k-w>kY>Lv)QXN#*|KXGqm; z*A8|W^8b-PDD@b`U}#g->5e^cjUe=iNhorMTsNJ0a3eH?bvAlQbm6VPb`lj{D z=3U9gpRmH)qGFW~OIF2mR2a4wnE@4fXe#bvUBxn1RAjKiuyWOHo-#wybUc^DZx&0j za@zfoWd@Ys%XowK9b+=7#bAFQ>^f_$QKcDHY4C-{8W#uXBz<7Dz)K>Jh%|Dz0a7OG z5uJP~Q?M^cTtfIn7Q-#tQ;|<1d>*&w_#GsoTO}u!zan`Fk>eBB@OS7&ouROXLgc4z z5Q-~SAbCDknsQ;^F&@#A$(Q7Lp;h!!Ug1Wq$5KS pBV#G~gIvOtX6ZgtwW(p6f9lV&we*o)x{rdm_ diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin$1.class deleted file mode 100644 index 9942e3868b7581923c75ef7570dbe2b439f1983f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmbVK&2G~`5dJoC>?F7}lmcn_E7Xt#s#-;b9zYz35|WZMsENv<7dFl+*>tfZ$8Oa= z0I$LskPt$s55PkqW-XvpLPACI&dfJE-_CeuzJ3343}78Ad0as;hb$IyWG!lV)xtFm zu4{3_!c7ae7&e^lfsDLSn@=2HM9$GD4i1Do8gYNK5z62OSFVJT1r+Z>ZxdpJT_)XpC|MdX|jNg&tS)2 z^B9aqLU|jmNW|4AA5Y<(%>K-OhQ7`K@oC@8EsvS2LEUuRARlzx6u4jEQ|+BY8ICk}_o@16>tva>-Yw8u zsT+aVbiUx`XuYH`p&0tb}VsNGUt>1f1s&?;}l!sUox?M zD~iv@=&9tOKoy%zQJhVYC}C^X@_Z7n=1+l(wVoMg(<$xnrX8?d1PPC&U<7=#8oJju+I^JCJxCOaJ)by5{eZZ zpdo0ABt+|iajMYf5*Jv zGwui8;3Hb`3GMjIDgG6`_=Y}w4{~Z^+$J2sahwS5kSS&tM;a%&B5;bnROUO#X=-PP z)FQl%xQ^y+wCFhd10gM;&{nRinhemJx=|$6{tTjgJydK}p`CgtEy?PN0Bb{v9yI2x WD%pVseru`4`J+0*ZwqZCs(u6TW75q4 diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.class deleted file mode 100644 index 989d3657fc14a7668c5dea26242ac1b3d1159675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9481 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 diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$1.class deleted file mode 100644 index cee33482d2d3c4859f58c54d286009c990fd41ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1258 zcmb7DYfsZq7=F$!belygUO+@aC|7|BBA_5RMv26+5jw^PzSwmqtXpYG*MXqlO^pA; z&tgJ|G5i33l<_@79VA{t(mv05PT$)(@7r(RznlV?gq}b*?#H2^Cr+zgAyo-|Li7t5 z5HKiUNWgFc4=^I^N8_{_6H*l`O~OM76AaU;v2O=fY1Q0ST^^{1rJA?T?ZcAkZmYgo z-7Rq6KPcC1i>qnRG6UOla|gSeA+)u^(09(=^S9MPtx~ZAwcvPGMO_rQY+7U-o3k9- zwS#$v@ZeCMA(HZnwBM4pU7o4!P?nroaA>DhWO4GQZwvi%v)Kqtt3ox_H655CVR$v) z;>&j3X`SzQ0XKNHO7)GE%{`N1>#pT^RomTONBDD+Es^bjuitBPe<(SnfuQDi&YO;kgw*rRIOU0xEQ8%=+ZfNyxXy>}ov}Zas zk*I5MXe<49%USBvQg$=L(D`pG$@7c0YdZDr(pZEx))=Ch?0W76v60;n9NE;39Fd+B zH1fX#U7WUYQR!t|sPGoYNYc1Qp<@jOaSpFw z5%1tN-VndVJG>_jlP8cs2nhF}h%#=ICWQ`qhoNjrxP#R{Kt}B4e}AAzopsNKHSy7pG$w zH*f|otHp%cb2f%olxa@Kq>ghs&TEMJ^L8cKuOX9jq@P)xue!_9UY)m`QpU3?OLNlm zt}ayVyv$6=E3Pl6Wu;=f&InD9+m7v@&@h;4(6(n*LsQl*NDZwy+mYw0S9s2hHCLvj zE$8N~@~q|AYF!sLDVQ2sCY+_JKQr%1tDwQ0a2)An%T}c#sT^qxMRJEP-X`Kz9gZo5 zO?Tw7!ll40SnpezvZ7)h{LXUA5lD*co+vw96-04C3Q@hn8u8b z*G$afB3a?>J)bNkY!#@4A4E#W>n1MYvWYkFrir)kwvKm9ybC&>)rs_F}Y9g}+afhXR_PD67^`Z>2$lAeY`sh+SZs=i&$lqqED$->XU@>e!}iTh15gq-LZ9v-OCTU(~M{3soE3N2)o^~oD{!fRQ!mn_z9EZXIv7$U{U-ESNw)$>Q==c zxF-I_b@3-|h`;cGSjR_VBj78ICNgvoPvR-^l;!*XG*X=1Kzn^g#_DYLki7(q)(sri zkzPm3sE*zZq&P;_p$oq5z3p)@YJDN+7~_2+w2G#C??StO#1i3-`WY&kN63MSViXzl b2T>c~N?;I=^V`N*Cx1B-{651q;<0}Ll{;eC diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/RemoteSession$OutputThread.class deleted file mode 100644 index 7d28b036d1f9a9dff91b672b2da57207e81063d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2243 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 diff --git a/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class b/out/production/raspberryJuice/net/zhuoweizhang/raspberryjuice/ServerListenerThread.class deleted file mode 100644 index da33f9db5ec675d32205141717bcc188171d44be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1948 zcmb_dYf>9W5dKCIEQlrIEgTz1w(}4xU=xC!2aX-UIGD)BmIw*Xb6HJ^#qzFdcV!aa zAV+X6z;CL8s0vj%Kn{@8xJ^~`k7bbsCR_2`dRzx@ti20x@Rg6rKF z#tkJtP~t-kAEnU|t3Ot=StV{N@rj08Y4qTB8lPfL!@L?7x^O3rMchr}HGHPFEp_3Z zhGh+(YbXlnf%KnAzwFshWGIj=ZduPP)0LrFK4q8{=-F`G%3P)5%ODUKJ+&`7+Olw? z<~Ll|ajOF2u|Q|N)~GtJz>T7E`h2tDZA<6*rsY;m-wNs*()WMbYB;tuOGnFPwR{+z zqrc9Zj_ZWC1Rmx8n~Q&fI=&{5TJS1TAX9W)`JnNXXjZL_8Z`q&&$eo7mhY%_OPLBc z9VUN%DskgE$=!itqbjtO{qKAk%OV*62^2~ z#v3|b$3;eKO9vgJxS(SN4|P03NkyY=|MxHiF1Ak8yg(g@DV_^j9G^K4 zXS*5+^qnAF+1TPWkt8Ro5=kF3C(gw2%zG=x_d|xA6tV>)6UeY68-YA-s#N}Q#7Wg@ zOd@}l0Y^QiHg#IIq7n<2A3wW~Y*_xEdSzC{I=5i$I+q1wlUHi;G^wZm1+3E~iNbeR zWmxp8Rp|>{I?A>YIyJLKEic%NtxS6~s&X3}pQUZfkDsOCR$(Kul|!E%qBxm4r(x7a ztG;EkTRLnqNa6}#-VyL|M2eEs=ld*Fe?%iYhGRlCO*9G;`wG`rx%wGNegV_ihcHrm zNEn4ZB#ntZq>KY}tnZ_951R2Sv{VyaYMf}IdpB})jq)nGDEk;#M>qQUh!0?p-^&=n z+k`bmU~h6qE)IjYs8t^`f+M1t0-C@(oGbWw{>EWY5}>%oe}n`r6^2f{z#WC4iF8pd ze?e-OWAXq!>uN0QLvNyY=kU+S`~rhY+eBuduZjLb69YSk2UO9);0}h=rpP+fvhEV2 zM!b{EB1;5nT;d~A;+TZWcAlAn<<*Ed!>1_A(i+TflG#i#$LlQY9C0sFx5SKAP~ho2 zpPzBn_^>e%Rl{JW8Tu%2EqF3Z4^y0#=|7$^<5sOqMjT_rml)CT?jdU`G`y$8bT+|% O%IQ8He4m>VnE4BaYxR5p diff --git a/pom.xml b/pom.xml index fe1282ed..754b0d06 100644 --- a/pom.xml +++ b/pom.xml @@ -1,64 +1,25 @@ - + + 4.0.0 - net.zhuoweizhang - raspberryjuice - 1.11 - RaspberryJuice + + com.minecraft + RaspberryJuice + 1.0-SNAPSHOT + spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - - - src/main/resources - - mcpi/**/** - test/**/** - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.0.2 - - 1.6 - 1.6 - - - - - org.bukkit - bukkit - 1.12.2-R0.1-SNAPSHOT + org.spigotmc + spigot-api + 1.14-R0.1-SNAPSHOT provided - - - - info.cukes - cucumber-testng - 1.2.5 - test - - - info.cukes - cucumber-java - 1.2.5 - test - - - org.jmockit - jmockit - 1.23 - test - - + \ No newline at end of file diff --git a/src/main/java/config.yml b/src/main/java/config.yml deleted file mode 100644 index 46a97e03..00000000 --- a/src/main/java/config.yml +++ /dev/null @@ -1,8 +0,0 @@ -# default config.yml -port: 4711 - -# Determine whether locations are RELATIVE to the spawn point (default like pi) or ABSOLUTE -location: RELATIVE - -# Determine whether hit events are triggered by LEFT clicks, RIGHT clicks or BOTH -hitclick: RIGHT \ No newline at end of file diff --git a/src/main/java/plugin.yml b/src/main/java/plugin.yml deleted file mode 100644 index 7bae6baf..00000000 --- a/src/main/java/plugin.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: [MinecraftDawn,Zhuowei] -database: false -description: Implementation of the Minecraft PI modding API -main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin -name: RaspberryJuice -startup: postworld -version: '1.14-0.2' -api-version: 1.13 \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5a39cd27..7bae6baf 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,8 @@ -author: Zhuowei +author: [MinecraftDawn,Zhuowei] database: false description: Implementation of the Minecraft PI modding API main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin name: RaspberryJuice startup: postworld -version: '1.14-0.1' +version: '1.14-0.2' +api-version: 1.13 \ No newline at end of file From c255633a68f66d2c993905e2fc844c97857c5a6d Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 7 Aug 2019 19:54:17 +0800 Subject: [PATCH 28/82] =?UTF-8?q?=E7=A7=BB=E9=99=A4out=E8=B3=87=E6=96=99?= =?UTF-8?q?=E5=A4=BE=20=E6=96=B0=E5=A2=9Etarget=E8=B3=87=E6=96=99=E5=A4=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - .../raspberryJuice_jar/raspberryJuice.jar | Bin 24811 -> 0 bytes out/production/raspberryJuice/config.yml | 8 -------- out/production/raspberryJuice/plugin.yml | 8 -------- 4 files changed, 17 deletions(-) delete mode 100644 out/artifacts/raspberryJuice_jar/raspberryJuice.jar delete mode 100644 out/production/raspberryJuice/config.yml delete mode 100644 out/production/raspberryJuice/plugin.yml diff --git a/.gitignore b/.gitignore index 1ba2f1d1..90802186 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ ### Java template -target/ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* diff --git a/out/artifacts/raspberryJuice_jar/raspberryJuice.jar b/out/artifacts/raspberryJuice_jar/raspberryJuice.jar deleted file mode 100644 index 103405f3f316ea6d03e5e3e62ace81f41e1670cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24811 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%0AM@N2 z)|f$sEE?HU61=A)r8z_`T@vh7dv|4Z`aoY`4lY06W8jqXJicwep_WWLUXPF&Y9`ic zl0OMYXf*8h0}V_1Ywo74aSTP_0t|yE1}XwJo6)AGxEObi_Mb}Efd$bN%v6|GS#hIZ zP@4Bndlhtv0Jdv8ZF%QbqMxGASKjN_ijubYBF%01qD&r5xwv~gX8i-t^mY;Hxr`;{ zm_?yV<>;$lydtXLRzAyNv910U-@}NUz$pM~6?nW%A!Q~{2j=*&rB54fScqE*B(+Fm zZSH3=i@KwDj1k`VwjnFv=Px|J4knYjH^2o{JzKCT_Bb_J#6e~@- z%K-xL0m@kXMh#!L$OaKPNgEDDeH)I{(k@_e$*3>y6p2*vl0l&_uOFo!<1IgG?VPsw ztzOF_ti7*qBLg&B%UIz3lk}2SI)*w-;<%8D2mO|E2=H3fCsIKd!~0MU&i;2m_0+=X z=`|9cT2JC77sgkNR0v|VP0eI%%o;sEs|Rj1a?0z#l{&)Yw1QQB?OQndB_mUYz|_v< z(we!eL3E=vFpfi!v5D<{#aRANGBVCRtvp347&d)ZK7{B-Z!0 zIch?`aT+E~FX8LFHVa`@(=B9-r4g(x1LL2dwh&38-BZT1s&y z+0>sR4*R}=GA+m`*LDh7Mo!fsfpGFUS!uclNx4zS(s|R#g z)ZrhU_DViTsXyq;dFxqX6xK;MQi~A&P&6ipHz3JJ@iSwvMC|HW2dfg2;Hl3Cm>s>M4sQ-3reFSjpR3lh6|S#G#s z&U!{%qXS|81P_~E2=qLJ^pkqHuT7SWvqs4zs#wW9#|BBTJKsjjU0RJIeFoGHdJ`J< z(F#I6;5f+KkpWA@<1S)`=*XD3`nZhOt((Sw_%V^&Gm$D-Qdwh9qTGL%P7h$a%w3#n zi{SQS*BkHeB=++cb)%{Ww1cJjeSqrCLdeb z4BrJk%|e2n>semBU%rYB*jk0{ySn>UXhlS3WQcueZ^eNis~Zms!3sQLFYYc@cS>Tx zsZZ&wF8HEzg}_%W$EcY+Zsr9l7u2ow;Rm)SZyl#O_O`6*z;MeP3j@<(J<@fB@yWbp z{Npwh_J0*T^OW=RRXJx@rr^-Xy2HI?>vfc_V= z{heZcb7`;VzsbYB?)(28gjehQw_^YJw*M4J{HMfC>giugc!l-vCH{`t{d4}CgvV=k z>hGYsvN`;_5_JBt{{JIM^-s;43{0nG}Qi8hmZN+>-=l${Y{qxNCdv@33b3_d0*Io&3$L`={7VzsrN)N>?KQ z_kSw(cjw)oYB&7^e|?rR`2SP2e{wfmuinjV;o6w+I|_yVLy5oN2G_fb?v2;*_3rXJ d Date: Wed, 7 Aug 2019 21:41:27 +0800 Subject: [PATCH 29/82] sendTitle --- .idea/compiler.xml | 2 +- pom.xml | 12 ++++++++++++ .../raspberryjuice/RaspberryJuicePlugin.java | 6 +++--- .../zhuoweizhang/raspberryjuice/RemoteSession.java | 14 ++++++++++++-- .../{api/python/original/mcpi => }/__init__.py | 0 .../mcpi/{api/python/original/mcpi => }/block.py | 0 .../{api/python/original/mcpi => }/connection.py | 0 .../mcpi/{api/python/original/mcpi => }/entity.py | 0 .../mcpi/{api/python/original/mcpi => }/event.py | 0 .../{api/python/original/mcpi => }/minecraft.py | 9 +++++++-- .../mcpi/{api/python/original/mcpi => }/util.py | 0 .../mcpi/{api/python/original/mcpi => }/vec3.py | 0 12 files changed, 35 insertions(+), 8 deletions(-) rename src/main/resources/mcpi/{api/python/original/mcpi => }/__init__.py (100%) rename src/main/resources/mcpi/{api/python/original/mcpi => }/block.py (100%) rename src/main/resources/mcpi/{api/python/original/mcpi => }/connection.py (100%) rename src/main/resources/mcpi/{api/python/original/mcpi => }/entity.py (100%) rename src/main/resources/mcpi/{api/python/original/mcpi => }/event.py (100%) rename src/main/resources/mcpi/{api/python/original/mcpi => }/minecraft.py (96%) rename src/main/resources/mcpi/{api/python/original/mcpi => }/util.py (100%) rename src/main/resources/mcpi/{api/python/original/mcpi => }/vec3.py (100%) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b375b1ec..b531ed17 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -12,7 +12,7 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 754b0d06..dadd704d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,18 @@ com.minecraft RaspberryJuice 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 6 + 6 + + + + diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java index 8b839685..b65ba980 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java @@ -20,10 +20,10 @@ public class RaspberryJuicePlugin extends JavaPlugin implements Listener { public static final Set blockBreakDetectionTools = EnumSet.of( Material.DIAMOND_SWORD, -// Material.GOLDEN_SWORD, + Material.GOLDEN_SWORD, Material.IRON_SWORD, - Material.STONE_SWORD -// Material.WOODEN_SWORD + Material.STONE_SWORD, + Material.WOODEN_SWORD ); public ServerListenerThread serverThread; diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 3a3e1e79..c7a08035 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -351,6 +351,16 @@ protected void handleCommand(String c, String[] args) { Player currentPlayer = getCurrentPlayer(); send(currentPlayer.getLocation().getPitch()); + // player.sendTitle + } else if (c.equals("player.sendTitle")) { + Player currentPlayer = getCurrentPlayer(); + String title = args[0]; + String subTitle = args[1]; + Integer fadeIn = Integer.parseInt(args[2]); + Integer stay = Integer.parseInt(args[3]); + Integer fadeOut = Integer.parseInt(args[4]); + currentPlayer.sendTitle(title, subTitle, fadeIn, stay, fadeOut); + // world.getHeight } else if (c.equals("world.getHeight")) { send(world.getHighestBlockYAt(parseRelativeBlockLocation(args[0], "0", args[1])) - origin.getBlockY()); @@ -533,11 +543,11 @@ protected void handleCommand(String c, String[] args) { send(entity.getEntityId()); // world.explode - }else if(c.equals("world.createExplosion")){ + } else if (c.equals("world.createExplosion")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); Float power = Float.parseFloat(args[3]); - world.createExplosion(loc,power); + world.createExplosion(loc, power); // world.getEntityTypes } else if (c.equals("world.getEntityTypes")) { diff --git a/src/main/resources/mcpi/api/python/original/mcpi/__init__.py b/src/main/resources/mcpi/__init__.py similarity index 100% rename from src/main/resources/mcpi/api/python/original/mcpi/__init__.py rename to src/main/resources/mcpi/__init__.py diff --git a/src/main/resources/mcpi/api/python/original/mcpi/block.py b/src/main/resources/mcpi/block.py similarity index 100% rename from src/main/resources/mcpi/api/python/original/mcpi/block.py rename to src/main/resources/mcpi/block.py diff --git a/src/main/resources/mcpi/api/python/original/mcpi/connection.py b/src/main/resources/mcpi/connection.py similarity index 100% rename from src/main/resources/mcpi/api/python/original/mcpi/connection.py rename to src/main/resources/mcpi/connection.py diff --git a/src/main/resources/mcpi/api/python/original/mcpi/entity.py b/src/main/resources/mcpi/entity.py similarity index 100% rename from src/main/resources/mcpi/api/python/original/mcpi/entity.py rename to src/main/resources/mcpi/entity.py diff --git a/src/main/resources/mcpi/api/python/original/mcpi/event.py b/src/main/resources/mcpi/event.py similarity index 100% rename from src/main/resources/mcpi/api/python/original/mcpi/event.py rename to src/main/resources/mcpi/event.py diff --git a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py similarity index 96% rename from src/main/resources/mcpi/api/python/original/mcpi/minecraft.py rename to src/main/resources/mcpi/minecraft.py index e653ab0b..fae2caaf 100644 --- a/src/main/resources/mcpi/api/python/original/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -71,6 +71,9 @@ def getPitch(self, id): def setPitch(self, id, pitch): """設置玩家俯仰""" self.conn.send(self.pkg + b".setPitch", id, pitch) + + def sendTitle(self, id, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20): + self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) def setting(self, setting, status): """Set a player setting (setting, status). keys: autojump""" @@ -115,7 +118,9 @@ def getPitch(self): return CmdPositioner.getPitch(self, []) def setPitch(self, pitch): return CmdPositioner.setPitch(self, [], pitch) - + def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20): + return CmdPositioner.sendTitle(self, [], title, subTitle, fadeIn, stay, fadeOut) + class CmdCamera: def __init__(self, connection): self.conn = connection @@ -212,7 +217,7 @@ def postToChat(self, *msg): self.conn.send(b"chat.post", msg) # TODO:修改成一個py檔處理Sign - def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4=""): + def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", line2:str="", line3:str="", line4:str=""): minecraftSignsType = ["SPRUCE_SIGN","ACACIA_SIGN","BIRCH_SIGN","DARK_OAK_SIGN","JUNGLE_SIGN","OAK_SIGN"] # ["SPRUCE_WALL_SIGN","ACACIA_WALL_SIGN","BIRCH_WALL_SIGN","DARK_OAK_WALL_SIGN","JUNGLE_WALL_SIGN","OAK_WALL_SIGN"] diff --git a/src/main/resources/mcpi/api/python/original/mcpi/util.py b/src/main/resources/mcpi/util.py similarity index 100% rename from src/main/resources/mcpi/api/python/original/mcpi/util.py rename to src/main/resources/mcpi/util.py diff --git a/src/main/resources/mcpi/api/python/original/mcpi/vec3.py b/src/main/resources/mcpi/vec3.py similarity index 100% rename from src/main/resources/mcpi/api/python/original/mcpi/vec3.py rename to src/main/resources/mcpi/vec3.py From df32291a19636669a9de80256793c81e652203ef Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 7 Aug 2019 21:44:30 +0800 Subject: [PATCH 30/82] =?UTF-8?q?README.MD=E6=96=B0=E5=A2=9EsendTitle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a11322e1..5f681f7d 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ - player.setRotation - player.getPitch - player.setPitch + - player.sendTitle #### entity - entity.getPos @@ -46,6 +47,7 @@ - entity.getPitch - entity.setPitch - entity.getName + - entity.sendTitle ### Commands that can't be supported From 2caacc7497d5d1741d50fbdfd3dc1f95a5589e53 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Fri, 9 Aug 2019 21:53:36 +0800 Subject: [PATCH 31/82] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=87=BD=E5=BC=8F?= =?UTF-8?q?=E5=8F=83=E6=95=B8DataType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mcpi/minecraft.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index fae2caaf..c3629806 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -32,27 +32,27 @@ def getPos(self, id): s = self.conn.sendReceive(self.pkg + b".getPos", id) return Vec3(*list(map(float, s.split(",")))) - def setPos(self, id, *args): + def setPos(self, id, x:float, y:float, z:float): """Set entity position (entityId:int, x,y,z)""" - self.conn.send(self.pkg + b".setPos", id, args) + self.conn.send(self.pkg + b".setPos", id, x, y, z) def getTilePos(self, id): """Get entity tile position (entityId:int) => Vec3""" s = self.conn.sendReceive(self.pkg + b".getTile", id) return Vec3(*list(map(int, s.split(",")))) - def setTilePos(self, id, *args): + def setTilePos(self, id, x:int, y:int, z:int): """Set entity tile position (entityId:int) => Vec3""" - self.conn.send(self.pkg + b".setTile", id, intFloor(*args)) + self.conn.send(self.pkg + b".setTile", id, x, y, z) def getDirection(self, id): """取得玩家視線方向""" s = self.conn.sendReceive(self.pkg + b".getDirection", id) return Vec3(*list(s.split(","))) - def setDirection(self, id, *args): + def setDirection(self, id, x:float, y:float, z:float): """設置玩家視線方向""" - self.conn.send(self.pkg + b".setDirection", id, intFloor(*args)) + self.conn.send(self.pkg + b".setDirection", id, x, y, z) def getRotation(self, id): """取得玩家轉向""" @@ -100,16 +100,16 @@ def __init__(self, connection): def getPos(self): return CmdPositioner.getPos(self, []) - def setPos(self, *args): - return CmdPositioner.setPos(self, [], args) + def setPos(self, x:float, y:float, z:float): + return CmdPositioner.setPos(self, [], x, y, z) def getTilePos(self): return CmdPositioner.getTilePos(self, []) - def setTilePos(self, *args): - return CmdPositioner.setTilePos(self, [], args) + def setTilePos(self, x:int, y:int, z:int): + return CmdPositioner.setTilePos(self, [], x, y, z) def getDirection(self): return CmdPositioner.getDirection(self, []) - def setDirection(self, *args): - return CmdPositioner.setDirection(self, [], args) + def setDirection(self, x:float, y:float, z:float): + return CmdPositioner.setDirection(self, [], x, y, z) def getRotation(self): return CmdPositioner.getRotation(self, []) def setRotation(self, yaw): @@ -137,9 +137,9 @@ def setFollow(self, *args): """Set camera mode to follow an entity ([entityId])""" self.conn.send(b"camera.mode.setFollow", args) - def setPos(self, *args): + def setPos(self, x:float, y:float, z:float): """Set camera entity position (x,y,z)""" - self.conn.send(b"camera.setPos", args) + self.conn.send(b"camera.setPos", x, y, z) class CmdEvents: From 5110ff99160f1d26fb7c07fdae16f5dccc27e976 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sat, 10 Aug 2019 23:03:36 +0800 Subject: [PATCH 32/82] =?UTF-8?q?=E4=BF=AE=E6=94=B9Java=20RemoteSession.ja?= =?UTF-8?q?va=E6=9E=B6=E6=A7=8B=20=E5=B0=87Player=20Enitty=E6=8B=89?= =?UTF-8?q?=E5=87=BA=E4=BE=86=20=E6=96=B0=E5=A2=9E=E9=8C=AF=E8=AA=A4?= =?UTF-8?q?=E8=A8=8A=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../raspberryjuice/CustomBlockFace.java | 2 +- .../raspberryjuice/HitClickType.java | 2 +- .../raspberryjuice/LocationType.java | 2 +- .../raspberryjuice/RaspberryJuicePlugin.java | 2 +- .../raspberryjuice/RemoteSession.java | 249 ++---------------- .../raspberryjuice/ServerListenerThread.java | 2 +- .../raspberryjuice/cmd/CmdEntity.java | 104 ++++++++ .../raspberryjuice/cmd/CmdEvent.java | 4 + .../raspberryjuice/cmd/CmdPlayer.java | 148 +++++++++++ .../raspberryjuice/cmd/CmdWorld.java | 4 + src/main/resources/config.yml | 2 +- src/main/resources/plugin.yml | 4 +- 13 files changed, 295 insertions(+), 232 deletions(-) rename src/main/java/{net/zhuoweizhang => com/minecraftdawn}/raspberryjuice/CustomBlockFace.java (91%) rename src/main/java/{net/zhuoweizhang => com/minecraftdawn}/raspberryjuice/HitClickType.java (82%) rename src/main/java/{net/zhuoweizhang => com/minecraftdawn}/raspberryjuice/LocationType.java (82%) rename src/main/java/{net/zhuoweizhang => com/minecraftdawn}/raspberryjuice/RaspberryJuicePlugin.java (99%) rename src/main/java/{net/zhuoweizhang => com/minecraftdawn}/raspberryjuice/RemoteSession.java (69%) rename src/main/java/{net/zhuoweizhang => com/minecraftdawn}/raspberryjuice/ServerListenerThread.java (96%) create mode 100644 src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java create mode 100644 src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEvent.java create mode 100644 src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java create mode 100644 src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java diff --git a/pom.xml b/pom.xml index dadd704d..12efbafd 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.minecraft + com.minecraftdawn RaspberryJuice 1.0-SNAPSHOT diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/CustomBlockFace.java b/src/main/java/com/minecraftdawn/raspberryjuice/CustomBlockFace.java similarity index 91% rename from src/main/java/net/zhuoweizhang/raspberryjuice/CustomBlockFace.java rename to src/main/java/com/minecraftdawn/raspberryjuice/CustomBlockFace.java index 1764d669..30279d5d 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/CustomBlockFace.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/CustomBlockFace.java @@ -1,4 +1,4 @@ -package net.zhuoweizhang.raspberryjuice; +package com.minecraftdawn.raspberryjuice; import org.bukkit.Material; import org.bukkit.block.BlockFace; diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/HitClickType.java b/src/main/java/com/minecraftdawn/raspberryjuice/HitClickType.java similarity index 82% rename from src/main/java/net/zhuoweizhang/raspberryjuice/HitClickType.java rename to src/main/java/com/minecraftdawn/raspberryjuice/HitClickType.java index 53b064ad..ec6d8f84 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/HitClickType.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/HitClickType.java @@ -1,4 +1,4 @@ -package net.zhuoweizhang.raspberryjuice; +package com.minecraftdawn.raspberryjuice; /** * Config option to determine whether hit events are triggered by LEFT clicks, RIGHT clicks (like the Pi) or BOTH diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/LocationType.java b/src/main/java/com/minecraftdawn/raspberryjuice/LocationType.java similarity index 82% rename from src/main/java/net/zhuoweizhang/raspberryjuice/LocationType.java rename to src/main/java/com/minecraftdawn/raspberryjuice/LocationType.java index 373e4652..4f655b6e 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/LocationType.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/LocationType.java @@ -1,4 +1,4 @@ -package net.zhuoweizhang.raspberryjuice; +package com.minecraftdawn.raspberryjuice; /** * Config option to determine whether locations are relative to the spawn point (default like pi) or absolute diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java b/src/main/java/com/minecraftdawn/raspberryjuice/RaspberryJuicePlugin.java similarity index 99% rename from src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java rename to src/main/java/com/minecraftdawn/raspberryjuice/RaspberryJuicePlugin.java index b65ba980..91a7c2ad 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/RaspberryJuicePlugin.java @@ -1,4 +1,4 @@ -package net.zhuoweizhang.raspberryjuice; +package com.minecraftdawn.raspberryjuice; import org.bukkit.Bukkit; import org.bukkit.Material; diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java similarity index 69% rename from src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java rename to src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java index c7a08035..3125c907 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java @@ -1,5 +1,7 @@ -package net.zhuoweizhang.raspberryjuice; +package com.minecraftdawn.raspberryjuice; +import com.minecraftdawn.raspberryjuice.cmd.CmdEntity; +import com.minecraftdawn.raspberryjuice.cmd.CmdPlayer; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -151,8 +153,18 @@ protected void handleCommand(String c, String[] args) { // get the world World world = origin.getWorld(); + // 分割命令 + String[] cmd = c.split("[.]", 2); + + if (cmd[0].equals("player")) { + new CmdPlayer(this, cmd[1], args).execute(); + + } else if (cmd[0].equals("entity")) { + new CmdEntity(this, cmd[1], args).execute(); + } + // world.getBlock - if (c.equals("world.getBlock")) { + else if (c.equals("world.getBlock")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); send(world.getBlockAt(loc).getType().name()); @@ -265,230 +277,13 @@ protected void handleCommand(String c, String[] args) { } send(b.toString()); - // player.getTile - } else if (c.equals("player.getTile")) { - Player currentPlayer = getCurrentPlayer(); - send(blockLocationToRelative(currentPlayer.getLocation())); - - // player.setTile - } else if (c.equals("player.setTile")) { - String x = args[0], y = args[1], z = args[2]; - Player currentPlayer = getCurrentPlayer(); - //get players current location, so when they are moved we will use the same pitch and yaw (rotation) - Location loc = currentPlayer.getLocation(); - currentPlayer.teleport(parseRelativeBlockLocation(x, y, z, loc.getPitch(), loc.getYaw())); - - // player.getAbsPos - } else if (c.equals("player.getAbsPos")) { - Player currentPlayer = getCurrentPlayer(); - send(currentPlayer.getLocation()); - - // player.setAbsPos - } else if (c.equals("player.setAbsPos")) { - String x = args[0], y = args[1], z = args[2]; - Player currentPlayer = getCurrentPlayer(); - //get players current location, so when they are moved we will use the same pitch and yaw (rotation) - Location loc = currentPlayer.getLocation(); - loc.setX(Double.parseDouble(x)); - loc.setY(Double.parseDouble(y)); - loc.setZ(Double.parseDouble(z)); - currentPlayer.teleport(loc); - - // player.getPos - } else if (c.equals("player.getPos")) { - Player currentPlayer = getCurrentPlayer(); - send(locationToRelative(currentPlayer.getLocation())); - - // player.setPos - } else if (c.equals("player.setPos")) { - String x = args[0], y = args[1], z = args[2]; - Player currentPlayer = getCurrentPlayer(); - //get players current location, so when they are moved we will use the same pitch and yaw (rotation) - Location loc = currentPlayer.getLocation(); - currentPlayer.teleport(parseRelativeLocation(x, y, z, loc.getPitch(), loc.getYaw())); - - // player.setDirection - } else if (c.equals("player.setDirection")) { - Double x = Double.parseDouble(args[0]); - Double y = Double.parseDouble(args[1]); - Double z = Double.parseDouble(args[2]); - Player currentPlayer = getCurrentPlayer(); - Location loc = currentPlayer.getLocation(); - loc.setDirection(new Vector(x, y, z)); - currentPlayer.teleport(loc); - - // player.getDirection - } else if (c.equals("player.getDirection")) { - Player currentPlayer = getCurrentPlayer(); - send(currentPlayer.getLocation().getDirection().toString()); - - // player.setRotation - } else if (c.equals("player.setRotation")) { - Float yaw = Float.parseFloat(args[0]); - Player currentPlayer = getCurrentPlayer(); - Location loc = currentPlayer.getLocation(); - loc.setYaw(yaw); - currentPlayer.teleport(loc); - - // player.getRotation - } else if (c.equals("player.getRotation")) { - Player currentPlayer = getCurrentPlayer(); - float yaw = currentPlayer.getLocation().getYaw(); - // turn bukkit's 0 - -360 to positive numbers - if (yaw < 0) yaw = yaw * -1; - send(yaw); - - // player.setPitch - } else if (c.equals("player.setPitch")) { - Float pitch = Float.parseFloat(args[0]); - Player currentPlayer = getCurrentPlayer(); - Location loc = currentPlayer.getLocation(); - loc.setPitch(pitch); - currentPlayer.teleport(loc); - - // player.getPitch - } else if (c.equals("player.getPitch")) { - Player currentPlayer = getCurrentPlayer(); - send(currentPlayer.getLocation().getPitch()); - - // player.sendTitle - } else if (c.equals("player.sendTitle")) { - Player currentPlayer = getCurrentPlayer(); - String title = args[0]; - String subTitle = args[1]; - Integer fadeIn = Integer.parseInt(args[2]); - Integer stay = Integer.parseInt(args[3]); - Integer fadeOut = Integer.parseInt(args[4]); - currentPlayer.sendTitle(title, subTitle, fadeIn, stay, fadeOut); - - // world.getHeight + } else if (c.equals("world.getHeight")) { send(world.getHighestBlockYAt(parseRelativeBlockLocation(args[0], "0", args[1])) - origin.getBlockY()); - // entity.getTile - } else if (c.equals("entity.getTile")) { - //get entity based on id - Entity entity = plugin.getEntity(Integer.parseInt(args[0])); - if (entity != null) { - send(blockLocationToRelative(entity.getLocation())); - } else { - plugin.getLogger().info("Entity [" + args[0] + "] not found."); - send("Fail"); - } - - // entity.setTile - } else if (c.equals("entity.setTile")) { - String x = args[1], y = args[2], z = args[3]; - //get entity based on id - Entity entity = plugin.getEntity(Integer.parseInt(args[0])); - if (entity != null) { - //get entity's current location, so when they are moved we will use the same pitch and yaw (rotation) - Location loc = entity.getLocation(); - entity.teleport(parseRelativeBlockLocation(x, y, z, loc.getPitch(), loc.getYaw())); - } else { - plugin.getLogger().info("Entity [" + args[0] + "] not found."); - send("Fail"); - } - - // entity.getPos - } else if (c.equals("entity.getPos")) { - //get entity based on id - Entity entity = plugin.getEntity(Integer.parseInt(args[0])); - //Player entity = plugin.getEntity(Integer.parseInt(args[0])); - if (entity != null) { - send(locationToRelative(entity.getLocation())); - } else { - plugin.getLogger().info("Entity [" + args[0] + "] not found."); - send("Fail"); - } - - // entity.setPos - } else if (c.equals("entity.setPos")) { - String x = args[1], y = args[2], z = args[3]; - //get entity based on id - Entity entity = plugin.getEntity(Integer.parseInt(args[0])); - if (entity != null) { - //get entity's current location, so when they are moved we will use the same pitch and yaw (rotation) - Location loc = entity.getLocation(); - entity.teleport(parseRelativeLocation(x, y, z, loc.getPitch(), loc.getYaw())); - } else { - plugin.getLogger().info("Entity [" + args[0] + "] not found."); - send("Fail"); - } - - // entity.setDirection - } else if (c.equals("entity.setDirection")) { - Entity entity = plugin.getEntity(Integer.parseInt(args[0])); - if (entity != null) { - Double x = Double.parseDouble(args[1]); - Double y = Double.parseDouble(args[2]); - Double z = Double.parseDouble(args[3]); - Location loc = entity.getLocation(); - loc.setDirection(new Vector(x, y, z)); - entity.teleport(loc); - } else { - plugin.getLogger().info("Entity [" + args[0] + "] not found."); - } - - // entity.getDirection - } else if (c.equals("entity.getDirection")) { - //get entity based on id - Entity entity = plugin.getEntity(Integer.parseInt(args[0])); - if (entity != null) { - send(entity.getLocation().getDirection().toString()); - } else { - plugin.getLogger().info("Entity [" + args[0] + "] not found."); - send("Fail"); - } - - // entity.setRotation - } else if (c.equals("entity.setRotation")) { - Entity entity = plugin.getEntity(Integer.parseInt(args[0])); - if (entity != null) { - Float yaw = Float.parseFloat(args[1]); - Location loc = entity.getLocation(); - loc.setYaw(yaw); - entity.teleport(loc); - } else { - plugin.getLogger().info("Entity [" + args[0] + "] not found."); - } - - // entity.getRotation - } else if (c.equals("entity.getRotation")) { - //get entity based on id - Entity entity = plugin.getEntity(Integer.parseInt(args[0])); - if (entity != null) { - send(entity.getLocation().getYaw()); - } else { - plugin.getLogger().info("Entity [" + args[0] + "] not found."); - send("Fail"); - } - - // entity.setPitch - } else if (c.equals("entity.setPitch")) { - Entity entity = plugin.getEntity(Integer.parseInt(args[0])); - if (entity != null) { - Float pitch = Float.parseFloat(args[1]); - Location loc = entity.getLocation(); - loc.setPitch(pitch); - entity.teleport(loc); - } else { - plugin.getLogger().info("Entity [" + args[0] + "] not found."); - } - - // entity.getPitch - } else if (c.equals("entity.getPitch")) { - //get entity based on id - Entity entity = plugin.getEntity(Integer.parseInt(args[0])); - if (entity != null) { - send(entity.getLocation().getPitch()); - } else { - plugin.getLogger().info("Entity [" + args[0] + "] not found."); - send("Fail"); - } - - // world.setSign - } else if (c.equals("world.setSign")) { + } + // world.setSign + else if (c.equals("world.setSign")) { Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); Block thisBlock = world.getBlockAt(loc); //blockType should be 68 for wall sign or 63 for standing sign @@ -642,6 +437,10 @@ private void updateBlock(Block thisBlock, String blockType, byte blockData) { // gets the current player public Player getCurrentPlayer() { + if (!serverHasPlayer()) { + send("Fail,There are no players in the server."); + return null; + } Player player = attachedPlayer; // if the player hasnt already been retreived for this session, go and get it. if (player == null) { @@ -651,6 +450,10 @@ public Player getCurrentPlayer() { return player; } + private boolean serverHasPlayer() { + return !Bukkit.getOnlinePlayers().isEmpty(); + } + public Location parseRelativeBlockLocation(String xstr, String ystr, String zstr) { int x = (int) Double.parseDouble(xstr); int y = (int) Double.parseDouble(ystr); diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/ServerListenerThread.java b/src/main/java/com/minecraftdawn/raspberryjuice/ServerListenerThread.java similarity index 96% rename from src/main/java/net/zhuoweizhang/raspberryjuice/ServerListenerThread.java rename to src/main/java/com/minecraftdawn/raspberryjuice/ServerListenerThread.java index b7cbb9f5..49cf53a0 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/ServerListenerThread.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/ServerListenerThread.java @@ -1,4 +1,4 @@ -package net.zhuoweizhang.raspberryjuice; +package com.minecraftdawn.raspberryjuice; import java.io.*; import java.net.*; diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java new file mode 100644 index 00000000..75293b70 --- /dev/null +++ b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java @@ -0,0 +1,104 @@ +package com.minecraftdawn.raspberryjuice.cmd; + +import com.minecraftdawn.raspberryjuice.RaspberryJuicePlugin; +import com.minecraftdawn.raspberryjuice.RemoteSession; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.util.Vector; + +public class CmdEntity { + private String preFix = "entity."; + private String command; + private String[] args; + private RemoteSession session; + private RaspberryJuicePlugin plugin; + + public CmdEntity(RemoteSession session, String cmd, String[] args) { + this.session = session; + this.command = cmd; + this.args = args; + + this.plugin = session.plugin; + } + + public void execute() { + + //get entity based on id + Entity entity = plugin.getEntity(Integer.parseInt(args[0])); + + if (entity == null) { + plugin.getLogger().info("Entity [" + args[0] + "] not found."); + session.send("Fail,This entity identity not exist"); + } + + // entity.getTile + if (command.equals("getTile")) { + + session.send(session.blockLocationToRelative(entity.getLocation())); + + // entity.setTile + } else if (command.equals("setTile")) { + String x = args[1], y = args[2], z = args[3]; + Location loc = entity.getLocation(); + + entity.teleport(session.parseRelativeBlockLocation(x, y, z, loc.getPitch(), loc.getYaw())); + + // entity.getPos + } else if (command.equals("getPos")) { + + session.send(session.locationToRelative(entity.getLocation())); + + // entity.setPos + } else if (command.equals("setPos")) { + String x = args[1], y = args[2], z = args[3]; + Location loc = entity.getLocation(); + + entity.teleport(session.parseRelativeLocation(x, y, z, loc.getPitch(), loc.getYaw())); + + // entity.setDirection + } else if (command.equals("setDirection")) { + Double x = Double.parseDouble(args[1]); + Double y = Double.parseDouble(args[2]); + Double z = Double.parseDouble(args[3]); + Location loc = entity.getLocation(); + + loc.setDirection(new Vector(x, y, z)); + entity.teleport(loc); + + // entity.getDirection + } else if (command.equals("getDirection")) { + + session.send(entity.getLocation().getDirection().toString()); + + // entity.setRotation + } else if (command.equals("setRotation")) { + Float yaw = Float.parseFloat(args[1]); + Location loc = entity.getLocation(); + + loc.setYaw(yaw); + entity.teleport(loc); + + // entity.getRotation + } else if (command.equals("getRotation")) { + + session.send(entity.getLocation().getYaw()); + + // entity.setPitch + } else if (command.equals("setPitch")) { + Float pitch = Float.parseFloat(args[1]); + Location loc = entity.getLocation(); + + loc.setPitch(pitch); + entity.teleport(loc); + + // entity.getPitch + } else if (command.equals("getPitch")) { + session.send(entity.getLocation().getPitch()); + + } else { + session.plugin.getLogger().warning(preFix + command + " is not supported."); + session.send("Fail," + preFix + command + " is not supported."); + } + + } +} diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEvent.java b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEvent.java new file mode 100644 index 00000000..5d03fa47 --- /dev/null +++ b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEvent.java @@ -0,0 +1,4 @@ +package com.minecraftdawn.raspberryjuice.cmd; + +public class CmdEvent { +} diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java new file mode 100644 index 00000000..6c11a48d --- /dev/null +++ b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java @@ -0,0 +1,148 @@ +package com.minecraftdawn.raspberryjuice.cmd; + +import com.minecraftdawn.raspberryjuice.RemoteSession; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.util.Vector; + +public class CmdPlayer { + private String preFix = "player."; + private String command; + private String[] args; + private RemoteSession session; + + public CmdPlayer(RemoteSession session, String cmd, String[] args) { + this.session = session; + this.command = cmd; + this.args = args; + + } + + private boolean serverHasPlayer() { + return !Bukkit.getOnlinePlayers().isEmpty(); + } + + private Player getCurrentPlayer() { + if (!serverHasPlayer()) { + session.send("Fail,There are no players in the server."); + return null; + } else { + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + return player; + } + } + return null; + } + + public void execute() { + + Player currentPlayer = getCurrentPlayer(); + if (currentPlayer == null) { + session.send("Fail,There are no players in the server."); + return; + } + + // player.getTile + if (command.equals("getTile")) { + + session.send(session.blockLocationToRelative(currentPlayer.getLocation())); + + // player.setTile + } else if (command.equals("setTile")) { + String x = args[0], y = args[1], z = args[2]; + + //get players current location, so when they are moved we will use the same pitch and yaw (rotation) + Location loc = currentPlayer.getLocation(); + currentPlayer.teleport(session.parseRelativeBlockLocation(x, y, z, loc.getPitch(), loc.getYaw())); + + // player.getAbsPos + } else if (command.equals("getAbsPos")) { + + session.send(currentPlayer.getLocation()); + + // player.setAbsPos + } else if (command.equals("setAbsPos")) { + String x = args[0], y = args[1], z = args[2]; + + //get players current location, so when they are moved we will use the same pitch and yaw (rotation) + Location loc = currentPlayer.getLocation(); + loc.setX(Double.parseDouble(x)); + loc.setY(Double.parseDouble(y)); + loc.setZ(Double.parseDouble(z)); + currentPlayer.teleport(loc); + + // player.getPos + } else if (command.equals("getPos")) { + + session.send(session.locationToRelative(currentPlayer.getLocation())); + + // player.setPos + } else if (command.equals("setPos")) { + String x = args[0], y = args[1], z = args[2]; + + //get players current location, so when they are moved we will use the same pitch and yaw (rotation) + Location loc = currentPlayer.getLocation(); + currentPlayer.teleport(session.parseRelativeLocation(x, y, z, loc.getPitch(), loc.getYaw())); + + // player.setDirection + } else if (command.equals("setDirection")) { + Double x = Double.parseDouble(args[0]); + Double y = Double.parseDouble(args[1]); + Double z = Double.parseDouble(args[2]); + + Location loc = currentPlayer.getLocation(); + loc.setDirection(new Vector(x, y, z)); + currentPlayer.teleport(loc); + + // player.getDirection + } else if (command.equals("getDirection")) { + + session.send(currentPlayer.getLocation().getDirection().toString()); + + // player.setRotation + } else if (command.equals("setRotation")) { + Float yaw = Float.parseFloat(args[0]); + + Location loc = currentPlayer.getLocation(); + loc.setYaw(yaw); + currentPlayer.teleport(loc); + + // player.getRotation + } else if (command.equals("getRotation")) { + + float yaw = currentPlayer.getLocation().getYaw(); + // turn bukkit's 0 - -360 to positive numbers + if (yaw < 0) yaw = yaw * -1; + session.send(yaw); + + // player.setPitch + } else if (command.equals("setPitch")) { + Float pitch = Float.parseFloat(args[0]); + + Location loc = currentPlayer.getLocation(); + loc.setPitch(pitch); + currentPlayer.teleport(loc); + + // player.getPitch + } else if (command.equals("getPitch")) { + + session.send(currentPlayer.getLocation().getPitch()); + + // player.sendTitle + } else if (command.equals("sendTitle")) { + + String title = args[0]; + String subTitle = args[1]; + Integer fadeIn = Integer.parseInt(args[2]); + Integer stay = Integer.parseInt(args[3]); + Integer fadeOut = Integer.parseInt(args[4]); + currentPlayer.sendTitle(title, subTitle, fadeIn, stay, fadeOut); + + } else { + session.plugin.getLogger().warning(preFix + command + " is not supported."); + session.send("Fail," + preFix + command + " is not supported."); + } + } + +} diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java new file mode 100644 index 00000000..d800d8b6 --- /dev/null +++ b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java @@ -0,0 +1,4 @@ +package com.minecraftdawn.raspberryjuice.cmd; + +public class CmdWorld { +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 46a97e03..d8bb4a97 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -2,7 +2,7 @@ port: 4711 # Determine whether locations are RELATIVE to the spawn point (default like pi) or ABSOLUTE -location: RELATIVE +location: ABSOLUTE # Determine whether hit events are triggered by LEFT clicks, RIGHT clicks or BOTH hitclick: RIGHT \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 7bae6baf..6fabb24e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,8 +1,8 @@ author: [MinecraftDawn,Zhuowei] database: false description: Implementation of the Minecraft PI modding API -main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin +main: com.minecraftdawn.raspberryjuice.RaspberryJuicePlugin name: RaspberryJuice startup: postworld -version: '1.14-0.2' +version: '1.14-0.3' api-version: 1.13 \ No newline at end of file From eaae9595214c6372270d32fe9a76532e84979627 Mon Sep 17 00:00:00 2001 From: MinecraftDawn <30753602+MinecraftDawn@users.noreply.github.com> Date: Sat, 10 Aug 2019 23:26:19 +0800 Subject: [PATCH 33/82] Update README.md remove entity.sendTitle --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 5f681f7d..341626b3 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,6 @@ - entity.getPitch - entity.setPitch - entity.getName - - entity.sendTitle ### Commands that can't be supported From 969d27ce7f1e43d84c86f8a0a08fdcbbe37b1518 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 11 Aug 2019 00:05:23 +0800 Subject: [PATCH 34/82] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=8C=AF=E8=AA=A4?= =?UTF-8?q?=E8=A8=8A=E6=81=AF=20=E7=A7=BB=E9=99=A4entity.sendTitle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mcpi/connection.py | 5 +++-- src/main/resources/mcpi/minecraft.py | 5 +---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/resources/mcpi/connection.py b/src/main/resources/mcpi/connection.py index ab078e88..dd337bd4 100644 --- a/src/main/resources/mcpi/connection.py +++ b/src/main/resources/mcpi/connection.py @@ -53,8 +53,9 @@ def _send(self, s): def receive(self): """Receives data. Note that the trailing newline '\n' is trimmed""" s = self.socket.makefile("r").readline().rstrip("\n") - if s == Connection.RequestFailed: - raise RequestError("%s failed"%self.lastSent.strip()) + checkFail = s.split(",") + if checkFail[0] == Connection.RequestFailed: + raise RequestError("%s failed! Cause: %s" % (self.lastSent.strip(),checkFail[-1])) return s def sendReceive(self, *data): diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index c3629806..de0fbdf2 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -72,9 +72,6 @@ def setPitch(self, id, pitch): """設置玩家俯仰""" self.conn.send(self.pkg + b".setPitch", id, pitch) - def sendTitle(self, id, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20): - self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) - def setting(self, setting, status): """Set a player setting (setting, status). keys: autojump""" self.conn.send(self.pkg + b".setting", setting, 1 if bool(status) else 0) @@ -119,7 +116,7 @@ def getPitch(self): def setPitch(self, pitch): return CmdPositioner.setPitch(self, [], pitch) def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20): - return CmdPositioner.sendTitle(self, [], title, subTitle, fadeIn, stay, fadeOut) + self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) class CmdCamera: def __init__(self, connection): From 94f1d01a56c2b9efc28a700dcb37da67c50f327c Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 11 Aug 2019 22:11:27 +0800 Subject: [PATCH 35/82] =?UTF-8?q?=E5=B0=87RemoteSession=E7=9A=84world?= =?UTF-8?q?=E7=9B=B8=E9=97=9C=E5=8A=9F=E8=83=BD=E7=A7=BB=E5=8B=95=E8=87=B3?= =?UTF-8?q?CmdWorld=20=E4=B8=A6=E7=A7=BB=E9=99=A4getBlockWithData=E5=8A=9F?= =?UTF-8?q?=E8=83=BD(1.13=E5=BE=8C=E6=B2=92=E6=9C=89Data)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../raspberryjuice/RemoteSession.java | 150 +---------- .../raspberryjuice/cmd/CmdEntity.java | 11 + .../raspberryjuice/cmd/CmdPlayer.java | 1 - .../raspberryjuice/cmd/CmdWorld.java | 234 ++++++++++++++++++ 4 files changed, 249 insertions(+), 147 deletions(-) diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java b/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java index 3125c907..52701eba 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java @@ -2,6 +2,7 @@ import com.minecraftdawn.raspberryjuice.cmd.CmdEntity; import com.minecraftdawn.raspberryjuice.cmd.CmdPlayer; +import com.minecraftdawn.raspberryjuice.cmd.CmdWorld; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -161,73 +162,9 @@ protected void handleCommand(String c, String[] args) { } else if (cmd[0].equals("entity")) { new CmdEntity(this, cmd[1], args).execute(); - } - - // world.getBlock - else if (c.equals("world.getBlock")) { - Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - send(world.getBlockAt(loc).getType().name()); - - // world.getBlocks - } else if (c.equals("world.getBlocks")) { - Location loc1 = parseRelativeBlockLocation(args[0], args[1], args[2]); - Location loc2 = parseRelativeBlockLocation(args[3], args[4], args[5]); - send(getBlocks(loc1, loc2)); - - // world.getBlockWithData - } else if (c.equals("world.getBlockWithData")) { - Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - send(world.getBlockAt(loc).getType().getId() + "," + world.getBlockAt(loc).getData()); - - // world.setBlock - } else if (c.equals("world.setBlock")) { - Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - updateBlock(world, loc, args[3], (args.length > 4 ? Byte.parseByte(args[4]) : (byte) 0)); - - // world.setBlocks - } else if (c.equals("world.setBlocks")) { - Location loc1 = parseRelativeBlockLocation(args[0], args[1], args[2]); - Location loc2 = parseRelativeBlockLocation(args[3], args[4], args[5]); - String blockType = args[6]; - byte data = args.length > 7 ? Byte.parseByte(args[7]) : (byte) 0; - setCuboid(loc1, loc2, blockType, data); - - // world.getPlayerIds - } else if (c.equals("world.getPlayerIds")) { - StringBuilder bdr = new StringBuilder(); - Collection players = Bukkit.getOnlinePlayers(); - if (players.size() > 0) { - for (Player p : players) { - bdr.append(p.getEntityId()); - bdr.append("|"); - } - bdr.deleteCharAt(bdr.length() - 1); - send(bdr.toString()); - } else { - send("Fail"); - } - // world.getPlayerId - } else if (c.equals("world.getPlayerId")) { - Player p = plugin.getNamedPlayer(args[0]); - if (p != null) { - send(p.getEntityId()); - } else { - plugin.getLogger().info("Player [" + args[0] + "] not found."); - send("Fail"); - } - // entity.getListName - } else if (c.equals("entity.getName")) { - Entity e = plugin.getEntity(Integer.parseInt(args[0])); - if (e == null) { - plugin.getLogger().info("Player (or Entity) [" + args[0] + "] not found in entity.getName."); - } else if (e instanceof Player) { - Player p = (Player) e; - //sending list name because plugin.getNamedPlayer() uses list name - send(p.getPlayerListName()); - } else if (e != null) { - send(e.getName()); - } + } else if(cmd[0].equals("world")){ + new CmdWorld(this, world, cmd[1], args).execute(); // chat.post } else if (c.equals("chat.post")) { @@ -278,85 +215,6 @@ else if (c.equals("world.getBlock")) { send(b.toString()); - } else if (c.equals("world.getHeight")) { - send(world.getHighestBlockYAt(parseRelativeBlockLocation(args[0], "0", args[1])) - origin.getBlockY()); - - } - // world.setSign - else if (c.equals("world.setSign")) { - Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - Block thisBlock = world.getBlockAt(loc); - //blockType should be 68 for wall sign or 63 for standing sign -// int blockType = Integer.parseInt(args[3]); - //facing direction for wall sign : 2=north, 3=south, 4=west, 5=east - //rotation 0 - to 15 for standing sign : 0=south, 4=west, 8=north, 12=east -// byte blockData = Byte.parseByte(args[4]); -// if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { - - thisBlock.setType(Material.valueOf(args[3])); - - org.bukkit.block.data.type.Sign s = (org.bukkit.block.data.type.Sign) thisBlock.getBlockData(); - s.setRotation(BlockFace.valueOf(args[4])); - thisBlock.setBlockData(s); - - BlockState signState = thisBlock.getState(); - - if (signState instanceof Sign) { - Sign sign = (Sign) signState; - - for (int i = 5; i - 5 < 4 && i < args.length; i++) { - sign.setLine(i - 5, args[i]); - } - sign.update(); - } - - - } else if (c.equals("world.setWallSign")) { - Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - Block thisBlock = world.getBlockAt(loc); - thisBlock.setType(Material.valueOf(args[3])); - - org.bukkit.block.data.type.WallSign s = (org.bukkit.block.data.type.WallSign) thisBlock.getBlockData(); - s.setFacing(BlockFace.valueOf(args[4])); - thisBlock.setBlockData(s); - - BlockState signState = thisBlock.getState(); - - if (signState instanceof Sign) { - Sign sign = (Sign) signState; - - for (int i = 5; i - 5 < 4 && i < args.length; i++) { - sign.setLine(i - 5, args[i]); - } - sign.update(); - } - - // world.spawnEntity - } else if (c.equals("world.spawnEntity")) { - Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - Entity entity = world.spawnEntity(loc, EntityType.fromId(Integer.parseInt(args[3]))); - send(entity.getEntityId()); - - // world.explode - } else if (c.equals("world.createExplosion")) { - Location loc = parseRelativeBlockLocation(args[0], args[1], args[2]); - Float power = Float.parseFloat(args[3]); - - world.createExplosion(loc, power); - - // world.getEntityTypes - } else if (c.equals("world.getEntityTypes")) { - StringBuilder bdr = new StringBuilder(); - for (EntityType entityType : EntityType.values()) { - if (entityType.isSpawnable() && entityType.getTypeId() >= 0) { - bdr.append(entityType.getTypeId()); - bdr.append(","); - bdr.append(entityType.toString()); - bdr.append("|"); - } - } - send(bdr.toString()); - // not a command which is supported } else { plugin.getLogger().warning(c + " is not supported."); @@ -371,7 +229,7 @@ else if (c.equals("world.setSign")) { } } - // create a cuboid of lots of blocks + // create a cuboid of lots of blocks private void setCuboid(Location pos1, Location pos2, String blockType, byte data) { int minX, maxX, minY, maxY, minZ, maxZ; World world = pos1.getWorld(); diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java index 75293b70..4f8b2d37 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java @@ -4,6 +4,7 @@ import com.minecraftdawn.raspberryjuice.RemoteSession; import org.bukkit.Location; import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; import org.bukkit.util.Vector; public class CmdEntity { @@ -95,6 +96,16 @@ public void execute() { } else if (command.equals("getPitch")) { session.send(entity.getLocation().getPitch()); + // entity.getListName + } else if (command.equals("entity.getName")) { + if (entity instanceof Player) { + Player p = (Player) entity; + //sending list name because plugin.getNamedPlayer() uses list name + session.send(p.getPlayerListName()); + } else { + session.send(entity.getName()); + } + } else { session.plugin.getLogger().warning(preFix + command + " is not supported."); session.send("Fail," + preFix + command + " is not supported."); diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java index 6c11a48d..bac6c05e 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java @@ -16,7 +16,6 @@ public CmdPlayer(RemoteSession session, String cmd, String[] args) { this.session = session; this.command = cmd; this.args = args; - } private boolean serverHasPlayer() { diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java index d800d8b6..df6f4a31 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java @@ -1,4 +1,238 @@ package com.minecraftdawn.raspberryjuice.cmd; +import com.minecraftdawn.raspberryjuice.RaspberryJuicePlugin; +import com.minecraftdawn.raspberryjuice.RemoteSession; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.block.Sign; +import org.bukkit.block.data.type.WallSign; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +import java.util.Collection; + public class CmdWorld { + private String preFix = "world."; + private String command; + private String[] args; + private RemoteSession session; + private RaspberryJuicePlugin plugin; + private World world; + + public CmdWorld(RemoteSession session, World world, String cmd, String[] args) { + this.session = session; + this.command = cmd; + this.args = args; + this.world = world; + + this.plugin = session.plugin; + } + + public void execute() { + + // world.getBlock + if (command.equals("getBlock")) { + Location loc = session.parseRelativeBlockLocation(args[0], args[1], args[2]); + + session.send(world.getBlockAt(loc).getType().name()); + + // world.getBlocks + } else if (command.equals("getBlocks")) { + Location loc1 = session.parseRelativeBlockLocation(args[0], args[1], args[2]); + Location loc2 = session.parseRelativeBlockLocation(args[3], args[4], args[5]); + + session.send(getBlocks(loc1, loc2)); + + // world.setBlock + } else if (command.equals("setBlock")) { + Location loc = session.parseRelativeBlockLocation(args[0], args[1], args[2]); + updateBlock(world, loc, args[3]); + + // world.setBlocks + } else if (command.equals("setBlocks")) { + Location loc1 = session.parseRelativeBlockLocation(args[0], args[1], args[2]); + Location loc2 = session.parseRelativeBlockLocation(args[3], args[4], args[5]); + String blockType = args[6]; + byte data = args.length > 7 ? Byte.parseByte(args[7]) : (byte) 0; + setCuboid(loc1, loc2, blockType); + + // world.getPlayerIds + } else if (command.equals("getPlayerIds")) { + StringBuilder bdr = new StringBuilder(); + Collection players = Bukkit.getOnlinePlayers(); + if (players.size() > 0) { + for (Player p : players) { + bdr.append(p.getEntityId()); + bdr.append("|"); + } + bdr.deleteCharAt(bdr.length() - 1); + session.send(bdr.toString()); + } else { + session.send("Fail"); + } + + // world.getPlayerId + } else if (command.equals("getPlayerId")) { + Player p = plugin.getNamedPlayer(args[0]); + if (p != null) { + session.send(p.getEntityId()); + } else { + plugin.getLogger().info("Player [" + args[0] + "] not found."); + session.send("Fail"); + } + + // TODO + } else if (command.equals("getHeight")) { +// session.send(world.getHighestBlockYAt(session.parseRelativeBlockLocation(args[0], "0", args[1])) - origin.getBlockY()); + + } + // world.setSign + else if (command.equals("setSign")) { + Location loc = session.parseRelativeBlockLocation(args[0], args[1], args[2]); + Block thisBlock = world.getBlockAt(loc); + //blockType should be 68 for wall sign or 63 for standing sign +// int blockType = Integer.parseInt(args[3]); + //facing direction for wall sign : 2=north, 3=south, 4=west, 5=east + //rotation 0 - to 15 for standing sign : 0=south, 4=west, 8=north, 12=east +// byte blockData = Byte.parseByte(args[4]); +// if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { + + thisBlock.setType(Material.valueOf(args[3])); + + org.bukkit.block.data.type.Sign s = (org.bukkit.block.data.type.Sign) thisBlock.getBlockData(); + s.setRotation(BlockFace.valueOf(args[4])); + thisBlock.setBlockData(s); + + BlockState signState = thisBlock.getState(); + + if (signState instanceof Sign) { + Sign sign = (Sign) signState; + + for (int i = 5; i - 5 < 4 && i < args.length; i++) { + sign.setLine(i - 5, args[i]); + } + sign.update(); + } + + + } else if (command.equals("setWallSign")) { + Location loc = session.parseRelativeBlockLocation(args[0], args[1], args[2]); + Block thisBlock = world.getBlockAt(loc); + thisBlock.setType(Material.valueOf(args[3])); + + WallSign s = (WallSign) thisBlock.getBlockData(); + s.setFacing(BlockFace.valueOf(args[4])); + thisBlock.setBlockData(s); + + BlockState signState = thisBlock.getState(); + + if (signState instanceof Sign) { + Sign sign = (Sign) signState; + + for (int i = 5; i - 5 < 4 && i < args.length; i++) { + sign.setLine(i - 5, args[i]); + } + sign.update(); + } + + // world.spawnEntity + } else if (command.equals("spawnEntity")) { + Location loc = session.parseRelativeBlockLocation(args[0], args[1], args[2]); + Entity entity = world.spawnEntity(loc, EntityType.fromId(Integer.parseInt(args[3]))); + session.send(entity.getEntityId()); + + // world.explode + } else if (command.equals("createExplosion")) { + Location loc = session.parseRelativeBlockLocation(args[0], args[1], args[2]); + Float power = Float.parseFloat(args[3]); + + world.createExplosion(loc, power); + + // world.getEntityTypes + } else if (command.equals("getEntityTypes")) { + StringBuilder bdr = new StringBuilder(); + for (EntityType entityType : EntityType.values()) { + if (entityType.isSpawnable() && entityType.getTypeId() >= 0) { + bdr.append(entityType.getTypeId()); + bdr.append(","); + bdr.append(entityType.toString()); + bdr.append("|"); + } + } + session.send(bdr.toString()); + + } else { + session.plugin.getLogger().warning(preFix + command + " is not supported."); + session.send("Fail," + preFix + command + " is not supported."); + } + } + + // create a cuboid of lots of blocks + private void setCuboid(Location pos1, Location pos2, String blockType) { + int minX, maxX, minY, maxY, minZ, maxZ; + World world = pos1.getWorld(); + minX = pos1.getBlockX() < pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); + maxX = pos1.getBlockX() >= pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); + minY = pos1.getBlockY() < pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); + maxY = pos1.getBlockY() >= pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); + minZ = pos1.getBlockZ() < pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); + maxZ = pos1.getBlockZ() >= pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); + + for (int x = minX; x <= maxX; ++x) { + for (int z = minZ; z <= maxZ; ++z) { + for (int y = minY; y <= maxY; ++y) { + updateBlock(world, x, y, z, blockType); + } + } + } + } + + // get a cuboid of lots of blocks + private String getBlocks(Location pos1, Location pos2) { + StringBuilder blockData = new StringBuilder(); + + int minX, maxX, minY, maxY, minZ, maxZ; + World world = pos1.getWorld(); + minX = pos1.getBlockX() < pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); + maxX = pos1.getBlockX() >= pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); + minY = pos1.getBlockY() < pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); + maxY = pos1.getBlockY() >= pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); + minZ = pos1.getBlockZ() < pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); + maxZ = pos1.getBlockZ() >= pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); + + for (int y = minY; y <= maxY; ++y) { + for (int x = minX; x <= maxX; ++x) { + for (int z = minZ; z <= maxZ; ++z) { + blockData.append(world.getBlockAt(x, y, z).getType().name() + ","); + } + } + } + + return blockData.substring(0, blockData.length() > 0 ? blockData.length() - 1 : 0); // We don't want last comma + } + + // updates a block + private void updateBlock(World world, Location loc, String blockType) { + Block thisBlock = world.getBlockAt(loc); + updateBlock(thisBlock, blockType); + } + + private void updateBlock(World world, int x, int y, int z, String blockType) { + Block thisBlock = world.getBlockAt(x, y, z); + updateBlock(thisBlock, blockType); + } + + private void updateBlock(Block thisBlock, String blockType) { + // check to see if the block is different - otherwise leave it + blockType = blockType.toUpperCase(); + if ((thisBlock.getType() != Material.valueOf(blockType))) { + thisBlock.setType(Material.valueOf(blockType.toUpperCase())); + } + } } From 153b4b2881f5f938a8b5f9b3ec0719f502a12ad6 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 11 Aug 2019 22:11:39 +0800 Subject: [PATCH 36/82] =?UTF-8?q?=E7=A7=BB=E9=99=A4getBlockWithData?= =?UTF-8?q?=E5=8A=9F=E8=83=BD(1.13=E5=BE=8C=E6=B2=92=E6=9C=89Data)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mcpi/minecraft.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index de0fbdf2..ce6db332 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -175,11 +175,6 @@ def getBlock(self, x:int, y:int, z:int) -> str: """Get block (x,y,z) => id:int""" return self.conn.sendReceive(b"world.getBlock", x, y, z) - def getBlockWithData(self, x:int, y:int, z:int) -> Block: - """Get block with data (x,y,z) => Block""" - ans = self.conn.sendReceive(b"world.getBlockWithData", x, y, z) - return Block(*list(map(int, ans.split(",")))) - def getBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int): """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" return self.conn.sendReceive(b"world.getBlocks", x1, y1, z1, x2, y2, z2) From d6b01fd66dd9f9a07e52a66a0364527c2f92cf68 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 11 Aug 2019 22:59:41 +0800 Subject: [PATCH 37/82] =?UTF-8?q?=E5=B0=87setBlock/setBlocks=E7=9A=84Data?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=20=E9=87=8D=E6=96=B0=E8=A8=AD=E5=AE=9AgetHei?= =?UTF-8?q?ght?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/minecraftdawn/raspberryjuice/RemoteSession.java | 8 +------- .../com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java | 9 +++++---- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java b/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java index 52701eba..27819bdb 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java @@ -6,19 +6,13 @@ import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.block.BlockState; -import org.bukkit.block.Sign; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.util.Vector; import java.io.*; import java.net.Socket; import java.util.ArrayDeque; -import java.util.Collection; public class RemoteSession { @@ -163,7 +157,7 @@ protected void handleCommand(String c, String[] args) { } else if (cmd[0].equals("entity")) { new CmdEntity(this, cmd[1], args).execute(); - } else if(cmd[0].equals("world")){ + } else if (cmd[0].equals("world")) { new CmdWorld(this, world, cmd[1], args).execute(); // chat.post diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java index df6f4a31..f5fae948 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java @@ -52,6 +52,7 @@ public void execute() { // world.setBlock } else if (command.equals("setBlock")) { Location loc = session.parseRelativeBlockLocation(args[0], args[1], args[2]); + updateBlock(world, loc, args[3]); // world.setBlocks @@ -59,7 +60,7 @@ public void execute() { Location loc1 = session.parseRelativeBlockLocation(args[0], args[1], args[2]); Location loc2 = session.parseRelativeBlockLocation(args[3], args[4], args[5]); String blockType = args[6]; - byte data = args.length > 7 ? Byte.parseByte(args[7]) : (byte) 0; + setCuboid(loc1, loc2, blockType); // world.getPlayerIds @@ -74,7 +75,7 @@ public void execute() { bdr.deleteCharAt(bdr.length() - 1); session.send(bdr.toString()); } else { - session.send("Fail"); + session.send("Fail," + "There are no players in the server."); } // world.getPlayerId @@ -84,12 +85,12 @@ public void execute() { session.send(p.getEntityId()); } else { plugin.getLogger().info("Player [" + args[0] + "] not found."); - session.send("Fail"); + session.send("Fail," + "T he player not exist"); } // TODO } else if (command.equals("getHeight")) { -// session.send(world.getHighestBlockYAt(session.parseRelativeBlockLocation(args[0], "0", args[1])) - origin.getBlockY()); + session.send(world.getHighestBlockYAt(session.parseRelativeBlockLocation(args[0], "0", args[1]))); } // world.setSign From 8ef701ef7f6ee5019bf21a8c3b6675334af54931 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 11 Aug 2019 23:00:49 +0800 Subject: [PATCH 38/82] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A8=BB=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java index f5fae948..346683d2 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java +++ b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java @@ -88,7 +88,7 @@ public void execute() { session.send("Fail," + "T he player not exist"); } - // TODO + // world.getHeight } else if (command.equals("getHeight")) { session.send(world.getHighestBlockYAt(session.parseRelativeBlockLocation(args[0], "0", args[1]))); @@ -97,12 +97,6 @@ public void execute() { else if (command.equals("setSign")) { Location loc = session.parseRelativeBlockLocation(args[0], args[1], args[2]); Block thisBlock = world.getBlockAt(loc); - //blockType should be 68 for wall sign or 63 for standing sign -// int blockType = Integer.parseInt(args[3]); - //facing direction for wall sign : 2=north, 3=south, 4=west, 5=east - //rotation 0 - to 15 for standing sign : 0=south, 4=west, 8=north, 12=east -// byte blockData = Byte.parseByte(args[4]); -// if ((thisBlock.getType().getId() != blockType) || (thisBlock.getData() != blockData)) { thisBlock.setType(Material.valueOf(args[3])); From 08cc470a8093d9180929f894081341b488e19955 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Mon, 12 Aug 2019 22:01:02 +0800 Subject: [PATCH 39/82] =?UTF-8?q?=E4=BF=AE=E6=94=B9README.md=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0Method=E7=94=A8=E6=B3=95=20=E6=96=B0=E5=A2=9Eminecraft?= =?UTF-8?q?.py=E7=9A=84=E5=9B=9E=E5=82=B3=E5=9E=8B=E6=85=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 57 ++++++++++++++++++++++------ src/main/resources/mcpi/minecraft.py | 44 ++++++++++----------- 2 files changed, 67 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index 341626b3..c05fdd6e 100644 --- a/README.md +++ b/README.md @@ -7,45 +7,84 @@ ### Commands supported #### world - - world.getBlock - - world.getBlockWithData - - world.getBlocks - - world.setBlock - - world.setBlocks + - world.getBlock(x:int, y:int, z:int) -> str + - Get the block of the input position + + - world.getBlocks(x1:int, y1:int, z1:int, x2:int, y2:int, z2:int) -> list + - Get the blocks of the input position range + + - world.setBlock(x:int, y:int, z:int, block:str) -> None: + - Set the block of the input position + + - world.setBlocks(x1:int, y1:int, z1:int, x2:int, y2:int, z2:int, block) -> None: + - Set the blocks of the input position range + - world.getHeight + - world.getPlayerEntityIds + - world.postToChat + - world.setSign + - world.setWallSign + - world.spawnEntity + - world.createExplosion + - world.getPlayerEntityId + - world.create + --- + #### player - player.getPos + - player.setPos + - player.getTilePos + - player.setTilePos + - player.getDirection + - player.setDirection + - player.getRotation + - player.setRotation + - player.getPitch + - player.setPitch + - player.sendTitle + --- + #### entity - entity.getPos + - entity.setPos + - entity.getTilePos + - entity.setTilePos + - entity.getDirection + - entity.setDirection + - entity.getRotation + - entity.setRotation + - entity.getPitch + - entity.setPitch + - entity.getName @@ -77,18 +116,12 @@ Modify config.yml: - location: RELATIVE - determine whether locations are RELATIVE to the spawn point (default like pi) or ABSOLUTE - hitclick: RIGHT - determine whether hit events are triggered by LEFT clicks, RIGHT clicks or BOTH -## Libraries - -To use the extra features an modded version of the java and python libraries that were originally supplied by Mojang with the Pi is required, [github.com/zhuowei/RaspberryJuice/tree/master/src/main/resources/mcpi](https://github.com/zhuowei/RaspberryJuice/tree/master/src/main/resources/mcpi). - -You only need the modded libraries to use the extra features, the original libraries supplied with Minecraft Pi edition still work, you just wont be able to use the extra features - ## Build To build RaspberryJuice, [download and install Maven](https://maven.apache.org/install.html), clone the repository, run `mvn package': ``` -git clone https://github.com/zhuowei/RaspberryJuice +https://github.com/MinecraftDawn/RaspberryJuice.git cd RaspberryJuice mvn package ``` diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index ce6db332..b647e0ad 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -27,48 +27,48 @@ def __init__(self, connection, packagePrefix): self.conn = connection self.pkg = packagePrefix - def getPos(self, id): + def getPos(self, id) -> Vec3: """Get entity position (entityId:int) => Vec3""" s = self.conn.sendReceive(self.pkg + b".getPos", id) return Vec3(*list(map(float, s.split(",")))) - def setPos(self, id, x:float, y:float, z:float): + def setPos(self, id, x:float, y:float, z:float) -> None: """Set entity position (entityId:int, x,y,z)""" self.conn.send(self.pkg + b".setPos", id, x, y, z) - def getTilePos(self, id): + def getTilePos(self, id) -> Vec3: """Get entity tile position (entityId:int) => Vec3""" s = self.conn.sendReceive(self.pkg + b".getTile", id) return Vec3(*list(map(int, s.split(",")))) - def setTilePos(self, id, x:int, y:int, z:int): + def setTilePos(self, id, x:int, y:int, z:int) -> None: """Set entity tile position (entityId:int) => Vec3""" self.conn.send(self.pkg + b".setTile", id, x, y, z) - def getDirection(self, id): + def getDirection(self, id) -> Vec3: """取得玩家視線方向""" s = self.conn.sendReceive(self.pkg + b".getDirection", id) return Vec3(*list(s.split(","))) - def setDirection(self, id, x:float, y:float, z:float): + def setDirection(self, id, x:float, y:float, z:float) -> None: """設置玩家視線方向""" self.conn.send(self.pkg + b".setDirection", id, x, y, z) - def getRotation(self, id): + def getRotation(self, id) -> float: """取得玩家轉向""" s = self.conn.sendReceive(self.pkg + b".getRotation", id) return float(s) - def setRotation(self, id, yaw): + def setRotation(self, id, yaw) -> float: """設置玩家轉向""" self.conn.send(self.pkg + b".setRotation", id, yaw) - def getPitch(self, id): + def getPitch(self, id) -> float: """取得玩家俯仰""" s = self.conn.sendReceive(self.pkg + b".getPitch",id) return float(s) - def setPitch(self, id, pitch): + def setPitch(self, id, pitch) -> None: """設置玩家俯仰""" self.conn.send(self.pkg + b".setPitch", id, pitch) @@ -122,19 +122,19 @@ class CmdCamera: def __init__(self, connection): self.conn = connection - def setNormal(self, *args): + def setNormal(self, *args) -> None: """Set camera mode to normal Minecraft view ([entityId])""" self.conn.send(b"camera.mode.setNormal", args) - def setFixed(self): + def setFixed(self) -> None: """Set camera mode to fixed view""" self.conn.send(b"camera.mode.setFixed") - def setFollow(self, *args): + def setFollow(self, *args) -> None: """Set camera mode to follow an entity ([entityId])""" self.conn.send(b"camera.mode.setFollow", args) - def setPos(self, x:float, y:float, z:float): + def setPos(self, x:float, y:float, z:float) -> None: """Set camera entity position (x,y,z)""" self.conn.send(b"camera.setPos", x, y, z) @@ -175,7 +175,7 @@ def getBlock(self, x:int, y:int, z:int) -> str: """Get block (x,y,z) => id:int""" return self.conn.sendReceive(b"world.getBlock", x, y, z) - def getBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int): + def getBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int) -> list: """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" return self.conn.sendReceive(b"world.getBlocks", x1, y1, z1, x2, y2, z2) @@ -183,7 +183,7 @@ def setBlock(self, x:int, y:int, z:int, block:str) -> None: """Set block (x,y,z,id,[data])""" self.conn.send(b"world.setBlock", x, y, z, block) - def setBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int, block): + def setBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int, block) -> None: """Set a cuboid of blocks (x1,y1,z1,x2,y2,z2,id,[data])""" self.conn.send(b"world.setBlocks", x1, y1, z1, x2, y2, z2, block) @@ -204,12 +204,12 @@ def getPlayerEntityIds(self) -> list: # """Restore the world state to the checkpoint""" # self.conn.send(b"world.checkpoint.restore") - def postToChat(self, *msg): + def postToChat(self, *msg) -> None: """Post a message to the game chat""" self.conn.send(b"chat.post", msg) # TODO:修改成一個py檔處理Sign - def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", line2:str="", line3:str="", line4:str=""): + def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", line2:str="", line3:str="", line4:str="") -> None: minecraftSignsType = ["SPRUCE_SIGN","ACACIA_SIGN","BIRCH_SIGN","DARK_OAK_SIGN","JUNGLE_SIGN","OAK_SIGN"] # ["SPRUCE_WALL_SIGN","ACACIA_WALL_SIGN","BIRCH_WALL_SIGN","DARK_OAK_WALL_SIGN","JUNGLE_WALL_SIGN","OAK_WALL_SIGN"] @@ -245,7 +245,7 @@ def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") self.conn.send(b"world.setSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) - def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4=""): + def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4="") -> None: minecraftSignsType = ["SPRUCE_WALL_SIGN","ACACIA_WALL_SIGN","BIRCH_WALL_SIGN","DARK_OAK_WALL_SIGN","JUNGLE_WALL_SIGN","OAK_WALL_SIGN"] minecraftSignsDir = {0:'SOUTH', @@ -267,14 +267,14 @@ def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",l if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") self.conn.send(b"world.setWallSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) - def spawnEntity(self, x:int, y:int, z:int, entityID:int): + def spawnEntity(self, x:int, y:int, z:int, entityID:int) -> int: """Spawn entity (x,y,z,id,[data])""" return int(self.conn.sendReceive(b"world.spawnEntity", x, y, z, entityID)) - def createExplosion(self, x:int, y:int, z:int, power:int=4): + def createExplosion(self, x:int, y:int, z:int, power:int=4) -> None: self.conn.send(b"world.createExplosion", x, y, z, power) - def getPlayerEntityId(self, name:str): + def getPlayerEntityId(self, name:str) -> int: """Get the entity id of the named player => [id:int]""" return int(self.conn.sendReceive(b"world.getPlayerId", name)) From 38bd68d608acf58a0cf84fe8148911c76e032c89 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Tue, 13 Aug 2019 20:45:07 +0800 Subject: [PATCH 40/82] =?UTF-8?q?=E4=BF=AE=E6=94=B9README.md=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E9=A0=88=E5=8A=A0=E5=85=A5=E7=9A=84=E5=8F=83=E6=95=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 62 +++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index c05fdd6e..87cc9ab0 100644 --- a/README.md +++ b/README.md @@ -19,73 +19,73 @@ - world.setBlocks(x1:int, y1:int, z1:int, x2:int, y2:int, z2:int, block) -> None: - Set the blocks of the input position range - - world.getHeight + - world.getHeight(x:int, z:int) -> int: - - world.getPlayerEntityIds + - world.getPlayerEntityIds() -> list: - - world.postToChat + - world.postToChat(*msg) -> None: - - world.setSign + - world.setSign(x:int, y:int, z:int, signType:str, signDir:int, line1:str="", line2:str="", line3:str="", line4:str="") -> None: - - world.setWallSign + - world.setWallSign(x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4="") -> None: - - world.spawnEntity + - world.spawnEntity(x:int, y:int, z:int, entityID:int) -> int: - - world.createExplosion + - world.createExplosion(x:int, y:int, z:int, power:int=4) -> None: - - world.getPlayerEntityId + - world.getPlayerEntityId(name:str) -> int: - - world.create + - world.create(address = "localhost", port = 4711): --- #### player - - player.getPos + - player.getPos() -> Vec3: - - player.setPos + - player.setPos(x:float, y:float, z:float) -> None: - - player.getTilePos + - player.getTilePos() -> Vec3: - - player.setTilePos + - player.setTilePos(x:int, y:int, z:int) -> None: - - player.getDirection + - player.getDirection() -> Vec3: - - player.setDirection + - player.setDirection(x:float, y:float, z:float) -> None: - - player.getRotation + - player.getRotation() -> float: - - player.setRotation + - player.setRotation(yaw) -> None: - - player.getPitch + - player.getPitch() -> float: - - player.setPitch + - player.setPitch(pitch) -> None: - - player.sendTitle + - player.sendTitle(title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: --- #### entity - - entity.getPos + - entity.getPos(ID) -> Vec3: - - entity.setPos + - entity.setPos(ID, x:float, y:float, z:float) -> None: - - entity.getTilePos + - entity.getTilePos(ID) -> Vec3: - - entity.setTilePos + - entity.setTilePos(ID, x:int, y:int, z:int) -> None: - - entity.getDirection + - entity.getDirection(ID) -> Vec3: - - entity.setDirection + - entity.setDirection(ID, x:float, y:float, z:float) -> None: - - entity.getRotation + - entity.getRotation(ID) -> float: - - entity.setRotation + - entity.setRotation(ID, yaw) -> float: - - entity.getPitch + - entity.getPitch(ID) -> float: - - entity.setPitch + - entity.setPitch(ID, pitch) -> None: - - entity.getName + - entity.getName(ID): ### Commands that can't be supported From 7ac496a76340acf34e2015d0291d06d5030626bd Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Tue, 13 Aug 2019 20:45:44 +0800 Subject: [PATCH 41/82] =?UTF-8?q?=E5=B0=87=E6=96=B9=E6=B3=95=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E5=9B=9E=E5=82=B3=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mcpi/minecraft.py | 66 ++++++++++++++-------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index b647e0ad..996a3225 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -27,50 +27,50 @@ def __init__(self, connection, packagePrefix): self.conn = connection self.pkg = packagePrefix - def getPos(self, id) -> Vec3: + def getPos(self, ID) -> Vec3: """Get entity position (entityId:int) => Vec3""" - s = self.conn.sendReceive(self.pkg + b".getPos", id) + s = self.conn.sendReceive(self.pkg + b".getPos", ID) return Vec3(*list(map(float, s.split(",")))) - def setPos(self, id, x:float, y:float, z:float) -> None: + def setPos(self, ID, x:float, y:float, z:float) -> None: """Set entity position (entityId:int, x,y,z)""" - self.conn.send(self.pkg + b".setPos", id, x, y, z) + self.conn.send(self.pkg + b".setPos", ID, x, y, z) - def getTilePos(self, id) -> Vec3: + def getTilePos(self, ID) -> Vec3: """Get entity tile position (entityId:int) => Vec3""" - s = self.conn.sendReceive(self.pkg + b".getTile", id) + s = self.conn.sendReceive(self.pkg + b".getTile", ID) return Vec3(*list(map(int, s.split(",")))) - def setTilePos(self, id, x:int, y:int, z:int) -> None: + def setTilePos(self, ID, x:int, y:int, z:int) -> None: """Set entity tile position (entityId:int) => Vec3""" - self.conn.send(self.pkg + b".setTile", id, x, y, z) + self.conn.send(self.pkg + b".setTile", ID, x, y, z) - def getDirection(self, id) -> Vec3: + def getDirection(self, ID) -> Vec3: """取得玩家視線方向""" s = self.conn.sendReceive(self.pkg + b".getDirection", id) return Vec3(*list(s.split(","))) - def setDirection(self, id, x:float, y:float, z:float) -> None: + def setDirection(self, ID, x:float, y:float, z:float) -> None: """設置玩家視線方向""" - self.conn.send(self.pkg + b".setDirection", id, x, y, z) + self.conn.send(self.pkg + b".setDirection", ID, x, y, z) - def getRotation(self, id) -> float: + def getRotation(self, ID) -> float: """取得玩家轉向""" - s = self.conn.sendReceive(self.pkg + b".getRotation", id) + s = self.conn.sendReceive(self.pkg + b".getRotation", ID) return float(s) - def setRotation(self, id, yaw) -> float: + def setRotation(self, ID, yaw) -> float: """設置玩家轉向""" - self.conn.send(self.pkg + b".setRotation", id, yaw) + self.conn.send(self.pkg + b".setRotation", ID, yaw) - def getPitch(self, id) -> float: + def getPitch(self, ID) -> float: """取得玩家俯仰""" - s = self.conn.sendReceive(self.pkg + b".getPitch",id) + s = self.conn.sendReceive(self.pkg + b".getPitch", ID) return float(s) - def setPitch(self, id, pitch) -> None: + def setPitch(self, ID, pitch) -> None: """設置玩家俯仰""" - self.conn.send(self.pkg + b".setPitch", id, pitch) + self.conn.send(self.pkg + b".setPitch", ID, pitch) def setting(self, setting, status): """Set a player setting (setting, status). keys: autojump""" @@ -82,11 +82,11 @@ class CmdEntity(CmdPositioner): def __init__(self, connection): CmdPositioner.__init__(self, connection, b"entity") - def getName(self, id): + def getName(self, ID): """Get the list name of the player with entity id => [name:str] Also can be used to find name of entity if entity is not a player.""" - return self.conn.sendReceive(b"entity.getName", id) + return self.conn.sendReceive(b"entity.getName", ID) class CmdPlayer(CmdPositioner): @@ -95,27 +95,27 @@ def __init__(self, connection): CmdPositioner.__init__(self, connection, b"player") self.conn = connection - def getPos(self): + def getPos(self) -> Vec3: return CmdPositioner.getPos(self, []) - def setPos(self, x:float, y:float, z:float): + def setPos(self, x:float, y:float, z:float) -> None: return CmdPositioner.setPos(self, [], x, y, z) - def getTilePos(self): + def getTilePos(self) -> Vec3: return CmdPositioner.getTilePos(self, []) - def setTilePos(self, x:int, y:int, z:int): + def setTilePos(self, x:int, y:int, z:int) -> None: return CmdPositioner.setTilePos(self, [], x, y, z) - def getDirection(self): + def getDirection(self) -> Vec3: return CmdPositioner.getDirection(self, []) - def setDirection(self, x:float, y:float, z:float): + def setDirection(self, x:float, y:float, z:float) -> None: return CmdPositioner.setDirection(self, [], x, y, z) - def getRotation(self): + def getRotation(self) -> float: return CmdPositioner.getRotation(self, []) - def setRotation(self, yaw): + def setRotation(self, yaw) -> None: return CmdPositioner.setRotation(self, [], yaw) - def getPitch(self): + def getPitch(self) -> float: return CmdPositioner.getPitch(self, []) - def setPitch(self, pitch): + def setPitch(self, pitch) -> None: return CmdPositioner.setPitch(self, [], pitch) - def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20): + def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) class CmdCamera: @@ -187,7 +187,7 @@ def setBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int, block) -> No """Set a cuboid of blocks (x1,y1,z1,x2,y2,z2,id,[data])""" self.conn.send(b"world.setBlocks", x1, y1, z1, x2, y2, z2, block) - def getHeight(self, x, z) -> int: + def getHeight(self, x:int, z:int) -> int: """Get the height of the world (x,z) => int""" return self.conn.sendReceive(b"world.getHeight", x, z) From 499758bbc4ce07d74a2dc7e62f2e797ca7b30278 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Thu, 15 Aug 2019 23:27:27 +0800 Subject: [PATCH 42/82] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E8=AA=AA=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 87cc9ab0..f47b724b 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,13 @@ - Set the blocks of the input position range - world.getHeight(x:int, z:int) -> int: - + - Get highest position y of the block + - world.getPlayerEntityIds() -> list: - + - Get the list of server players'id + - world.postToChat(*msg) -> None: + -Print message to minecraft chat - world.setSign(x:int, y:int, z:int, signType:str, signDir:int, line1:str="", line2:str="", line3:str="", line4:str="") -> None: From e92b4c409fb7049983322adaa61ada218cc5eff4 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Fri, 16 Aug 2019 23:36:11 +0800 Subject: [PATCH 43/82] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E8=AA=AA=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f47b724b..8e50e519 100644 --- a/README.md +++ b/README.md @@ -29,17 +29,22 @@ -Print message to minecraft chat - world.setSign(x:int, y:int, z:int, signType:str, signDir:int, line1:str="", line2:str="", line3:str="", line4:str="") -> None: + - Set the stand sign of the input position - world.setWallSign(x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4="") -> None: - + -Set the wall sign of the input position + - world.spawnEntity(x:int, y:int, z:int, entityID:int) -> int: + -Spawn a entity of the input position - world.createExplosion(x:int, y:int, z:int, power:int=4) -> None: + -Create a explosion of the input position - world.getPlayerEntityId(name:str) -> int: + -Get the entity ID of input name - world.create(address = "localhost", port = 4711): - + -Connect your python program to Raspberryjuice --- #### player From a53c23f06d83b4b16178d82c33a2742a7014582d Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sat, 17 Aug 2019 23:00:26 +0800 Subject: [PATCH 44/82] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E8=AA=AA=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8e50e519..a9aa0249 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,8 @@ #### player - player.getPos() -> Vec3: - + -Get player's float position + - player.setPos(x:float, y:float, z:float) -> None: - player.getTilePos() -> Vec3: From 0fd446c7a94892bd57839ebb2d932de7689e10ac Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sat, 17 Aug 2019 23:25:39 +0800 Subject: [PATCH 45/82] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E8=AA=AA=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 89 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 63 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index a9aa0249..c79d267c 100644 --- a/README.md +++ b/README.md @@ -10,119 +10,156 @@ - world.getBlock(x:int, y:int, z:int) -> str - Get the block of the input position + - world.getBlocks(x1:int, y1:int, z1:int, x2:int, y2:int, z2:int) -> list - Get the blocks of the input position range + - world.setBlock(x:int, y:int, z:int, block:str) -> None: - Set the block of the input position + - world.setBlocks(x1:int, y1:int, z1:int, x2:int, y2:int, z2:int, block) -> None: - Set the blocks of the input position range + - world.getHeight(x:int, z:int) -> int: - Get highest position y of the block + - world.getPlayerEntityIds() -> list: - Get the list of server players'id + - world.postToChat(*msg) -> None: -Print message to minecraft chat + - world.setSign(x:int, y:int, z:int, signType:str, signDir:int, line1:str="", line2:str="", line3:str="", line4:str="") -> None: - Set the stand sign of the input position + - world.setWallSign(x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4="") -> None: - -Set the wall sign of the input position + - Set the wall sign of the input position + - world.spawnEntity(x:int, y:int, z:int, entityID:int) -> int: - -Spawn a entity of the input position + - Spawn a entity of the input position + - world.createExplosion(x:int, y:int, z:int, power:int=4) -> None: - -Create a explosion of the input position + - Create a explosion of the input position + - world.getPlayerEntityId(name:str) -> int: - -Get the entity ID of input name + - Get the entity ID of input name + - world.create(address = "localhost", port = 4711): - -Connect your python program to Raspberryjuice + - Connect your python program to Raspberryjuice + + --- #### player - player.getPos() -> Vec3: - -Get player's float position + - Get player's float position + - player.setPos(x:float, y:float, z:float) -> None: + - Set player's position with float + - player.getTilePos() -> Vec3: + - Get player's integer position - player.setTilePos(x:int, y:int, z:int) -> None: + -Set player's integer position + - player.getDirection() -> Vec3: + - Get player's direction + - player.setDirection(x:float, y:float, z:float) -> None: + - Set player's direction + - player.getRotation() -> float: + - Get player's rotation + - player.setRotation(yaw) -> None: + - Set player's rotation + - player.getPitch() -> float: + - Get player's pitch + - player.setPitch(pitch) -> None: + - Set player's pitch + - player.sendTitle(title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: + - Send a title to player --- #### entity - entity.getPos(ID) -> Vec3: - + - Get specific entity's float position + + - entity.setPos(ID, x:float, y:float, z:float) -> None: + - Set specific entity's position with float + - entity.getTilePos(ID) -> Vec3: + - Get specific entity's integer position + - entity.setTilePos(ID, x:int, y:int, z:int) -> None: + - Set specific entity's position with integer + - entity.getDirection(ID) -> Vec3: + - Get specific entity's direction + - entity.setDirection(ID, x:float, y:float, z:float) -> None: + - Set specific entity's direction + - entity.getRotation(ID) -> float: + - Get specific entity's rotation + - entity.setRotation(ID, yaw) -> float: + - Set specific entity's rotation + - entity.getPitch(ID) -> float: + - Get specific entity's pitch + - entity.setPitch(ID, pitch) -> None: + - Set specific entity's pitch - - entity.getName(ID): + - entity.getName(ID): + - Get specific entity's name ### Commands that can't be supported - Camera angles - -### Extra commands - - - getBlocks(x1,y1,z1,x2,y2,z2) has been implemented - - getDirection, getRotation, getPitch functions - get the 'direction' players and entities are facing - - setDirection, setRotation, setPitch functions - set the 'direction' players and entities are facing - - getPlayerId(playerName) - get the entity of a player by name - - pollChatPosts() - get events back for posts to the chat - - setSign(x,y,z,block type id,data,line1,line2,line3,line4) - - Wall signs (id=68 or block.SIGN_WALL.id) require data for facing direction 2=north, 3=south, 4=west, 5=east - - Standing signs (id=63 or block.SIGN_STANDING.id) require data for facing rotation (0-15) 0=south, 4=west, 8=north, 12=east - - spawnEntity(x,y,z,entity) - creates an entity and returns its entity id. see entity.py for list. - - getEntityTypes - returns all the entities supported by the server. - - entity.getName(id) - get a player name for entity id. Reverse of getPlayerId(playerName) - -Note - extra features are NOT guaranteed to be maintained in future releases, particularly if updates are made to the original Pi API which replace the functionality - + ## Config Modify config.yml: - port: 4711 - the default tcp port can be changed in config.yml - - location: RELATIVE - determine whether locations are RELATIVE to the spawn point (default like pi) or ABSOLUTE + - location: ABSOLUTE - determine whether locations are RELATIVE to the spawn point or ABSOLUTE - hitclick: RIGHT - determine whether hit events are triggered by LEFT clicks, RIGHT clicks or BOTH ## Build From 6520779bb5eb31db3f745e0c03bf4086e551a017 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sat, 17 Aug 2019 23:26:12 +0800 Subject: [PATCH 46/82] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=99=9F1.14-04?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 6fabb24e..cf78078d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,5 +4,5 @@ description: Implementation of the Minecraft PI modding API main: com.minecraftdawn.raspberryjuice.RaspberryJuicePlugin name: RaspberryJuice startup: postworld -version: '1.14-0.3' +version: '1.14-0.4' api-version: 1.13 \ No newline at end of file From e2ec81dd9798bb1020fc23d9565a3346a98696ae Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 21 Aug 2019 16:38:43 +0800 Subject: [PATCH 47/82] Edit file path --- .idea/.name | 1 - .idea/artifacts/RaspberryJuice_jar.xml | 8 -------- .idea/codeStyleSettings.xml | 15 --------------- .idea/codeStyles/Project.xml | 9 --------- .idea/codeStyles/codeStyleConfig.xml | 5 ----- .idea/compiler.xml | 5 ----- .idea/encodings.xml | 4 ---- .idea/modules.xml | 8 -------- .idea/vcs.xml | 2 +- .../raspberryjuice/cmd/CmdEvent.java | 4 ---- .../raspberryjuice/CustomBlockFace.java | 2 +- .../raspberryjuice/HitClickType.java | 2 +- .../raspberryjuice/LocationType.java | 2 +- .../raspberryjuice/RaspberryJuicePlugin.java | 2 +- .../raspberryjuice/RemoteSession.java | 8 ++++---- .../raspberryjuice/ServerListenerThread.java | 2 +- .../raspberryjuice/cmd/CmdEntity.java | 6 +++--- .../zhuoweizhang/raspberryjuice/cmd/CmdEvent.java | 4 ++++ .../raspberryjuice/cmd/CmdPlayer.java | 4 ++-- .../raspberryjuice/cmd/CmdWorld.java | 6 +++--- src/main/resources/plugin.yml | 6 +++--- 21 files changed, 25 insertions(+), 80 deletions(-) delete mode 100644 .idea/.name delete mode 100644 .idea/artifacts/RaspberryJuice_jar.xml delete mode 100644 .idea/codeStyleSettings.xml delete mode 100644 .idea/codeStyles/Project.xml delete mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/modules.xml delete mode 100644 src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEvent.java rename src/main/java/{com/minecraftdawn => net/zhuoweizhang}/raspberryjuice/CustomBlockFace.java (91%) rename src/main/java/{com/minecraftdawn => net/zhuoweizhang}/raspberryjuice/HitClickType.java (82%) rename src/main/java/{com/minecraftdawn => net/zhuoweizhang}/raspberryjuice/LocationType.java (82%) rename src/main/java/{com/minecraftdawn => net/zhuoweizhang}/raspberryjuice/RaspberryJuicePlugin.java (99%) rename src/main/java/{com/minecraftdawn => net/zhuoweizhang}/raspberryjuice/RemoteSession.java (98%) rename src/main/java/{com/minecraftdawn => net/zhuoweizhang}/raspberryjuice/ServerListenerThread.java (96%) rename src/main/java/{com/minecraftdawn => net/zhuoweizhang}/raspberryjuice/cmd/CmdEntity.java (94%) create mode 100644 src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java rename src/main/java/{com/minecraftdawn => net/zhuoweizhang}/raspberryjuice/cmd/CmdPlayer.java (97%) rename src/main/java/{com/minecraftdawn => net/zhuoweizhang}/raspberryjuice/cmd/CmdWorld.java (97%) diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 6a84cbee..00000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -raspberryjuice \ No newline at end of file diff --git a/.idea/artifacts/RaspberryJuice_jar.xml b/.idea/artifacts/RaspberryJuice_jar.xml deleted file mode 100644 index b2f227a3..00000000 --- a/.idea/artifacts/RaspberryJuice_jar.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - $PROJECT_DIR$/target/artifacts/RaspberryJuice_jar - - - - - \ No newline at end of file diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml deleted file mode 100644 index 376dffc8..00000000 --- a/.idea/codeStyleSettings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index 84701a3e..00000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123c..00000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b531ed17..64a01e86 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,13 +6,8 @@ - - - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 15a15b21..00000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index fb496126..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7f..35eb1ddf 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEvent.java b/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEvent.java deleted file mode 100644 index 5d03fa47..00000000 --- a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEvent.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.minecraftdawn.raspberryjuice.cmd; - -public class CmdEvent { -} diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/CustomBlockFace.java b/src/main/java/net/zhuoweizhang/raspberryjuice/CustomBlockFace.java similarity index 91% rename from src/main/java/com/minecraftdawn/raspberryjuice/CustomBlockFace.java rename to src/main/java/net/zhuoweizhang/raspberryjuice/CustomBlockFace.java index 30279d5d..1764d669 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/CustomBlockFace.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/CustomBlockFace.java @@ -1,4 +1,4 @@ -package com.minecraftdawn.raspberryjuice; +package net.zhuoweizhang.raspberryjuice; import org.bukkit.Material; import org.bukkit.block.BlockFace; diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/HitClickType.java b/src/main/java/net/zhuoweizhang/raspberryjuice/HitClickType.java similarity index 82% rename from src/main/java/com/minecraftdawn/raspberryjuice/HitClickType.java rename to src/main/java/net/zhuoweizhang/raspberryjuice/HitClickType.java index ec6d8f84..53b064ad 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/HitClickType.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/HitClickType.java @@ -1,4 +1,4 @@ -package com.minecraftdawn.raspberryjuice; +package net.zhuoweizhang.raspberryjuice; /** * Config option to determine whether hit events are triggered by LEFT clicks, RIGHT clicks (like the Pi) or BOTH diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/LocationType.java b/src/main/java/net/zhuoweizhang/raspberryjuice/LocationType.java similarity index 82% rename from src/main/java/com/minecraftdawn/raspberryjuice/LocationType.java rename to src/main/java/net/zhuoweizhang/raspberryjuice/LocationType.java index 4f655b6e..373e4652 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/LocationType.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/LocationType.java @@ -1,4 +1,4 @@ -package com.minecraftdawn.raspberryjuice; +package net.zhuoweizhang.raspberryjuice; /** * Config option to determine whether locations are relative to the spawn point (default like pi) or absolute diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/RaspberryJuicePlugin.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java similarity index 99% rename from src/main/java/com/minecraftdawn/raspberryjuice/RaspberryJuicePlugin.java rename to src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java index 91a7c2ad..b65ba980 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/RaspberryJuicePlugin.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.java @@ -1,4 +1,4 @@ -package com.minecraftdawn.raspberryjuice; +package net.zhuoweizhang.raspberryjuice; import org.bukkit.Bukkit; import org.bukkit.Material; diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java similarity index 98% rename from src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java rename to src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 27819bdb..3baa2b02 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -1,8 +1,8 @@ -package com.minecraftdawn.raspberryjuice; +package net.zhuoweizhang.raspberryjuice; -import com.minecraftdawn.raspberryjuice.cmd.CmdEntity; -import com.minecraftdawn.raspberryjuice.cmd.CmdPlayer; -import com.minecraftdawn.raspberryjuice.cmd.CmdWorld; +import net.zhuoweizhang.raspberryjuice.cmd.CmdEntity; +import net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer; +import net.zhuoweizhang.raspberryjuice.cmd.CmdWorld; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/ServerListenerThread.java b/src/main/java/net/zhuoweizhang/raspberryjuice/ServerListenerThread.java similarity index 96% rename from src/main/java/com/minecraftdawn/raspberryjuice/ServerListenerThread.java rename to src/main/java/net/zhuoweizhang/raspberryjuice/ServerListenerThread.java index 49cf53a0..b7cbb9f5 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/ServerListenerThread.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/ServerListenerThread.java @@ -1,4 +1,4 @@ -package com.minecraftdawn.raspberryjuice; +package net.zhuoweizhang.raspberryjuice; import java.io.*; import java.net.*; diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java similarity index 94% rename from src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java rename to src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java index 4f8b2d37..4aab2f31 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdEntity.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java @@ -1,7 +1,7 @@ -package com.minecraftdawn.raspberryjuice.cmd; +package net.zhuoweizhang.raspberryjuice.cmd; -import com.minecraftdawn.raspberryjuice.RaspberryJuicePlugin; -import com.minecraftdawn.raspberryjuice.RemoteSession; +import net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin; +import net.zhuoweizhang.raspberryjuice.RemoteSession; import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java new file mode 100644 index 00000000..ba480f0c --- /dev/null +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java @@ -0,0 +1,4 @@ +package net.zhuoweizhang.raspberryjuice.cmd; + +public class CmdEvent { +} diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java similarity index 97% rename from src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java rename to src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java index bac6c05e..71c919e0 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdPlayer.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java @@ -1,6 +1,6 @@ -package com.minecraftdawn.raspberryjuice.cmd; +package net.zhuoweizhang.raspberryjuice.cmd; -import com.minecraftdawn.raspberryjuice.RemoteSession; +import net.zhuoweizhang.raspberryjuice.RemoteSession; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; diff --git a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java similarity index 97% rename from src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java rename to src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java index 346683d2..cca786a2 100644 --- a/src/main/java/com/minecraftdawn/raspberryjuice/cmd/CmdWorld.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java @@ -1,7 +1,7 @@ -package com.minecraftdawn.raspberryjuice.cmd; +package net.zhuoweizhang.raspberryjuice.cmd; -import com.minecraftdawn.raspberryjuice.RaspberryJuicePlugin; -import com.minecraftdawn.raspberryjuice.RemoteSession; +import net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin; +import net.zhuoweizhang.raspberryjuice.RemoteSession; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index cf78078d..8b0bb3a6 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,8 +1,8 @@ -author: [MinecraftDawn,Zhuowei] +author: [Zhuowei,MinecraftDawn] database: false description: Implementation of the Minecraft PI modding API -main: com.minecraftdawn.raspberryjuice.RaspberryJuicePlugin +main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin name: RaspberryJuice startup: postworld -version: '1.14-0.4' +version: '1.14-0.5' api-version: 1.13 \ No newline at end of file From dd26ee83d724f88d0187cd460c11d98dd055898a Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Fri, 23 Aug 2019 22:00:42 +0800 Subject: [PATCH 48/82] git ignore --- .gitignore | 7 +++++-- .idea/artifacts/RaspberryJuice_jar.xml | 8 ++++++++ .idea/compiler.xml | 3 +++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 .idea/artifacts/RaspberryJuice_jar.xml diff --git a/.gitignore b/.gitignore index 90802186..eb7d4e89 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,9 @@ tmp/ # Editor detritus *.vim -*.swp +#*.swp tags -.vscode \ No newline at end of file +.vscode +.idea/encodings.xml +.idea/modules.xml +#target/ diff --git a/.idea/artifacts/RaspberryJuice_jar.xml b/.idea/artifacts/RaspberryJuice_jar.xml new file mode 100644 index 00000000..b2f227a3 --- /dev/null +++ b/.idea/artifacts/RaspberryJuice_jar.xml @@ -0,0 +1,8 @@ + + + $PROJECT_DIR$/target/artifacts/RaspberryJuice_jar + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 64a01e86..bf1a7cd0 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -9,5 +9,8 @@ + + + \ No newline at end of file From 408cffdbb2433d62e81be9d0e33a53b9ec9843ba Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Fri, 23 Aug 2019 22:11:06 +0800 Subject: [PATCH 49/82] add out file --- out/jar/RaspberryJuice.jar | Bin 0 -> 61606 bytes out/javadoc/allclasses-frame.html | 28 + out/javadoc/allclasses-noframe.html | 28 + out/javadoc/constant-values.html | 122 ++++ out/javadoc/deprecated-list.html | 122 ++++ out/javadoc/help-doc.html | 223 ++++++ out/javadoc/index-files/index-1.html | 135 ++++ out/javadoc/index-files/index-10.html | 133 ++++ out/javadoc/index-files/index-11.html | 137 ++++ out/javadoc/index-files/index-12.html | 129 ++++ out/javadoc/index-files/index-13.html | 139 ++++ out/javadoc/index-files/index-14.html | 143 ++++ out/javadoc/index-files/index-15.html | 129 ++++ out/javadoc/index-files/index-16.html | 143 ++++ out/javadoc/index-files/index-2.html | 151 ++++ out/javadoc/index-files/index-3.html | 131 ++++ out/javadoc/index-files/index-4.html | 143 ++++ out/javadoc/index-files/index-5.html | 140 ++++ out/javadoc/index-files/index-6.html | 129 ++++ out/javadoc/index-files/index-7.html | 127 ++++ out/javadoc/index-files/index-8.html | 132 ++++ out/javadoc/index-files/index-9.html | 129 ++++ out/javadoc/index.html | 75 ++ .../raspberryjuice/CustomBlockFace.html | 269 +++++++ .../raspberryjuice/HitClickType.html | 353 +++++++++ .../raspberryjuice/LocationType.html | 341 +++++++++ .../raspberryjuice/RaspberryJuicePlugin.html | 518 ++++++++++++++ .../raspberryjuice/RemoteSession.html | 674 ++++++++++++++++++ .../raspberryjuice/ServerListenerThread.html | 347 +++++++++ .../raspberryjuice/cmd/CmdEntity.html | 273 +++++++ .../raspberryjuice/cmd/CmdEvent.html | 235 ++++++ .../raspberryjuice/cmd/CmdPlayer.html | 273 +++++++ .../raspberryjuice/cmd/CmdWorld.html | 275 +++++++ .../raspberryjuice/cmd/package-frame.html | 23 + .../raspberryjuice/cmd/package-summary.html | 152 ++++ .../raspberryjuice/cmd/package-tree.html | 138 ++++ .../raspberryjuice/package-frame.html | 28 + .../raspberryjuice/package-summary.html | 177 +++++ .../raspberryjuice/package-tree.html | 159 +++++ out/javadoc/overview-frame.html | 22 + out/javadoc/overview-summary.html | 137 ++++ out/javadoc/overview-tree.html | 164 +++++ out/javadoc/package-list | 2 + out/javadoc/script.js | 30 + out/javadoc/stylesheet.css | 574 +++++++++++++++ out/mcpi/__init__.py | 0 out/mcpi/block.py | 97 +++ out/mcpi/connection.py | 64 ++ out/mcpi/entity.py | 102 +++ out/mcpi/event.py | 44 ++ out/mcpi/minecraft.py | 292 ++++++++ out/mcpi/util.py | 18 + out/mcpi/vec3.py | 114 +++ 53 files changed, 8663 insertions(+) create mode 100644 out/jar/RaspberryJuice.jar create mode 100644 out/javadoc/allclasses-frame.html create mode 100644 out/javadoc/allclasses-noframe.html create mode 100644 out/javadoc/constant-values.html create mode 100644 out/javadoc/deprecated-list.html create mode 100644 out/javadoc/help-doc.html create mode 100644 out/javadoc/index-files/index-1.html create mode 100644 out/javadoc/index-files/index-10.html create mode 100644 out/javadoc/index-files/index-11.html create mode 100644 out/javadoc/index-files/index-12.html create mode 100644 out/javadoc/index-files/index-13.html create mode 100644 out/javadoc/index-files/index-14.html create mode 100644 out/javadoc/index-files/index-15.html create mode 100644 out/javadoc/index-files/index-16.html create mode 100644 out/javadoc/index-files/index-2.html create mode 100644 out/javadoc/index-files/index-3.html create mode 100644 out/javadoc/index-files/index-4.html create mode 100644 out/javadoc/index-files/index-5.html create mode 100644 out/javadoc/index-files/index-6.html create mode 100644 out/javadoc/index-files/index-7.html create mode 100644 out/javadoc/index-files/index-8.html create mode 100644 out/javadoc/index-files/index-9.html create mode 100644 out/javadoc/index.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/CustomBlockFace.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/HitClickType.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/LocationType.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/RemoteSession.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/ServerListenerThread.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-frame.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-summary.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-tree.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/package-frame.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/package-summary.html create mode 100644 out/javadoc/net/zhuoweizhang/raspberryjuice/package-tree.html create mode 100644 out/javadoc/overview-frame.html create mode 100644 out/javadoc/overview-summary.html create mode 100644 out/javadoc/overview-tree.html create mode 100644 out/javadoc/package-list create mode 100644 out/javadoc/script.js create mode 100644 out/javadoc/stylesheet.css create mode 100644 out/mcpi/__init__.py create mode 100644 out/mcpi/block.py create mode 100644 out/mcpi/connection.py create mode 100644 out/mcpi/entity.py create mode 100644 out/mcpi/event.py create mode 100644 out/mcpi/minecraft.py create mode 100644 out/mcpi/util.py create mode 100644 out/mcpi/vec3.py diff --git a/out/jar/RaspberryJuice.jar b/out/jar/RaspberryJuice.jar new file mode 100644 index 0000000000000000000000000000000000000000..84f568569ba12172006ea924fb48a76e61d8a25d GIT binary patch literal 61606 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�RHOOG%f~5sC&7>l^5=Vo4sYM|1S2 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 + + + + +All Classes + + + + + +

    All Classes

    + + + diff --git a/out/javadoc/allclasses-noframe.html b/out/javadoc/allclasses-noframe.html new file mode 100644 index 00000000..d3d660c3 --- /dev/null +++ b/out/javadoc/allclasses-noframe.html @@ -0,0 +1,28 @@ + + + + + +All Classes + + + + + +

    All Classes

    + + + diff --git a/out/javadoc/constant-values.html b/out/javadoc/constant-values.html new file mode 100644 index 00000000..0c287124 --- /dev/null +++ b/out/javadoc/constant-values.html @@ -0,0 +1,122 @@ + + + + + +Constant Field Values + + + + + + + + + + + +
    +

    Constant Field Values

    +

    Contents

    +
    + + + + + + diff --git a/out/javadoc/deprecated-list.html b/out/javadoc/deprecated-list.html new file mode 100644 index 00000000..a27e9bcf --- /dev/null +++ b/out/javadoc/deprecated-list.html @@ -0,0 +1,122 @@ + + + + + +Deprecated List + + + + + + + + +
    + + + + + + + +
    + + +
    +

    Deprecated API

    +

    Contents

    +
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/help-doc.html b/out/javadoc/help-doc.html new file mode 100644 index 00000000..eaf72fbb --- /dev/null +++ b/out/javadoc/help-doc.html @@ -0,0 +1,223 @@ + + + + + +API Help + + + + + + + + +
    + + + + + + + +
    + + +
    +

    How This API Document Is Organized

    +
    This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
    +
    +
    +
      +
    • +

      Overview

      +

      The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

      +
    • +
    • +

      Package

      +

      Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:

      +
        +
      • Interfaces (italic)
      • +
      • Classes
      • +
      • Enums
      • +
      • Exceptions
      • +
      • Errors
      • +
      • Annotation Types
      • +
      +
    • +
    • +

      Class/Interface

      +

      Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

      +
        +
      • Class inheritance diagram
      • +
      • Direct Subclasses
      • +
      • All Known Subinterfaces
      • +
      • All Known Implementing Classes
      • +
      • Class/interface declaration
      • +
      • Class/interface description
      • +
      +
        +
      • Nested Class Summary
      • +
      • Field Summary
      • +
      • Constructor Summary
      • +
      • Method Summary
      • +
      +
        +
      • Field Detail
      • +
      • Constructor Detail
      • +
      • Method Detail
      • +
      +

      Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

      +
    • +
    • +

      Annotation Type

      +

      Each annotation type has its own separate page with the following sections:

      +
        +
      • Annotation Type declaration
      • +
      • Annotation Type description
      • +
      • Required Element Summary
      • +
      • Optional Element Summary
      • +
      • Element Detail
      • +
      +
    • +
    • +

      Enum

      +

      Each enum has its own separate page with the following sections:

      +
        +
      • Enum declaration
      • +
      • Enum description
      • +
      • Enum Constant Summary
      • +
      • Enum Constant Detail
      • +
      +
    • +
    • +

      Tree (Class Hierarchy)

      +

      There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.

      +
        +
      • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
      • +
      • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
      • +
      +
    • +
    • +

      Deprecated API

      +

      The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

      +
    • +
    • +

      Index

      +

      The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

      +
    • +
    • +

      Prev/Next

      +

      These links take you to the next or previous class, interface, package, or related page.

      +
    • +
    • +

      Frames/No Frames

      +

      These links show and hide the HTML frames. All pages are available with or without frames.

      +
    • +
    • +

      All Classes

      +

      The All Classes link shows all classes and interfaces except non-static nested types.

      +
    • +
    • +

      Serialized Form

      +

      Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

      +
    • +
    • +

      Constant Field Values

      +

      The Constant Field Values page lists the static final fields and their values.

      +
    • +
    +This help file applies to API documentation generated using the standard doclet.
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-1.html b/out/javadoc/index-files/index-1.html new file mode 100644 index 00000000..2cbdba22 --- /dev/null +++ b/out/javadoc/index-files/index-1.html @@ -0,0 +1,135 @@ + + + + + +B-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    B

    +
    +
    bindAddress - Variable in class net.zhuoweizhang.raspberryjuice.ServerListenerThread
    +
     
    +
    blockBreakDetectionTools - Static variable in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    blockFaceToNotch(BlockFace) - Static method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
    +
    from CraftBukkit's org.bukkit.craftbukkit.block.CraftBlock.blockFactToNotch
    +
    +
    blockLocationToRelative(Location) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-10.html b/out/javadoc/index-files/index-10.html new file mode 100644 index 00000000..5114bb63 --- /dev/null +++ b/out/javadoc/index-files/index-10.html @@ -0,0 +1,133 @@ + + + + + +O-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    O

    +
    +
    onChatPosted(AsyncPlayerChatEvent) - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    onDisable() - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    onEnable() - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    onPlayerInteract(PlayerInteractEvent) - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-11.html b/out/javadoc/index-files/index-11.html new file mode 100644 index 00000000..de6ad4d3 --- /dev/null +++ b/out/javadoc/index-files/index-11.html @@ -0,0 +1,137 @@ + + + + + +P-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    P

    +
    +
    parseRelativeBlockLocation(String, String, String) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    parseRelativeBlockLocation(String, String, String, float, float) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    parseRelativeLocation(String, String, String) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    parseRelativeLocation(String, String, String, float, float) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    pendingRemoval - Variable in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    plugin - Variable in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-12.html b/out/javadoc/index-files/index-12.html new file mode 100644 index 00000000..41baf273 --- /dev/null +++ b/out/javadoc/index-files/index-12.html @@ -0,0 +1,129 @@ + + + + + +Q-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    Q

    +
    +
    queueChatPostedEvent(AsyncPlayerChatEvent) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    queuePlayerInteractEvent(PlayerInteractEvent) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-13.html b/out/javadoc/index-files/index-13.html new file mode 100644 index 00000000..bd9880dc --- /dev/null +++ b/out/javadoc/index-files/index-13.html @@ -0,0 +1,139 @@ + + + + + +R-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    R

    +
    +
    RaspberryJuicePlugin - Class in net.zhuoweizhang.raspberryjuice
    +
     
    +
    RaspberryJuicePlugin() - Constructor for class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    RemoteSession - Class in net.zhuoweizhang.raspberryjuice
    +
     
    +
    RemoteSession(RaspberryJuicePlugin, Socket) - Constructor for class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    run() - Method in class net.zhuoweizhang.raspberryjuice.ServerListenerThread
    +
     
    +
    running - Variable in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    running - Variable in class net.zhuoweizhang.raspberryjuice.ServerListenerThread
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-14.html b/out/javadoc/index-files/index-14.html new file mode 100644 index 00000000..5b925293 --- /dev/null +++ b/out/javadoc/index-files/index-14.html @@ -0,0 +1,143 @@ + + + + + +S-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    S

    +
    +
    send(Object) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    send(String) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    ServerListenerThread - Class in net.zhuoweizhang.raspberryjuice
    +
     
    +
    ServerListenerThread(RaspberryJuicePlugin, SocketAddress) - Constructor for class net.zhuoweizhang.raspberryjuice.ServerListenerThread
    +
     
    +
    serverSocket - Variable in class net.zhuoweizhang.raspberryjuice.ServerListenerThread
    +
     
    +
    serverThread - Variable in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    sessions - Variable in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    setOrigin(Location) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    startThreads() - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-15.html b/out/javadoc/index-files/index-15.html new file mode 100644 index 00000000..7edf781f --- /dev/null +++ b/out/javadoc/index-files/index-15.html @@ -0,0 +1,129 @@ + + + + + +T-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    T

    +
    +
    tick() - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
    +
    called from the server main thread
    +
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-16.html b/out/javadoc/index-files/index-16.html new file mode 100644 index 00000000..4dee48ad --- /dev/null +++ b/out/javadoc/index-files/index-16.html @@ -0,0 +1,143 @@ + + + + + +V-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    V

    +
    +
    valueOf(String) - Static method in enum net.zhuoweizhang.raspberryjuice.HitClickType
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum net.zhuoweizhang.raspberryjuice.LocationType
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    values() - Static method in enum net.zhuoweizhang.raspberryjuice.HitClickType
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum net.zhuoweizhang.raspberryjuice.LocationType
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-2.html b/out/javadoc/index-files/index-2.html new file mode 100644 index 00000000..058b8536 --- /dev/null +++ b/out/javadoc/index-files/index-2.html @@ -0,0 +1,151 @@ + + + + + +C-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    C

    +
    +
    chatPostedQueue - Variable in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    checkBanned(RemoteSession) - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    close() - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    CmdEntity - Class in net.zhuoweizhang.raspberryjuice.cmd
    +
     
    +
    CmdEntity(RemoteSession, String, String[]) - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdEntity
    +
     
    +
    CmdEvent - Class in net.zhuoweizhang.raspberryjuice.cmd
    +
     
    +
    CmdEvent() - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdEvent
    +
     
    +
    CmdPlayer - Class in net.zhuoweizhang.raspberryjuice.cmd
    +
     
    +
    CmdPlayer(RemoteSession, String, String[]) - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer
    +
     
    +
    CmdWorld - Class in net.zhuoweizhang.raspberryjuice.cmd
    +
     
    +
    CmdWorld(RemoteSession, World, String, String[]) - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdWorld
    +
     
    +
    CustomBlockFace - Class in net.zhuoweizhang.raspberryjuice
    +
     
    +
    CustomBlockFace() - Constructor for class net.zhuoweizhang.raspberryjuice.CustomBlockFace
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-3.html b/out/javadoc/index-files/index-3.html new file mode 100644 index 00000000..b6cf54fb --- /dev/null +++ b/out/javadoc/index-files/index-3.html @@ -0,0 +1,131 @@ + + + + + +E-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    E

    +
    +
    execute() - Method in class net.zhuoweizhang.raspberryjuice.cmd.CmdEntity
    +
     
    +
    execute() - Method in class net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer
    +
     
    +
    execute() - Method in class net.zhuoweizhang.raspberryjuice.cmd.CmdWorld
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-4.html b/out/javadoc/index-files/index-4.html new file mode 100644 index 00000000..0ca3cfaa --- /dev/null +++ b/out/javadoc/index-files/index-4.html @@ -0,0 +1,143 @@ + + + + + +G-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    G

    +
    +
    getCurrentPlayer() - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    getEntity(int) - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    getHitClickType() - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    getHostPlayer() - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    getLocationType() - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    getNamedPlayer(String) - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    getOrigin() - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    getSignValueOf(String) - Static method in class net.zhuoweizhang.raspberryjuice.CustomBlockFace
    +
     
    +
    getSocket() - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-5.html b/out/javadoc/index-files/index-5.html new file mode 100644 index 00000000..b27e1992 --- /dev/null +++ b/out/javadoc/index-files/index-5.html @@ -0,0 +1,140 @@ + + + + + +H-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    H

    +
    +
    handleCommand(String, String[]) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    handleConnection(RemoteSession) - Method in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
    +
    called when a new session is established.
    +
    +
    handleLine(String) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    HitClickType - Enum in net.zhuoweizhang.raspberryjuice
    +
    +
    Config option to determine whether hit events are triggered by LEFT clicks, RIGHT clicks (like the Pi) or BOTH + Set in the config.yml.
    +
    +
    hostPlayer - Variable in class net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-6.html b/out/javadoc/index-files/index-6.html new file mode 100644 index 00000000..c0982087 --- /dev/null +++ b/out/javadoc/index-files/index-6.html @@ -0,0 +1,129 @@ + + + + + +I-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    I

    +
    +
    init() - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    interactEventQueue - Variable in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-7.html b/out/javadoc/index-files/index-7.html new file mode 100644 index 00000000..d14e9485 --- /dev/null +++ b/out/javadoc/index-files/index-7.html @@ -0,0 +1,127 @@ + + + + + +K-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    K

    +
    +
    kick(String) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-8.html b/out/javadoc/index-files/index-8.html new file mode 100644 index 00000000..2b4e9df3 --- /dev/null +++ b/out/javadoc/index-files/index-8.html @@ -0,0 +1,132 @@ + + + + + +L-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    L

    +
    +
    locationToRelative(Location) - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
    +
     
    +
    LocationType - Enum in net.zhuoweizhang.raspberryjuice
    +
    +
    Config option to determine whether locations are relative to the spawn point (default like pi) or absolute + Set in the config.yml.
    +
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index-files/index-9.html b/out/javadoc/index-files/index-9.html new file mode 100644 index 00000000..d26c6308 --- /dev/null +++ b/out/javadoc/index-files/index-9.html @@ -0,0 +1,129 @@ + + + + + +N-Index + + + + + + + + +
    + + + + + + + +
    + + +
    B C E G H I K L N O P Q R S T V  + + +

    N

    +
    +
    net.zhuoweizhang.raspberryjuice - package net.zhuoweizhang.raspberryjuice
    +
     
    +
    net.zhuoweizhang.raspberryjuice.cmd - package net.zhuoweizhang.raspberryjuice.cmd
    +
     
    +
    +B C E G H I K L N O P Q R S T V 
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/index.html b/out/javadoc/index.html new file mode 100644 index 00000000..45702a63 --- /dev/null +++ b/out/javadoc/index.html @@ -0,0 +1,75 @@ + + + + + +Generated Documentation (Untitled) + + + + + + + + + +<noscript> +<div>JavaScript is disabled on your browser.</div> +</noscript> +<h2>Frame Alert</h2> +<p>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to <a href="overview-summary.html">Non-frame version</a>.</p> + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/CustomBlockFace.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/CustomBlockFace.html new file mode 100644 index 00000000..aed6ce75 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/CustomBlockFace.html @@ -0,0 +1,269 @@ + + + + + +CustomBlockFace + + + + + + + + + + + + +
    +
    net.zhuoweizhang.raspberryjuice
    +

    Class CustomBlockFace

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • net.zhuoweizhang.raspberryjuice.CustomBlockFace
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class CustomBlockFace
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        CustomBlockFace() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static org.bukkit.block.BlockFacegetSignValueOf(java.lang.String str) 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CustomBlockFace

          +
          public CustomBlockFace()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getSignValueOf

          +
          public static org.bukkit.block.BlockFace getSignValueOf(java.lang.String str)
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/HitClickType.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/HitClickType.html new file mode 100644 index 00000000..6ba3d7f0 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/HitClickType.html @@ -0,0 +1,353 @@ + + + + + +HitClickType + + + + + + + + + + + + +
    +
    net.zhuoweizhang.raspberryjuice
    +

    Enum HitClickType

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Enum<HitClickType>
      • +
      • +
          +
        • net.zhuoweizhang.raspberryjuice.HitClickType
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable, java.lang.Comparable<HitClickType>
      +
      +
      +
      +
      public enum HitClickType
      +extends java.lang.Enum<HitClickType>
      +
      Config option to determine whether hit events are triggered by LEFT clicks, RIGHT clicks (like the Pi) or BOTH + Set in the config.yml.
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Enum Constant Summary

        + + + + + + + + + + + + + + +
        Enum Constants 
        Enum Constant and Description
        BOTH 
        LEFT 
        RIGHT 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static HitClickTypevalueOf(java.lang.String name) +
        Returns the enum constant of this type with the specified name.
        +
        static HitClickType[]values() +
        Returns an array containing the constants of this enum type, in +the order they are declared.
        +
        +
          +
        • + + +

          Methods inherited from class java.lang.Enum

          +clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +getClass, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static HitClickType[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (HitClickType c : HitClickType.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static HitClickType valueOf(java.lang.String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
          +
          java.lang.NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/LocationType.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/LocationType.html new file mode 100644 index 00000000..b5a68da4 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/LocationType.html @@ -0,0 +1,341 @@ + + + + + +LocationType + + + + + + + + + + + + +
    +
    net.zhuoweizhang.raspberryjuice
    +

    Enum LocationType

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • java.lang.Enum<LocationType>
      • +
      • +
          +
        • net.zhuoweizhang.raspberryjuice.LocationType
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.io.Serializable, java.lang.Comparable<LocationType>
      +
      +
      +
      +
      public enum LocationType
      +extends java.lang.Enum<LocationType>
      +
      Config option to determine whether locations are relative to the spawn point (default like pi) or absolute + Set in the config.yml.
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Enum Constant Summary

        + + + + + + + + + + + +
        Enum Constants 
        Enum Constant and Description
        ABSOLUTE 
        RELATIVE 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static LocationTypevalueOf(java.lang.String name) +
        Returns the enum constant of this type with the specified name.
        +
        static LocationType[]values() +
        Returns an array containing the constants of this enum type, in +the order they are declared.
        +
        +
          +
        • + + +

          Methods inherited from class java.lang.Enum

          +clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +getClass, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + + + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static LocationType[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (LocationType c : LocationType.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static LocationType valueOf(java.lang.String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          java.lang.IllegalArgumentException - if this enum type has no constant with the specified name
          +
          java.lang.NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.html new file mode 100644 index 00000000..e74ce7b7 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/RaspberryJuicePlugin.html @@ -0,0 +1,518 @@ + + + + + +RaspberryJuicePlugin + + + + + + + + + + + + +
    +
    net.zhuoweizhang.raspberryjuice
    +

    Class RaspberryJuicePlugin

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • org.bukkit.plugin.PluginBase
      • +
      • +
          +
        • org.bukkit.plugin.java.JavaPlugin
        • +
        • +
            +
          • net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      org.bukkit.command.CommandExecutor, org.bukkit.command.TabCompleter, org.bukkit.command.TabExecutor, org.bukkit.event.Listener, org.bukkit.plugin.Plugin
      +
      +
      +
      +
      public class RaspberryJuicePlugin
      +extends org.bukkit.plugin.java.JavaPlugin
      +implements org.bukkit.event.Listener
      +
    • +
    +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        booleancheckBanned(RemoteSession session) 
        org.bukkit.entity.EntitygetEntity(int id) 
        HitClickTypegetHitClickType() 
        org.bukkit.entity.PlayergetHostPlayer() 
        LocationTypegetLocationType() 
        org.bukkit.entity.PlayergetNamedPlayer(java.lang.String name) 
        voidhandleConnection(RemoteSession newSession) +
        called when a new session is established.
        +
        voidonChatPosted(org.bukkit.event.player.AsyncPlayerChatEvent event) 
        voidonDisable() 
        voidonEnable() 
        voidonPlayerInteract(org.bukkit.event.player.PlayerInteractEvent event) 
        +
          +
        • + + +

          Methods inherited from class org.bukkit.plugin.java.JavaPlugin

          +getClassLoader, getCommand, getConfig, getDataFolder, getDefaultWorldGenerator, getDescription, getFile, getLogger, getPlugin, getPluginLoader, getProvidingPlugin, getResource, getServer, getTextResource, isEnabled, isNaggable, onCommand, onLoad, onTabComplete, reloadConfig, saveConfig, saveDefaultConfig, saveResource, setEnabled, setNaggable, toString
        • +
        +
          +
        • + + +

          Methods inherited from class org.bukkit.plugin.PluginBase

          +equals, getName, hashCode
        • +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, finalize, getClass, notify, notifyAll, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          blockBreakDetectionTools

          +
          public static final java.util.Set<org.bukkit.Material> blockBreakDetectionTools
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          hostPlayer

          +
          public org.bukkit.entity.Player hostPlayer
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          RaspberryJuicePlugin

          +
          public RaspberryJuicePlugin()
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getLocationType

          +
          public LocationType getLocationType()
          +
        • +
        + + + +
          +
        • +

          getHitClickType

          +
          public HitClickType getHitClickType()
          +
        • +
        + + + +
          +
        • +

          onEnable

          +
          public void onEnable()
          +
          +
          Specified by:
          +
          onEnable in interface org.bukkit.plugin.Plugin
          +
          Overrides:
          +
          onEnable in class org.bukkit.plugin.java.JavaPlugin
          +
          +
        • +
        + + + +
          +
        • +

          onPlayerInteract

          +
          public void onPlayerInteract(org.bukkit.event.player.PlayerInteractEvent event)
          +
        • +
        + + + +
          +
        • +

          onChatPosted

          +
          public void onChatPosted(org.bukkit.event.player.AsyncPlayerChatEvent event)
          +
        • +
        + + + +
          +
        • +

          handleConnection

          +
          public void handleConnection(RemoteSession newSession)
          +
          called when a new session is established.
          +
        • +
        + + + +
          +
        • +

          getNamedPlayer

          +
          public org.bukkit.entity.Player getNamedPlayer(java.lang.String name)
          +
        • +
        + + + +
          +
        • +

          getHostPlayer

          +
          public org.bukkit.entity.Player getHostPlayer()
          +
        • +
        + + + +
          +
        • +

          getEntity

          +
          public org.bukkit.entity.Entity getEntity(int id)
          +
        • +
        + + + +
          +
        • +

          checkBanned

          +
          public boolean checkBanned(RemoteSession session)
          +
        • +
        + + + +
          +
        • +

          onDisable

          +
          public void onDisable()
          +
          +
          Specified by:
          +
          onDisable in interface org.bukkit.plugin.Plugin
          +
          Overrides:
          +
          onDisable in class org.bukkit.plugin.java.JavaPlugin
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/RemoteSession.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/RemoteSession.html new file mode 100644 index 00000000..83b4a3f6 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/RemoteSession.html @@ -0,0 +1,674 @@ + + + + + +RemoteSession + + + + + + + + + + + + +
    +
    net.zhuoweizhang.raspberryjuice
    +

    Class RemoteSession

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • net.zhuoweizhang.raspberryjuice.RemoteSession
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class RemoteSession
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + + + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        static intblockFaceToNotch(org.bukkit.block.BlockFace face) +
        from CraftBukkit's org.bukkit.craftbukkit.block.CraftBlock.blockFactToNotch
        +
        java.lang.StringblockLocationToRelative(org.bukkit.Location loc) 
        voidclose() 
        org.bukkit.entity.PlayergetCurrentPlayer() 
        org.bukkit.LocationgetOrigin() 
        java.net.SocketgetSocket() 
        protected voidhandleCommand(java.lang.String c, + java.lang.String[] args) 
        protected voidhandleLine(java.lang.String line) 
        voidinit() 
        voidkick(java.lang.String reason) 
        java.lang.StringlocationToRelative(org.bukkit.Location loc) 
        org.bukkit.LocationparseRelativeBlockLocation(java.lang.String xstr, + java.lang.String ystr, + java.lang.String zstr) 
        org.bukkit.LocationparseRelativeBlockLocation(java.lang.String xstr, + java.lang.String ystr, + java.lang.String zstr, + float pitch, + float yaw) 
        org.bukkit.LocationparseRelativeLocation(java.lang.String xstr, + java.lang.String ystr, + java.lang.String zstr) 
        org.bukkit.LocationparseRelativeLocation(java.lang.String xstr, + java.lang.String ystr, + java.lang.String zstr, + float pitch, + float yaw) 
        voidqueueChatPostedEvent(org.bukkit.event.player.AsyncPlayerChatEvent event) 
        voidqueuePlayerInteractEvent(org.bukkit.event.player.PlayerInteractEvent event) 
        voidsend(java.lang.Object a) 
        voidsend(java.lang.String a) 
        voidsetOrigin(org.bukkit.Location origin) 
        protected voidstartThreads() 
        voidtick() +
        called from the server main thread
        +
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          running

          +
          public boolean running
          +
        • +
        + + + +
          +
        • +

          pendingRemoval

          +
          public boolean pendingRemoval
          +
        • +
        + + + + + + + +
          +
        • +

          interactEventQueue

          +
          protected java.util.ArrayDeque<org.bukkit.event.player.PlayerInteractEvent> interactEventQueue
          +
        • +
        + + + +
          +
        • +

          chatPostedQueue

          +
          protected java.util.ArrayDeque<org.bukkit.event.player.AsyncPlayerChatEvent> chatPostedQueue
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          RemoteSession

          +
          public RemoteSession(RaspberryJuicePlugin plugin,
          +                     java.net.Socket socket)
          +              throws java.io.IOException
          +
          +
          Throws:
          +
          java.io.IOException
          +
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          init

          +
          public void init()
          +          throws java.io.IOException
          +
          +
          Throws:
          +
          java.io.IOException
          +
          +
        • +
        + + + +
          +
        • +

          startThreads

          +
          protected void startThreads()
          +
        • +
        + + + +
          +
        • +

          getOrigin

          +
          public org.bukkit.Location getOrigin()
          +
        • +
        + + + +
          +
        • +

          setOrigin

          +
          public void setOrigin(org.bukkit.Location origin)
          +
        • +
        + + + +
          +
        • +

          getSocket

          +
          public java.net.Socket getSocket()
          +
        • +
        + + + +
          +
        • +

          queuePlayerInteractEvent

          +
          public void queuePlayerInteractEvent(org.bukkit.event.player.PlayerInteractEvent event)
          +
        • +
        + + + +
          +
        • +

          queueChatPostedEvent

          +
          public void queueChatPostedEvent(org.bukkit.event.player.AsyncPlayerChatEvent event)
          +
        • +
        + + + +
          +
        • +

          tick

          +
          public void tick()
          +
          called from the server main thread
          +
        • +
        + + + +
          +
        • +

          handleLine

          +
          protected void handleLine(java.lang.String line)
          +
        • +
        + + + +
          +
        • +

          handleCommand

          +
          protected void handleCommand(java.lang.String c,
          +                             java.lang.String[] args)
          +
        • +
        + + + +
          +
        • +

          getCurrentPlayer

          +
          public org.bukkit.entity.Player getCurrentPlayer()
          +
        • +
        + + + +
          +
        • +

          parseRelativeBlockLocation

          +
          public org.bukkit.Location parseRelativeBlockLocation(java.lang.String xstr,
          +                                                      java.lang.String ystr,
          +                                                      java.lang.String zstr)
          +
        • +
        + + + +
          +
        • +

          parseRelativeLocation

          +
          public org.bukkit.Location parseRelativeLocation(java.lang.String xstr,
          +                                                 java.lang.String ystr,
          +                                                 java.lang.String zstr)
          +
        • +
        + + + +
          +
        • +

          parseRelativeBlockLocation

          +
          public org.bukkit.Location parseRelativeBlockLocation(java.lang.String xstr,
          +                                                      java.lang.String ystr,
          +                                                      java.lang.String zstr,
          +                                                      float pitch,
          +                                                      float yaw)
          +
        • +
        + + + +
          +
        • +

          parseRelativeLocation

          +
          public org.bukkit.Location parseRelativeLocation(java.lang.String xstr,
          +                                                 java.lang.String ystr,
          +                                                 java.lang.String zstr,
          +                                                 float pitch,
          +                                                 float yaw)
          +
        • +
        + + + +
          +
        • +

          blockLocationToRelative

          +
          public java.lang.String blockLocationToRelative(org.bukkit.Location loc)
          +
        • +
        + + + +
          +
        • +

          locationToRelative

          +
          public java.lang.String locationToRelative(org.bukkit.Location loc)
          +
        • +
        + + + +
          +
        • +

          send

          +
          public void send(java.lang.Object a)
          +
        • +
        + + + +
          +
        • +

          send

          +
          public void send(java.lang.String a)
          +
        • +
        + + + +
          +
        • +

          close

          +
          public void close()
          +
        • +
        + + + +
          +
        • +

          kick

          +
          public void kick(java.lang.String reason)
          +
        • +
        + + + +
          +
        • +

          blockFaceToNotch

          +
          public static int blockFaceToNotch(org.bukkit.block.BlockFace face)
          +
          from CraftBukkit's org.bukkit.craftbukkit.block.CraftBlock.blockFactToNotch
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/ServerListenerThread.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/ServerListenerThread.html new file mode 100644 index 00000000..b782d42f --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/ServerListenerThread.html @@ -0,0 +1,347 @@ + + + + + +ServerListenerThread + + + + + + + + + + + + +
    +
    net.zhuoweizhang.raspberryjuice
    +

    Class ServerListenerThread

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • net.zhuoweizhang.raspberryjuice.ServerListenerThread
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      java.lang.Runnable
      +
      +
      +
      +
      public class ServerListenerThread
      +extends java.lang.Object
      +implements java.lang.Runnable
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeField and Description
        java.net.SocketAddressbindAddress 
        booleanrunning 
        java.net.ServerSocketserverSocket 
        +
      • +
      + + + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidrun() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          serverSocket

          +
          public java.net.ServerSocket serverSocket
          +
        • +
        + + + +
          +
        • +

          bindAddress

          +
          public java.net.SocketAddress bindAddress
          +
        • +
        + + + +
          +
        • +

          running

          +
          public boolean running
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ServerListenerThread

          +
          public ServerListenerThread(RaspberryJuicePlugin plugin,
          +                            java.net.SocketAddress bindAddress)
          +                     throws java.io.IOException
          +
          +
          Throws:
          +
          java.io.IOException
          +
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          run

          +
          public void run()
          +
          +
          Specified by:
          +
          run in interface java.lang.Runnable
          +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.html new file mode 100644 index 00000000..998a5a17 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.html @@ -0,0 +1,273 @@ + + + + + +CmdEntity + + + + + + + + + + + + +
    +
    net.zhuoweizhang.raspberryjuice.cmd
    +

    Class CmdEntity

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdEntity
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class CmdEntity
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        CmdEntity(RemoteSession session, + java.lang.String cmd, + java.lang.String[] args) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidexecute() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CmdEntity

          +
          public CmdEntity(RemoteSession session,
          +                 java.lang.String cmd,
          +                 java.lang.String[] args)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          execute

          +
          public void execute()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.html new file mode 100644 index 00000000..99dea99a --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.html @@ -0,0 +1,235 @@ + + + + + +CmdEvent + + + + + + + + + + + + +
    +
    net.zhuoweizhang.raspberryjuice.cmd
    +

    Class CmdEvent

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdEvent
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class CmdEvent
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        CmdEvent() 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CmdEvent

          +
          public CmdEvent()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.html new file mode 100644 index 00000000..5f749909 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.html @@ -0,0 +1,273 @@ + + + + + +CmdPlayer + + + + + + + + + + + + +
    +
    net.zhuoweizhang.raspberryjuice.cmd
    +

    Class CmdPlayer

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class CmdPlayer
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        CmdPlayer(RemoteSession session, + java.lang.String cmd, + java.lang.String[] args) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidexecute() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CmdPlayer

          +
          public CmdPlayer(RemoteSession session,
          +                 java.lang.String cmd,
          +                 java.lang.String[] args)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          execute

          +
          public void execute()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.html new file mode 100644 index 00000000..9028c6a4 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.html @@ -0,0 +1,275 @@ + + + + + +CmdWorld + + + + + + + + + + + + +
    +
    net.zhuoweizhang.raspberryjuice.cmd
    +

    Class CmdWorld

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdWorld
      • +
      +
    • +
    +
    +
      +
    • +
      +
      +
      public class CmdWorld
      +extends java.lang.Object
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Summary

        + + + + + + + + +
        Constructors 
        Constructor and Description
        CmdWorld(RemoteSession session, + org.bukkit.World world, + java.lang.String cmd, + java.lang.String[] args) 
        +
      • +
      + +
        +
      • + + +

        Method Summary

        + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethod and Description
        voidexecute() 
        +
          +
        • + + +

          Methods inherited from class java.lang.Object

          +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        • +
        +
      • +
      +
    • +
    +
    +
    +
      +
    • + +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CmdWorld

          +
          public CmdWorld(RemoteSession session,
          +                org.bukkit.World world,
          +                java.lang.String cmd,
          +                java.lang.String[] args)
          +
        • +
        +
      • +
      + +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          execute

          +
          public void execute()
          +
        • +
        +
      • +
      +
    • +
    +
    +
    + + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-frame.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-frame.html new file mode 100644 index 00000000..d25e2892 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-frame.html @@ -0,0 +1,23 @@ + + + + + +net.zhuoweizhang.raspberryjuice.cmd + + + + + +

    net.zhuoweizhang.raspberryjuice.cmd

    +
    +

    Classes

    + +
    + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-summary.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-summary.html new file mode 100644 index 00000000..58b6dc2a --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-summary.html @@ -0,0 +1,152 @@ + + + + + +net.zhuoweizhang.raspberryjuice.cmd + + + + + + + + + + + +
    +

    Package net.zhuoweizhang.raspberryjuice.cmd

    +
    +
    + +
    + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-tree.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-tree.html new file mode 100644 index 00000000..ba3b861a --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/cmd/package-tree.html @@ -0,0 +1,138 @@ + + + + + +net.zhuoweizhang.raspberryjuice.cmd Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package net.zhuoweizhang.raspberryjuice.cmd

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdEntity
      • +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdEvent
      • +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer
      • +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdWorld
      • +
      +
    • +
    +
    + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/package-frame.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/package-frame.html new file mode 100644 index 00000000..151c3d37 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/package-frame.html @@ -0,0 +1,28 @@ + + + + + +net.zhuoweizhang.raspberryjuice + + + + + +

    net.zhuoweizhang.raspberryjuice

    + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/package-summary.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/package-summary.html new file mode 100644 index 00000000..59c9e6b6 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/package-summary.html @@ -0,0 +1,177 @@ + + + + + +net.zhuoweizhang.raspberryjuice + + + + + + + + + + + +
    +

    Package net.zhuoweizhang.raspberryjuice

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      CustomBlockFace 
      RaspberryJuicePlugin 
      RemoteSession 
      ServerListenerThread 
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Enum Summary 
      EnumDescription
      HitClickType +
      Config option to determine whether hit events are triggered by LEFT clicks, RIGHT clicks (like the Pi) or BOTH + Set in the config.yml.
      +
      LocationType +
      Config option to determine whether locations are relative to the spawn point (default like pi) or absolute + Set in the config.yml.
      +
      +
    • +
    +
    + + + + + + diff --git a/out/javadoc/net/zhuoweizhang/raspberryjuice/package-tree.html b/out/javadoc/net/zhuoweizhang/raspberryjuice/package-tree.html new file mode 100644 index 00000000..aa8112a6 --- /dev/null +++ b/out/javadoc/net/zhuoweizhang/raspberryjuice/package-tree.html @@ -0,0 +1,159 @@ + + + + + +net.zhuoweizhang.raspberryjuice Class Hierarchy + + + + + + + + + + + +
    +

    Hierarchy For Package net.zhuoweizhang.raspberryjuice

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • net.zhuoweizhang.raspberryjuice.CustomBlockFace
      • +
      • org.bukkit.plugin.PluginBase (implements org.bukkit.plugin.Plugin) +
          +
        • org.bukkit.plugin.java.JavaPlugin + +
        • +
        +
      • +
      • net.zhuoweizhang.raspberryjuice.RemoteSession
      • +
      • net.zhuoweizhang.raspberryjuice.ServerListenerThread (implements java.lang.Runnable)
      • +
      +
    • +
    +

    Enum Hierarchy

    +
      +
    • java.lang.Object +
        +
      • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
      • +
      +
    • +
    +
    + + + + + + diff --git a/out/javadoc/overview-frame.html b/out/javadoc/overview-frame.html new file mode 100644 index 00000000..05141440 --- /dev/null +++ b/out/javadoc/overview-frame.html @@ -0,0 +1,22 @@ + + + + + +Overview List + + + + + + + +

     

    + + diff --git a/out/javadoc/overview-summary.html b/out/javadoc/overview-summary.html new file mode 100644 index 00000000..951527e1 --- /dev/null +++ b/out/javadoc/overview-summary.html @@ -0,0 +1,137 @@ + + + + + +Overview + + + + + + + + +
    + + + + + + + +
    + + +
    + + + + + + + + + + + + + + + + +
    Packages 
    PackageDescription
    net.zhuoweizhang.raspberryjuice 
    net.zhuoweizhang.raspberryjuice.cmd 
    +
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/overview-tree.html b/out/javadoc/overview-tree.html new file mode 100644 index 00000000..58fe2c21 --- /dev/null +++ b/out/javadoc/overview-tree.html @@ -0,0 +1,164 @@ + + + + + +Class Hierarchy + + + + + + + + +
    + + + + + + + +
    + + +
    +

    Hierarchy For All Packages

    +Package Hierarchies: + +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdEntity
      • +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdEvent
      • +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer
      • +
      • net.zhuoweizhang.raspberryjuice.cmd.CmdWorld
      • +
      • net.zhuoweizhang.raspberryjuice.CustomBlockFace
      • +
      • org.bukkit.plugin.PluginBase (implements org.bukkit.plugin.Plugin) +
          +
        • org.bukkit.plugin.java.JavaPlugin + +
        • +
        +
      • +
      • net.zhuoweizhang.raspberryjuice.RemoteSession
      • +
      • net.zhuoweizhang.raspberryjuice.ServerListenerThread (implements java.lang.Runnable)
      • +
      +
    • +
    +

    Enum Hierarchy

    +
      +
    • java.lang.Object +
        +
      • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) + +
      • +
      +
    • +
    +
    + +
    + + + + + + + +
    + + + + diff --git a/out/javadoc/package-list b/out/javadoc/package-list new file mode 100644 index 00000000..bfcc9c0a --- /dev/null +++ b/out/javadoc/package-list @@ -0,0 +1,2 @@ +net.zhuoweizhang.raspberryjuice +net.zhuoweizhang.raspberryjuice.cmd diff --git a/out/javadoc/script.js b/out/javadoc/script.js new file mode 100644 index 00000000..b3463569 --- /dev/null +++ b/out/javadoc/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} diff --git a/out/javadoc/stylesheet.css b/out/javadoc/stylesheet.css new file mode 100644 index 00000000..98055b22 --- /dev/null +++ b/out/javadoc/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} diff --git a/out/mcpi/__init__.py b/out/mcpi/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/out/mcpi/block.py b/out/mcpi/block.py new file mode 100644 index 00000000..52c85023 --- /dev/null +++ b/out/mcpi/block.py @@ -0,0 +1,97 @@ +class Block: + """Minecraft PI block description. Can be sent to Minecraft.setBlock/s""" + def __init__(self, id, data=0): + self.id = id + self.data = data + + def __cmp__(self, rhs): + return hash(self) - hash(rhs) + + def __eq__(self, rhs): + return self.id == rhs.id and self.data == rhs.data + + def __hash__(self): + return (self.id << 8) + self.data + + def withData(self, data): + return Block(self.id, data) + + def __iter__(self): + """Allows a Block to be sent whenever id [and data] is needed""" + return iter((self.id, self.data)) + + def __repr__(self): + return "Block(%d, %d)"%(self.id, self.data) + +AIR = Block(0) +STONE = Block(1) +GRASS = Block(2) +DIRT = Block(3) +COBBLESTONE = Block(4) +WOOD_PLANKS = Block(5) +SAPLING = Block(6) +BEDROCK = Block(7) +WATER_FLOWING = Block(8) +WATER = WATER_FLOWING +WATER_STATIONARY = Block(9) +LAVA_FLOWING = Block(10) +LAVA = LAVA_FLOWING +LAVA_STATIONARY = Block(11) +SAND = Block(12) +GRAVEL = Block(13) +GOLD_ORE = Block(14) +IRON_ORE = Block(15) +COAL_ORE = Block(16) +WOOD = Block(17) +LEAVES = Block(18) +GLASS = Block(20) +LAPIS_LAZULI_ORE = Block(21) +LAPIS_LAZULI_BLOCK = Block(22) +SANDSTONE = Block(24) +BED = Block(26) +COBWEB = Block(30) +GRASS_TALL = Block(31) +WOOL = Block(35) +FLOWER_YELLOW = Block(37) +FLOWER_CYAN = Block(38) +MUSHROOM_BROWN = Block(39) +MUSHROOM_RED = Block(40) +GOLD_BLOCK = Block(41) +IRON_BLOCK = Block(42) +STONE_SLAB_DOUBLE = Block(43) +STONE_SLAB = Block(44) +BRICK_BLOCK = Block(45) +TNT = Block(46) +BOOKSHELF = Block(47) +MOSS_STONE = Block(48) +OBSIDIAN = Block(49) +TORCH = Block(50) +FIRE = Block(51) +STAIRS_WOOD = Block(53) +CHEST = Block(54) +DIAMOND_ORE = Block(56) +DIAMOND_BLOCK = Block(57) +CRAFTING_TABLE = Block(58) +FARMLAND = Block(60) +FURNACE_INACTIVE = Block(61) +FURNACE_ACTIVE = Block(62) +DOOR_WOOD = Block(64) +LADDER = Block(65) +STAIRS_COBBLESTONE = Block(67) +DOOR_IRON = Block(71) +REDSTONE_ORE = Block(73) +SNOW = Block(78) +ICE = Block(79) +SNOW_BLOCK = Block(80) +CACTUS = Block(81) +CLAY = Block(82) +SUGAR_CANE = Block(83) +FENCE = Block(85) +GLOWSTONE_BLOCK = Block(89) +BEDROCK_INVISIBLE = Block(95) +STONE_BRICK = Block(98) +GLASS_PANE = Block(102) +MELON = Block(103) +FENCE_GATE = Block(107) +GLOWING_OBSIDIAN = Block(246) +NETHER_REACTOR_CORE = Block(247) diff --git a/out/mcpi/connection.py b/out/mcpi/connection.py new file mode 100644 index 00000000..dd337bd4 --- /dev/null +++ b/out/mcpi/connection.py @@ -0,0 +1,64 @@ +import socket +import select +import sys +from .util import flatten_parameters_to_bytestring + +""" @author: Aron Nieminen, Mojang AB""" + +class RequestError(Exception): + pass + +class Connection: + """Connection to a Minecraft Pi game""" + RequestFailed = "Fail" + + def __init__(self, address, port): + self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.socket.connect((address, port)) + self.lastSent = "" + + def drain(self): + """Drains the socket of incoming data""" + while True: + readable, _, _ = select.select([self.socket], [], [], 0.0) + if not readable: + break + data = self.socket.recv(1500) + e = "Drained Data: <%s>\n"%data.strip() + e += "Last Message: <%s>\n"%self.lastSent.strip() + sys.stderr.write(e) + + def send(self, f, *data): + """ + Sends data. Note that a trailing newline '\n' is added here + + The protocol uses CP437 encoding - https://en.wikipedia.org/wiki/Code_page_437 + which is mildly distressing as it can't encode all of Unicode. + """ + + s = b"".join([f, b"(", flatten_parameters_to_bytestring(data), b")", b"\n"]) + + self._send(s) + + def _send(self, s): + """ + The actual socket interaction from self.send, extracted for easier mocking + and testing + """ + self.drain() + self.lastSent = s + + self.socket.sendall(s) + + def receive(self): + """Receives data. Note that the trailing newline '\n' is trimmed""" + s = self.socket.makefile("r").readline().rstrip("\n") + checkFail = s.split(",") + if checkFail[0] == Connection.RequestFailed: + raise RequestError("%s failed! Cause: %s" % (self.lastSent.strip(),checkFail[-1])) + return s + + def sendReceive(self, *data): + """Sends and receive data""" + self.send(*data) + return self.receive() diff --git a/out/mcpi/entity.py b/out/mcpi/entity.py new file mode 100644 index 00000000..b78a4850 --- /dev/null +++ b/out/mcpi/entity.py @@ -0,0 +1,102 @@ +class Entity: + '''Minecraft PI entity description. Can be sent to Minecraft.spawnEntity''' + + def __init__(self, id, name = None): + self.id = id + self.name = name + + def __cmp__(self, rhs): + return hash(self) - hash(rhs) + + def __eq__(self, rhs): + return self.id == rhs.id + + def __hash__(self): + return self.id + + def __iter__(self): + '''Allows an Entity to be sent whenever id is needed''' + return iter((self.id,)) + + def __repr__(self): + return 'Entity(%d)'%(self.id) + +EXPERIENCE_ORB = Entity(2, "EXPERIENCE_ORB") +AREA_EFFECT_CLOUD = Entity(3, "AREA_EFFECT_CLOUD") +ELDER_GUARDIAN = Entity(4, "ELDER_GUARDIAN") +WITHER_SKELETON = Entity(5, "WITHER_SKELETON") +STRAY = Entity(6, "STRAY") +EGG = Entity(7, "EGG") +LEASH_HITCH = Entity(8, "LEASH_HITCH") +PAINTING = Entity(9, "PAINTING") +ARROW = Entity(10, "ARROW") +SNOWBALL = Entity(11, "SNOWBALL") +FIREBALL = Entity(12, "FIREBALL") +SMALL_FIREBALL = Entity(13, "SMALL_FIREBALL") +ENDER_PEARL = Entity(14, "ENDER_PEARL") +ENDER_SIGNAL = Entity(15, "ENDER_SIGNAL") +THROWN_EXP_BOTTLE = Entity(17, "THROWN_EXP_BOTTLE") +ITEM_FRAME = Entity(18, "ITEM_FRAME") +WITHER_SKULL = Entity(19, "WITHER_SKULL") +PRIMED_TNT = Entity(20, "PRIMED_TNT") +HUSK = Entity(23, "HUSK") +SPECTRAL_ARROW = Entity(24, "SPECTRAL_ARROW") +SHULKER_BULLET = Entity(25, "SHULKER_BULLET") +DRAGON_FIREBALL = Entity(26, "DRAGON_FIREBALL") +ZOMBIE_VILLAGER = Entity(27, "ZOMBIE_VILLAGER") +SKELETON_HORSE = Entity(28, "SKELETON_HORSE") +ZOMBIE_HORSE = Entity(29, "ZOMBIE_HORSE") +ARMOR_STAND = Entity(30, "ARMOR_STAND") +DONKEY = Entity(31, "DONKEY") +MULE = Entity(32, "MULE") +EVOKER_FANGS = Entity(33, "EVOKER_FANGS") +EVOKER = Entity(34, "EVOKER") +VEX = Entity(35, "VEX") +VINDICATOR = Entity(36, "VINDICATOR") +ILLUSIONER = Entity(37, "ILLUSIONER") +MINECART_COMMAND = Entity(40, "MINECART_COMMAND") +BOAT = Entity(41, "BOAT") +MINECART = Entity(42, "MINECART") +MINECART_CHEST = Entity(43, "MINECART_CHEST") +MINECART_FURNACE = Entity(44, "MINECART_FURNACE") +MINECART_TNT = Entity(45, "MINECART_TNT") +MINECART_HOPPER = Entity(46, "MINECART_HOPPER") +MINECART_MOB_SPAWNER = Entity(47, "MINECART_MOB_SPAWNER") +CREEPER = Entity(50, "CREEPER") +SKELETON = Entity(51, "SKELETON") +SPIDER = Entity(52, "SPIDER") +GIANT = Entity(53, "GIANT") +ZOMBIE = Entity(54, "ZOMBIE") +SLIME = Entity(55, "SLIME") +GHAST = Entity(56, "GHAST") +PIG_ZOMBIE = Entity(57, "PIG_ZOMBIE") +ENDERMAN = Entity(58, "ENDERMAN") +CAVE_SPIDER = Entity(59, "CAVE_SPIDER") +SILVERFISH = Entity(60, "SILVERFISH") +BLAZE = Entity(61, "BLAZE") +MAGMA_CUBE = Entity(62, "MAGMA_CUBE") +ENDER_DRAGON = Entity(63, "ENDER_DRAGON") +WITHER = Entity(64, "WITHER") +BAT = Entity(65, "BAT") +WITCH = Entity(66, "WITCH") +ENDERMITE = Entity(67, "ENDERMITE") +GUARDIAN = Entity(68, "GUARDIAN") +SHULKER = Entity(69, "SHULKER") +PIG = Entity(90, "PIG") +SHEEP = Entity(91, "SHEEP") +COW = Entity(92, "COW") +CHICKEN = Entity(93, "CHICKEN") +SQUID = Entity(94, "SQUID") +WOLF = Entity(95, "WOLF") +MUSHROOM_COW = Entity(96, "MUSHROOM_COW") +SNOWMAN = Entity(97, "SNOWMAN") +OCELOT = Entity(98, "OCELOT") +IRON_GOLEM = Entity(99, "IRON_GOLEM") +HORSE = Entity(100, "HORSE") +RABBIT = Entity(101, "RABBIT") +POLAR_BEAR = Entity(102, "POLAR_BEAR") +LLAMA = Entity(103, "LLAMA") +LLAMA_SPIT = Entity(104, "LLAMA_SPIT") +PARROT = Entity(105, "PARROT") +VILLAGER = Entity(120, "VILLAGER") +ENDER_CRYSTAL = Entity(200, "ENDER_CRYSTAL") \ No newline at end of file diff --git a/out/mcpi/event.py b/out/mcpi/event.py new file mode 100644 index 00000000..436cfa1b --- /dev/null +++ b/out/mcpi/event.py @@ -0,0 +1,44 @@ +from .vec3 import Vec3 + +class BlockEvent: + """An Event related to blocks (e.g. placed, removed, hit)""" + HIT = 0 + + def __init__(self, type, x, y, z, face, entityId): + self.type = type + self.pos = Vec3(x, y, z) + self.face = face + self.entityId = entityId + + def __repr__(self): + sType = { + BlockEvent.HIT: "BlockEvent.HIT" + }.get(self.type, "???") + + return "BlockEvent(%s, %d, %d, %d, %d, %d)"%( + sType,self.pos.x,self.pos.y,self.pos.z,self.face,self.entityId); + + @staticmethod + def Hit(x, y, z, face, entityId): + return BlockEvent(BlockEvent.HIT, x, y, z, face, entityId) + +class ChatEvent: + """An Event related to chat (e.g. posts)""" + POST = 0 + + def __init__(self, type, entityId, message): + self.type = type + self.entityId = entityId + self.message = message + + def __repr__(self): + sType = { + ChatEvent.POST: "ChatEvent.POST" + }.get(self.type, "???") + + return "ChatEvent(%s, %d, %s)"%( + sType,self.entityId,self.message); + + @staticmethod + def Post(entityId, message): + return ChatEvent(ChatEvent.POST, entityId, message) \ No newline at end of file diff --git a/out/mcpi/minecraft.py b/out/mcpi/minecraft.py new file mode 100644 index 00000000..996a3225 --- /dev/null +++ b/out/mcpi/minecraft.py @@ -0,0 +1,292 @@ +from .connection import Connection +from .vec3 import Vec3 +from .event import BlockEvent, ChatEvent +#from .entity import Entity +from .block import Block +from .util import flatten + +""" Minecraft PI low level api v0.1_1 + + Note: many methods have the parameter *arg. This solution makes it + simple to allow different types, and variable number of arguments. + The actual magic is a mix of flatten_parameters() and __iter__. Example: + A Cube class could implement __iter__ to work in Minecraft.setBlocks(c, id). + + (Because of this, it's possible to "erase" arguments. CmdPlayer removes + entityId, by injecting [] that flattens to nothing) + + @author: Aron Nieminen, Mojang AB""" + + +def intFloor(*args): + return [int(x) for x in flatten(args)] + +class CmdPositioner: + """Methods for setting and getting positions""" + def __init__(self, connection, packagePrefix): + self.conn = connection + self.pkg = packagePrefix + + def getPos(self, ID) -> Vec3: + """Get entity position (entityId:int) => Vec3""" + s = self.conn.sendReceive(self.pkg + b".getPos", ID) + return Vec3(*list(map(float, s.split(",")))) + + def setPos(self, ID, x:float, y:float, z:float) -> None: + """Set entity position (entityId:int, x,y,z)""" + self.conn.send(self.pkg + b".setPos", ID, x, y, z) + + def getTilePos(self, ID) -> Vec3: + """Get entity tile position (entityId:int) => Vec3""" + s = self.conn.sendReceive(self.pkg + b".getTile", ID) + return Vec3(*list(map(int, s.split(",")))) + + def setTilePos(self, ID, x:int, y:int, z:int) -> None: + """Set entity tile position (entityId:int) => Vec3""" + self.conn.send(self.pkg + b".setTile", ID, x, y, z) + + def getDirection(self, ID) -> Vec3: + """取得玩家視線方向""" + s = self.conn.sendReceive(self.pkg + b".getDirection", id) + return Vec3(*list(s.split(","))) + + def setDirection(self, ID, x:float, y:float, z:float) -> None: + """設置玩家視線方向""" + self.conn.send(self.pkg + b".setDirection", ID, x, y, z) + + def getRotation(self, ID) -> float: + """取得玩家轉向""" + s = self.conn.sendReceive(self.pkg + b".getRotation", ID) + return float(s) + + def setRotation(self, ID, yaw) -> float: + """設置玩家轉向""" + self.conn.send(self.pkg + b".setRotation", ID, yaw) + + def getPitch(self, ID) -> float: + """取得玩家俯仰""" + s = self.conn.sendReceive(self.pkg + b".getPitch", ID) + return float(s) + + def setPitch(self, ID, pitch) -> None: + """設置玩家俯仰""" + self.conn.send(self.pkg + b".setPitch", ID, pitch) + + def setting(self, setting, status): + """Set a player setting (setting, status). keys: autojump""" + self.conn.send(self.pkg + b".setting", setting, 1 if bool(status) else 0) + + +class CmdEntity(CmdPositioner): + """Methods for entities""" + def __init__(self, connection): + CmdPositioner.__init__(self, connection, b"entity") + + def getName(self, ID): + """Get the list name of the player with entity id => [name:str] + + Also can be used to find name of entity if entity is not a player.""" + return self.conn.sendReceive(b"entity.getName", ID) + + +class CmdPlayer(CmdPositioner): + """Methods for the host (Raspberry Pi) player""" + def __init__(self, connection): + CmdPositioner.__init__(self, connection, b"player") + self.conn = connection + + def getPos(self) -> Vec3: + return CmdPositioner.getPos(self, []) + def setPos(self, x:float, y:float, z:float) -> None: + return CmdPositioner.setPos(self, [], x, y, z) + def getTilePos(self) -> Vec3: + return CmdPositioner.getTilePos(self, []) + def setTilePos(self, x:int, y:int, z:int) -> None: + return CmdPositioner.setTilePos(self, [], x, y, z) + def getDirection(self) -> Vec3: + return CmdPositioner.getDirection(self, []) + def setDirection(self, x:float, y:float, z:float) -> None: + return CmdPositioner.setDirection(self, [], x, y, z) + def getRotation(self) -> float: + return CmdPositioner.getRotation(self, []) + def setRotation(self, yaw) -> None: + return CmdPositioner.setRotation(self, [], yaw) + def getPitch(self) -> float: + return CmdPositioner.getPitch(self, []) + def setPitch(self, pitch) -> None: + return CmdPositioner.setPitch(self, [], pitch) + def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: + self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) + +class CmdCamera: + def __init__(self, connection): + self.conn = connection + + def setNormal(self, *args) -> None: + """Set camera mode to normal Minecraft view ([entityId])""" + self.conn.send(b"camera.mode.setNormal", args) + + def setFixed(self) -> None: + """Set camera mode to fixed view""" + self.conn.send(b"camera.mode.setFixed") + + def setFollow(self, *args) -> None: + """Set camera mode to follow an entity ([entityId])""" + self.conn.send(b"camera.mode.setFollow", args) + + def setPos(self, x:float, y:float, z:float) -> None: + """Set camera entity position (x,y,z)""" + self.conn.send(b"camera.setPos", x, y, z) + + +class CmdEvents: + """Events""" + def __init__(self, connection): + self.conn = connection + + def clearAll(self): + """Clear all old events""" + self.conn.send(b"events.clear") + + def pollBlockHits(self): + """Only triggered by sword => [BlockEvent]""" + s = self.conn.sendReceive(b"events.block.hits") + events = [e for e in s.split("|") if e] + return [BlockEvent.Hit(*list(map(int, e.split(",")))) for e in events] + + def pollChatPosts(self): + """Triggered by posts to chat => [ChatEvent]""" + s = self.conn.sendReceive(b"events.chat.posts") + events = [e for e in s.split("|") if e] + return [ChatEvent.Post(int(e[:e.find(",")]), e[e.find(",") + 1:]) for e in events] + + +class Minecraft: + """The main class to interact with a running instance of Minecraft Pi.""" + def __init__(self, connection): + self.conn = connection + + self.camera = CmdCamera(connection) + self.entity = CmdEntity(connection) + self.player = CmdPlayer(connection) + self.events = CmdEvents(connection) + + def getBlock(self, x:int, y:int, z:int) -> str: + """Get block (x,y,z) => id:int""" + return self.conn.sendReceive(b"world.getBlock", x, y, z) + + def getBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int) -> list: + """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" + return self.conn.sendReceive(b"world.getBlocks", x1, y1, z1, x2, y2, z2) + + def setBlock(self, x:int, y:int, z:int, block:str) -> None: + """Set block (x,y,z,id,[data])""" + self.conn.send(b"world.setBlock", x, y, z, block) + + def setBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int, block) -> None: + """Set a cuboid of blocks (x1,y1,z1,x2,y2,z2,id,[data])""" + self.conn.send(b"world.setBlocks", x1, y1, z1, x2, y2, z2, block) + + def getHeight(self, x:int, z:int) -> int: + """Get the height of the world (x,z) => int""" + return self.conn.sendReceive(b"world.getHeight", x, z) + + def getPlayerEntityIds(self) -> list: + """Get the entity ids of the connected players => [id:int]""" + ids = self.conn.sendReceive(b"world.getPlayerIds") + return list(map(int, ids.split("|"))) + +# def saveCheckpoint(self): +# """Save a checkpoint that can be used for restoring the world""" +# self.conn.send(b"world.checkpoint.save") + +# def restoreCheckpoint(self): +# """Restore the world state to the checkpoint""" +# self.conn.send(b"world.checkpoint.restore") + + def postToChat(self, *msg) -> None: + """Post a message to the game chat""" + self.conn.send(b"chat.post", msg) + + # TODO:修改成一個py檔處理Sign + def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", line2:str="", line3:str="", line4:str="") -> None: + minecraftSignsType = ["SPRUCE_SIGN","ACACIA_SIGN","BIRCH_SIGN","DARK_OAK_SIGN","JUNGLE_SIGN","OAK_SIGN"] + + # ["SPRUCE_WALL_SIGN","ACACIA_WALL_SIGN","BIRCH_WALL_SIGN","DARK_OAK_WALL_SIGN","JUNGLE_WALL_SIGN","OAK_WALL_SIGN"] + minecraftSignsDir = {0:'SOUTH', + 1:'SOUTH_SOUTH_WEST', + 2:'SOUTH_WEST', + 3:'WEST_SOUTH_WEST', + 4:'WEST', + 5:'WEST_NORTH_WEST', + 6:'NORTH_WEST', + 7:'NORTH_NORTH_WEST', + 8:'NORTH', + 9:'NORTH_NORTH_EAST', + 10:'NORTH_EAST', + 11:'EAST_NORTH_EAST', + 12:'EAST', + 13:'EAST_SOUTH_EAST', + 14:'SOUTH_EAST', + 15:'SOUTH_SOUTH_EAST' + } + + if type(signDir) == int: + if 0 <= signDir < 16: + signDir = minecraftSignsDir.get(signDir) + elif type(signDir) == str: + for k,v in minecraftSignsDir.items(): + if signDir == v: + break + else: + signDir = minecraftSignsDir.get(0) + + signType = signType.upper() + if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") + self.conn.send(b"world.setSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) + + def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4="") -> None: + minecraftSignsType = ["SPRUCE_WALL_SIGN","ACACIA_WALL_SIGN","BIRCH_WALL_SIGN","DARK_OAK_WALL_SIGN","JUNGLE_WALL_SIGN","OAK_WALL_SIGN"] + + minecraftSignsDir = {0:'SOUTH', + 1:'WEST', + 2:'NORTH', + 3:'EAST'} + + if type(signDir) == int: + if 0 <= signDir < 4: + signDir = minecraftSignsDir.get(signDir) + elif type(signDir) == str: + for k,v in minecraftSignsDir.items(): + if signDir == v: + break + else: + signDir = minecraftSignsDir.get(0) + + signType = signType.upper() + if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") + self.conn.send(b"world.setWallSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) + + def spawnEntity(self, x:int, y:int, z:int, entityID:int) -> int: + """Spawn entity (x,y,z,id,[data])""" + return int(self.conn.sendReceive(b"world.spawnEntity", x, y, z, entityID)) + + def createExplosion(self, x:int, y:int, z:int, power:int=4) -> None: + self.conn.send(b"world.createExplosion", x, y, z, power) + + def getPlayerEntityId(self, name:str) -> int: + """Get the entity id of the named player => [id:int]""" + return int(self.conn.sendReceive(b"world.getPlayerId", name)) + + def setting(self, setting, status): + """Set a world setting (setting, status). keys: world_immutable, nametags_visible""" + self.conn.send(b"world.setting", setting, 1 if bool(status) else 0) + + @staticmethod + def create(address = "localhost", port = 4711): + return Minecraft(Connection(address, port)) + + +if __name__ == "__main__": + mc = Minecraft.create() + mc.postToChat("Hello, Minecraft!") diff --git a/out/mcpi/util.py b/out/mcpi/util.py new file mode 100644 index 00000000..9791072e --- /dev/null +++ b/out/mcpi/util.py @@ -0,0 +1,18 @@ +import collections + +def flatten(l): + for e in l: + if isinstance(e, collections.Iterable) and not isinstance(e, str): + for ee in flatten(e): yield ee + else: yield e + +def flatten_parameters_to_bytestring(l): + return b",".join(map(_misc_to_bytes, flatten(l))) + +def _misc_to_bytes(m): + """ + Convert an arbitrary object into a string encoded as a CP437 series of bytes. + + See `Connection.send` for more details. + """ + return str(m).encode("cp437") diff --git a/out/mcpi/vec3.py b/out/mcpi/vec3.py new file mode 100644 index 00000000..f0cd42ab --- /dev/null +++ b/out/mcpi/vec3.py @@ -0,0 +1,114 @@ +class Vec3: + def __init__(self, x=0, y=0, z=0): + self.x = x + self.y = y + self.z = z + + def __add__(self, rhs): + c = self.clone() + c += rhs + return c + + def __iadd__(self, rhs): + self.x += rhs.x + self.y += rhs.y + self.z += rhs.z + return self + + def length(self): + return self.lengthSqr() ** .5 + + def lengthSqr(self): + return self.x * self.x + self.y * self.y + self.z * self.z + + def __mul__(self, k): + c = self.clone() + c *= k + return c + + def __imul__(self, k): + self.x *= k + self.y *= k + self.z *= k + return self + + def clone(self): + return Vec3(self.x, self.y, self.z) + + def __neg__(self): + return Vec3(-self.x, -self.y, -self.z) + + def __sub__(self, rhs): + return self.__add__(-rhs) + + def __isub__(self, rhs): + return self.__iadd__(-rhs) + + def __repr__(self): + return "Vec3(%s,%s,%s)"%(self.x,self.y,self.z) + + def __iter__(self): + return iter((self.x, self.y, self.z)) + + def _map(self, func): + self.x = func(self.x) + self.y = func(self.y) + self.z = func(self.z) + + def __cmp__(self, rhs): + dx = self.x - rhs.x + if dx != 0: return dx + dy = self.y - rhs.y + if dy != 0: return dy + dz = self.z - rhs.z + if dz != 0: return dz + return 0 + + def __eq__(self, rhs): + if self.x == rhs.x and self.y == rhs.y and self.z == rhs.z: + return True + + return False + + def iround(self): self._map(lambda v:int(v+0.5)) + def ifloor(self): self._map(int) + + def rotateLeft(self): self.x, self.z = self.z, -self.x + def rotateRight(self): self.x, self.z = -self.z, self.x + +def testVec3(): + # Note: It's not testing everything + + # 1.1 Test initialization + it = Vec3(1, -2, 3) + assert it.x == 1 + assert it.y == -2 + assert it.z == 3 + + assert it.x != -1 + assert it.y != +2 + assert it.z != -3 + + # 2.1 Test cloning and equality + clone = it.clone() + assert it == clone + it.x += 1 + assert it != clone + + # 3.1 Arithmetic + a = Vec3(10, -3, 4) + b = Vec3(-7, 1, 2) + c = a + b + assert c - a == b + assert c - b == a + assert a + a == a * 2 + + assert a - a == Vec3(0,0,0) + assert a + (-a) == Vec3(0,0,0) + + # Test repr + e = eval(repr(it)) + assert e == it + +if __name__ == "__main__": + testVec3() From d5d2f013000b0636ffc1ff716bc93da3c86caccb Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 25 Aug 2019 16:23:21 +0800 Subject: [PATCH 50/82] Edit README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c79d267c..dc7ef779 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # RaspberryJuice -一個Minecraft Bukkit插件,用來實現與Python連接,使用Python控制Minecraft Server +A Minecraft Bukkit plugin which connect to python program ## Commands @@ -167,14 +167,14 @@ Modify config.yml: To build RaspberryJuice, [download and install Maven](https://maven.apache.org/install.html), clone the repository, run `mvn package': ``` -https://github.com/MinecraftDawn/RaspberryJuice.git +git clone https://github.com/zhuowei/RaspberryJuice cd RaspberryJuice mvn package ``` ## Version history - - 1.14 修改指令方式,從數字方塊ID改為方塊名稱。 + - 1.14 - Modify the command, change the block number identity to block name. - 1.11 - spawnEntity, setDirection, setRotation, setPitch - 1.10.1 - bug fixes - 1.10 - left, right, both hit clicks added to config.yml & fixed minor hit events bug From 10667c701760c6e87dad1fa58aa729ee997edc82 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 25 Aug 2019 17:47:18 +0800 Subject: [PATCH 51/82] Modify I/O stream encoding to utf8 --- out/mcpi/util.py | 2 +- .../java/net/zhuoweizhang/raspberryjuice/RemoteSession.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/out/mcpi/util.py b/out/mcpi/util.py index 9791072e..c6531913 100644 --- a/out/mcpi/util.py +++ b/out/mcpi/util.py @@ -15,4 +15,4 @@ def _misc_to_bytes(m): See `Connection.send` for more details. """ - return str(m).encode("cp437") + return str(m).encode("utf8") diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 3baa2b02..828c3555 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -61,8 +61,8 @@ public void init() throws IOException { socket.setTcpNoDelay(true); socket.setKeepAlive(true); socket.setTrafficClass(0x10); - this.in = new BufferedReader(new InputStreamReader(socket.getInputStream())); - this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); + this.in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8")); + this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8")); startThreads(); plugin.getLogger().info("Opened connection to" + socket.getRemoteSocketAddress() + "."); } From d369efba02a8aaf6bd71668b6e4f2010650d1d24 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 25 Aug 2019 17:47:51 +0800 Subject: [PATCH 52/82] Modify I/O stream encoding to utf8 --- src/main/resources/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 8b0bb3a6..533d6295 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,5 +4,5 @@ description: Implementation of the Minecraft PI modding API main: net.zhuoweizhang.raspberryjuice.RaspberryJuicePlugin name: RaspberryJuice startup: postworld -version: '1.14-0.5' +version: '1.14-0.6' api-version: 1.13 \ No newline at end of file From e9565883618be375a119b4c396b07c70bb4d605a Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Mon, 26 Aug 2019 23:14:37 +0800 Subject: [PATCH 53/82] Edit except message language from chinese to english --- out/mcpi/minecraft.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/out/mcpi/minecraft.py b/out/mcpi/minecraft.py index 996a3225..80be8012 100644 --- a/out/mcpi/minecraft.py +++ b/out/mcpi/minecraft.py @@ -2,7 +2,6 @@ from .vec3 import Vec3 from .event import BlockEvent, ChatEvent #from .entity import Entity -from .block import Block from .util import flatten """ Minecraft PI low level api v0.1_1 @@ -208,7 +207,7 @@ def postToChat(self, *msg) -> None: """Post a message to the game chat""" self.conn.send(b"chat.post", msg) - # TODO:修改成一個py檔處理Sign + # TODO:Use a .py file processing Sign def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", line2:str="", line3:str="", line4:str="") -> None: minecraftSignsType = ["SPRUCE_SIGN","ACACIA_SIGN","BIRCH_SIGN","DARK_OAK_SIGN","JUNGLE_SIGN","OAK_SIGN"] @@ -242,7 +241,7 @@ def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", signDir = minecraftSignsDir.get(0) signType = signType.upper() - if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") + if signType not in minecraftSignsType: raise Exception("Sign name error") self.conn.send(b"world.setSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4="") -> None: @@ -264,7 +263,7 @@ def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",l signDir = minecraftSignsDir.get(0) signType = signType.upper() - if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") + if signType not in minecraftSignsType: raise Exception("Sign name error") self.conn.send(b"world.setWallSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) def spawnEntity(self, x:int, y:int, z:int, entityID:int) -> int: From 63312a4f5c4ebf440e58f9617e483a5a9e31e6f6 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 28 Aug 2019 18:27:20 +0800 Subject: [PATCH 54/82] add fail message --- .../java/net/zhuoweizhang/raspberryjuice/RemoteSession.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 828c3555..73e5fe33 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -212,13 +212,13 @@ protected void handleCommand(String c, String[] args) { // not a command which is supported } else { plugin.getLogger().warning(c + " is not supported."); - send("Fail"); + send("Fail," + c + " is not supported."); } } catch (Exception e) { plugin.getLogger().warning("Error occured handling command"); e.printStackTrace(); - send("Fail"); + send("Fail,Please check out minecraft server console"); } } From 104c02847665806ade7a303ed8fd47dac62a4642 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 1 Sep 2019 00:28:06 +0800 Subject: [PATCH 55/82] use CmdWorld.java process command of world --- .../raspberryjuice/RemoteSession.java | 46 ++------------ .../raspberryjuice/cmd/CmdEntity.java | 2 +- .../raspberryjuice/cmd/CmdEvent.java | 60 +++++++++++++++++++ .../raspberryjuice/cmd/CmdPlayer.java | 2 +- .../raspberryjuice/cmd/CmdWorld.java | 2 +- 5 files changed, 69 insertions(+), 43 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 73e5fe33..2455e8d4 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -1,6 +1,7 @@ package net.zhuoweizhang.raspberryjuice; import net.zhuoweizhang.raspberryjuice.cmd.CmdEntity; +import net.zhuoweizhang.raspberryjuice.cmd.CmdEvent; import net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer; import net.zhuoweizhang.raspberryjuice.cmd.CmdWorld; import org.bukkit.*; @@ -40,9 +41,9 @@ public class RemoteSession { public RaspberryJuicePlugin plugin; - protected ArrayDeque interactEventQueue = new ArrayDeque(); + public ArrayDeque interactEventQueue = new ArrayDeque(); - protected ArrayDeque chatPostedQueue = new ArrayDeque(); + public ArrayDeque chatPostedQueue = new ArrayDeque(); private int maxCommandsPerTick = 9000; @@ -160,6 +161,9 @@ protected void handleCommand(String c, String[] args) { } else if (cmd[0].equals("world")) { new CmdWorld(this, world, cmd[1], args).execute(); + } else if (cmd[0].equals("events")){ + new CmdEvent(this, cmd[1], args).execute(); + // chat.post } else if (c.equals("chat.post")) { //create chat message from args as it was split by , @@ -171,44 +175,6 @@ protected void handleCommand(String c, String[] args) { chatMessage = chatMessage.substring(0, chatMessage.length() - 1); server.broadcastMessage(chatMessage); - // events.clear - } else if (c.equals("events.clear")) { - interactEventQueue.clear(); - chatPostedQueue.clear(); - - // events.block.hits - } else if (c.equals("events.block.hits")) { - StringBuilder b = new StringBuilder(); - PlayerInteractEvent event; - while ((event = interactEventQueue.poll()) != null) { - Block block = event.getClickedBlock(); - Location loc = block.getLocation(); - b.append(blockLocationToRelative(loc)); - b.append(","); - b.append(blockFaceToNotch(event.getBlockFace())); - b.append(","); - b.append(event.getPlayer().getEntityId()); - if (interactEventQueue.size() > 0) { - b.append("|"); - } - } - send(b.toString()); - - // events.chat.posts - } else if (c.equals("events.chat.posts")) { - StringBuilder b = new StringBuilder(); - AsyncPlayerChatEvent event; - while ((event = chatPostedQueue.poll()) != null) { - b.append(event.getPlayer().getEntityId()); - b.append(","); - b.append(event.getMessage()); - if (chatPostedQueue.size() > 0) { - b.append("|"); - } - } - send(b.toString()); - - // not a command which is supported } else { plugin.getLogger().warning(c + " is not supported."); diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java index 4aab2f31..7dbb47dc 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java @@ -8,7 +8,7 @@ import org.bukkit.util.Vector; public class CmdEntity { - private String preFix = "entity."; + private final String preFix = "entity."; private String command; private String[] args; private RemoteSession session; diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java index ba480f0c..459ba40e 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java @@ -1,4 +1,64 @@ package net.zhuoweizhang.raspberryjuice.cmd; +import net.zhuoweizhang.raspberryjuice.RemoteSession; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerInteractEvent; + public class CmdEvent { + private final String preFix = "events."; + private String command; + private String[] args; + private RemoteSession session; + + public CmdEvent(RemoteSession session, String cmd, String[] args) { + this.session = session; + this.command = cmd; + this.args = args; + } + + public void execute() { + // events.clear + if (command.equals("clear")) { + session.interactEventQueue.clear(); + session.chatPostedQueue.clear(); + + // events.block.hits + } else if (command.equals("block.hits")) { + StringBuilder b = new StringBuilder(); + PlayerInteractEvent event; + while ((event = session.interactEventQueue.poll()) != null) { + Block block = event.getClickedBlock(); + Location loc = block.getLocation(); + b.append(session.blockLocationToRelative(loc)); + b.append(","); + b.append(session.blockFaceToNotch(event.getBlockFace())); + b.append(","); + b.append(event.getPlayer().getEntityId()); + if (session.interactEventQueue.size() > 0) { + b.append("|"); + } + } + session.send(b.toString()); + + // events.chat.posts + } else if (command.equals("chat.posts")) { + StringBuilder b = new StringBuilder(); + AsyncPlayerChatEvent event; + while ((event = session.chatPostedQueue.poll()) != null) { + b.append(event.getPlayer().getEntityId()); + b.append(","); + b.append(event.getMessage()); + if (session.chatPostedQueue.size() > 0) { + b.append("|"); + } + } + session.send(b.toString()); + + } else { + session.plugin.getLogger().warning(preFix + command + " is not supported."); + session.send("Fail," + preFix + command + " is not supported."); + } + } } diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java index 71c919e0..deb8455b 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java @@ -7,7 +7,7 @@ import org.bukkit.util.Vector; public class CmdPlayer { - private String preFix = "player."; + private final String preFix = "player."; private String command; private String[] args; private RemoteSession session; diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java index cca786a2..dbf925a3 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java @@ -18,7 +18,7 @@ import java.util.Collection; public class CmdWorld { - private String preFix = "world."; + private final String preFix = "world."; private String command; private String[] args; private RemoteSession session; From 1685f85bcd37f777dd19dc0293971e24dcdd4a9d Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Thu, 5 Sep 2019 21:20:03 +0800 Subject: [PATCH 56/82] add cmdEntity,cmdEvent,cmdPlayer,cmdWorld Object in remoteSesstion's attribute --- .../raspberryjuice/RemoteSession.java | 867 +++++++++--------- .../raspberryjuice/cmd/CmdEntity.java | 8 +- .../raspberryjuice/cmd/CmdEvent.java | 8 +- .../raspberryjuice/cmd/CmdPlayer.java | 8 +- .../raspberryjuice/cmd/CmdWorld.java | 7 +- 5 files changed, 444 insertions(+), 454 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 2455e8d4..3cadb25b 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -17,444 +17,449 @@ public class RemoteSession { - private final LocationType locationType; + private final LocationType locationType; - private Location origin; + private Location origin; - private Socket socket; + private Socket socket; - private BufferedReader in; - - private BufferedWriter out; + private BufferedReader in; - private Thread inThread; - - private Thread outThread; + private BufferedWriter out; - private ArrayDeque inQueue = new ArrayDeque(); - - private ArrayDeque outQueue = new ArrayDeque(); - - public boolean running = true; - - public boolean pendingRemoval = false; - - public RaspberryJuicePlugin plugin; - - public ArrayDeque interactEventQueue = new ArrayDeque(); - - public ArrayDeque chatPostedQueue = new ArrayDeque(); - - private int maxCommandsPerTick = 9000; - - private boolean closed = false; - - private Player attachedPlayer = null; - - public RemoteSession(RaspberryJuicePlugin plugin, Socket socket) throws IOException { - this.socket = socket; - this.plugin = plugin; - this.locationType = plugin.getLocationType(); - init(); - } + private Thread inThread; + + private Thread outThread; - public void init() throws IOException { - socket.setTcpNoDelay(true); - socket.setKeepAlive(true); - socket.setTrafficClass(0x10); - this.in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf-8")); - this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"utf-8")); - startThreads(); - plugin.getLogger().info("Opened connection to" + socket.getRemoteSocketAddress() + "."); - } + private ArrayDeque inQueue = new ArrayDeque(); + + private ArrayDeque outQueue = new ArrayDeque(); + + public boolean running = true; + + public boolean pendingRemoval = false; + + public RaspberryJuicePlugin plugin; + + public ArrayDeque interactEventQueue = new ArrayDeque(); + + public ArrayDeque chatPostedQueue = new ArrayDeque(); + + private int maxCommandsPerTick = 9000; + + private boolean closed = false; + + private Player attachedPlayer = null; + + private CmdEntity cmdEntity = new CmdEntity(this); + private CmdEvent cmdEvent = new CmdEvent(this); + private CmdPlayer cmdPlayer = new CmdPlayer(this); + private CmdWorld cmdWorld = new CmdWorld(this); + + public RemoteSession(RaspberryJuicePlugin plugin, Socket socket) throws IOException { + this.socket = socket; + this.plugin = plugin; + this.locationType = plugin.getLocationType(); + init(); + } - protected void startThreads() { - inThread = new Thread(new InputThread()); - inThread.start(); - outThread = new Thread(new OutputThread()); - outThread.start(); - } - - - public Location getOrigin() { - return origin; - } - - public void setOrigin(Location origin) { - this.origin = origin; - } - - public Socket getSocket() { - return socket; - } - - public void queuePlayerInteractEvent(PlayerInteractEvent event) { - //plugin.getLogger().info(event.toString()); - interactEventQueue.add(event); - } - - public void queueChatPostedEvent(AsyncPlayerChatEvent event) { - //plugin.getLogger().info(event.toString()); - chatPostedQueue.add(event); - } - - /** - * called from the server main thread - */ - public void tick() { - if (origin == null) { - switch (locationType) { - case ABSOLUTE: - this.origin = new Location(plugin.getServer().getWorlds().get(0), 0, 0, 0); - break; - case RELATIVE: - this.origin = plugin.getServer().getWorlds().get(0).getSpawnLocation(); - break; - default: - throw new IllegalArgumentException("Unknown location type " + locationType); - } - } - int processedCount = 0; - String message; - while ((message = inQueue.poll()) != null) { - handleLine(message); - processedCount++; - if (processedCount >= maxCommandsPerTick) { - plugin.getLogger().warning("Over " + maxCommandsPerTick + - " commands were queued - deferring " + inQueue.size() + " to next tick"); - break; - } - } - - if (!running && inQueue.size() <= 0) { - pendingRemoval = true; - } - } - - protected void handleLine(String line) { - //System.out.println(line); - String methodName = line.substring(0, line.indexOf("(")); - //split string into args, handles , inside " i.e. "," - String[] args = line.substring(line.indexOf("(") + 1, line.length() - 1).split(","); - //System.out.println(methodName + ":" + Arrays.toString(args)); - handleCommand(methodName, args); - } - - protected void handleCommand(String c, String[] args) { - - try { - // get the server - Server server = plugin.getServer(); - - // get the world - World world = origin.getWorld(); - - // 分割命令 - String[] cmd = c.split("[.]", 2); - - if (cmd[0].equals("player")) { - new CmdPlayer(this, cmd[1], args).execute(); - - } else if (cmd[0].equals("entity")) { - new CmdEntity(this, cmd[1], args).execute(); - - } else if (cmd[0].equals("world")) { - new CmdWorld(this, world, cmd[1], args).execute(); - - } else if (cmd[0].equals("events")){ - new CmdEvent(this, cmd[1], args).execute(); - - // chat.post - } else if (c.equals("chat.post")) { - //create chat message from args as it was split by , - String chatMessage = ""; - int count; - for (count = 0; count < args.length; count++) { - chatMessage = chatMessage + args[count] + " "; - } - chatMessage = chatMessage.substring(0, chatMessage.length() - 1); - server.broadcastMessage(chatMessage); - - // not a command which is supported - } else { - plugin.getLogger().warning(c + " is not supported."); - send("Fail," + c + " is not supported."); - } - } catch (Exception e) { - - plugin.getLogger().warning("Error occured handling command"); - e.printStackTrace(); - send("Fail,Please check out minecraft server console"); - - } - } - - // create a cuboid of lots of blocks - private void setCuboid(Location pos1, Location pos2, String blockType, byte data) { - int minX, maxX, minY, maxY, minZ, maxZ; - World world = pos1.getWorld(); - minX = pos1.getBlockX() < pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); - maxX = pos1.getBlockX() >= pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); - minY = pos1.getBlockY() < pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); - maxY = pos1.getBlockY() >= pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); - minZ = pos1.getBlockZ() < pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); - maxZ = pos1.getBlockZ() >= pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); - - for (int x = minX; x <= maxX; ++x) { - for (int z = minZ; z <= maxZ; ++z) { - for (int y = minY; y <= maxY; ++y) { - updateBlock(world, x, y, z, blockType, data); - } - } - } - } - - // get a cuboid of lots of blocks - private String getBlocks(Location pos1, Location pos2) { - StringBuilder blockData = new StringBuilder(); - - int minX, maxX, minY, maxY, minZ, maxZ; - World world = pos1.getWorld(); - minX = pos1.getBlockX() < pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); - maxX = pos1.getBlockX() >= pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); - minY = pos1.getBlockY() < pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); - maxY = pos1.getBlockY() >= pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); - minZ = pos1.getBlockZ() < pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); - maxZ = pos1.getBlockZ() >= pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); - - for (int y = minY; y <= maxY; ++y) { - for (int x = minX; x <= maxX; ++x) { - for (int z = minZ; z <= maxZ; ++z) { - blockData.append(world.getBlockAt(x, y, z).getType().name() + ","); - } - } - } - - return blockData.substring(0, blockData.length() > 0 ? blockData.length() - 1 : 0); // We don't want last comma - } - - // updates a block - private void updateBlock(World world, Location loc, String blockType, byte blockData) { - Block thisBlock = world.getBlockAt(loc); - updateBlock(thisBlock, blockType, blockData); - } - - private void updateBlock(World world, int x, int y, int z, String blockType, byte blockData) { - Block thisBlock = world.getBlockAt(x, y, z); - updateBlock(thisBlock, blockType, blockData); - } - - private void updateBlock(Block thisBlock, String blockType, byte blockData) { - // check to see if the block is different - otherwise leave it - blockType = blockType.toUpperCase(); - if ((thisBlock.getType() != Material.valueOf(blockType))) { - thisBlock.setType(Material.valueOf(blockType.toUpperCase())); + public void init() throws IOException { + socket.setTcpNoDelay(true); + socket.setKeepAlive(true); + socket.setTrafficClass(0x10); + this.in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8")); + this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8")); + startThreads(); + plugin.getLogger().info("Opened connection to" + socket.getRemoteSocketAddress() + "."); + } + + protected void startThreads() { + inThread = new Thread(new InputThread()); + inThread.start(); + outThread = new Thread(new OutputThread()); + outThread.start(); + } + + + public Location getOrigin() { + return origin; + } + + public void setOrigin(Location origin) { + this.origin = origin; + } + + public Socket getSocket() { + return socket; + } + + public void queuePlayerInteractEvent(PlayerInteractEvent event) { + //plugin.getLogger().info(event.toString()); + interactEventQueue.add(event); + } + + public void queueChatPostedEvent(AsyncPlayerChatEvent event) { + //plugin.getLogger().info(event.toString()); + chatPostedQueue.add(event); + } + + /** + * called from the server main thread + */ + public void tick() { + if (origin == null) { + switch (locationType) { + case ABSOLUTE: + this.origin = new Location(plugin.getServer().getWorlds().get(0), 0, 0, 0); + break; + case RELATIVE: + this.origin = plugin.getServer().getWorlds().get(0).getSpawnLocation(); + break; + default: + throw new IllegalArgumentException("Unknown location type " + locationType); + } + } + int processedCount = 0; + String message; + while ((message = inQueue.poll()) != null) { + handleLine(message); + processedCount++; + if (processedCount >= maxCommandsPerTick) { + plugin.getLogger().warning("Over " + maxCommandsPerTick + + " commands were queued - deferring " + inQueue.size() + " to next tick"); + break; + } + } + + if (!running && inQueue.size() <= 0) { + pendingRemoval = true; + } + } + + protected void handleLine(String line) { + //System.out.println(line); + String methodName = line.substring(0, line.indexOf("(")); + //split string into args, handles , inside " i.e. "," + String[] args = line.substring(line.indexOf("(") + 1, line.length() - 1).split(","); + //System.out.println(methodName + ":" + Arrays.toString(args)); + handleCommand(methodName, args); + } + + protected void handleCommand(String c, String[] args) { + + try { + // get the server + Server server = plugin.getServer(); + + // get the world + World world = origin.getWorld(); + + // 分割命令 + String[] cmd = c.split("[.]", 2); + + if (cmd[0].equals("player")) { + cmdPlayer.execute(cmd[1], args); + + } else if (cmd[0].equals("entity")) { + cmdEntity.execute(cmd[1], args); + + } else if (cmd[0].equals("world")) { + cmdWorld.execute(world, cmd[1], args); + + } else if (cmd[0].equals("events")) { + cmdEvent.execute(cmd[1], args); + + // chat.post + } else if (c.equals("chat.post")) { + //create chat message from args as it was split by , + String chatMessage = ""; + int count; + for (count = 0; count < args.length; count++) { + chatMessage = chatMessage + args[count] + " "; + } + chatMessage = chatMessage.substring(0, chatMessage.length() - 1); + server.broadcastMessage(chatMessage); + + // not a command which is supported + } else { + plugin.getLogger().warning(c + " is not supported."); + send("Fail," + c + " is not supported."); + } + } catch (Exception e) { + + plugin.getLogger().warning("Error occured handling command"); + e.printStackTrace(); + send("Fail,Please check out minecraft server console"); + + } + } + + // create a cuboid of lots of blocks + private void setCuboid(Location pos1, Location pos2, String blockType, byte data) { + int minX, maxX, minY, maxY, minZ, maxZ; + World world = pos1.getWorld(); + minX = pos1.getBlockX() < pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); + maxX = pos1.getBlockX() >= pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); + minY = pos1.getBlockY() < pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); + maxY = pos1.getBlockY() >= pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); + minZ = pos1.getBlockZ() < pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); + maxZ = pos1.getBlockZ() >= pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); + + for (int x = minX; x <= maxX; ++x) { + for (int z = minZ; z <= maxZ; ++z) { + for (int y = minY; y <= maxY; ++y) { + updateBlock(world, x, y, z, blockType, data); + } + } + } + } + + // get a cuboid of lots of blocks + private String getBlocks(Location pos1, Location pos2) { + StringBuilder blockData = new StringBuilder(); + + int minX, maxX, minY, maxY, minZ, maxZ; + World world = pos1.getWorld(); + minX = pos1.getBlockX() < pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); + maxX = pos1.getBlockX() >= pos2.getBlockX() ? pos1.getBlockX() : pos2.getBlockX(); + minY = pos1.getBlockY() < pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); + maxY = pos1.getBlockY() >= pos2.getBlockY() ? pos1.getBlockY() : pos2.getBlockY(); + minZ = pos1.getBlockZ() < pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); + maxZ = pos1.getBlockZ() >= pos2.getBlockZ() ? pos1.getBlockZ() : pos2.getBlockZ(); + + for (int y = minY; y <= maxY; ++y) { + for (int x = minX; x <= maxX; ++x) { + for (int z = minZ; z <= maxZ; ++z) { + blockData.append(world.getBlockAt(x, y, z).getType().name() + ","); + } + } + } + + return blockData.substring(0, blockData.length() > 0 ? blockData.length() - 1 : 0); // We don't want last comma + } + + // updates a block + private void updateBlock(World world, Location loc, String blockType, byte blockData) { + Block thisBlock = world.getBlockAt(loc); + updateBlock(thisBlock, blockType, blockData); + } + + private void updateBlock(World world, int x, int y, int z, String blockType, byte blockData) { + Block thisBlock = world.getBlockAt(x, y, z); + updateBlock(thisBlock, blockType, blockData); + } + + private void updateBlock(Block thisBlock, String blockType, byte blockData) { + // check to see if the block is different - otherwise leave it + blockType = blockType.toUpperCase(); + if ((thisBlock.getType() != Material.valueOf(blockType))) { + thisBlock.setType(Material.valueOf(blockType.toUpperCase())); // thisBlock.setTypeIdAndData(blockType, blockData, true); - } - } - - // gets the current player - public Player getCurrentPlayer() { - if (!serverHasPlayer()) { - send("Fail,There are no players in the server."); - return null; - } - Player player = attachedPlayer; - // if the player hasnt already been retreived for this session, go and get it. - if (player == null) { - player = plugin.getHostPlayer(); - attachedPlayer = player; - } - return player; - } - - private boolean serverHasPlayer() { - return !Bukkit.getOnlinePlayers().isEmpty(); - } - - public Location parseRelativeBlockLocation(String xstr, String ystr, String zstr) { - int x = (int) Double.parseDouble(xstr); - int y = (int) Double.parseDouble(ystr); - int z = (int) Double.parseDouble(zstr); - return parseLocation(origin.getWorld(), x, y, z, origin.getBlockX(), origin.getBlockY(), origin.getBlockZ()); - } - - public Location parseRelativeLocation(String xstr, String ystr, String zstr) { - double x = Double.parseDouble(xstr); - double y = Double.parseDouble(ystr); - double z = Double.parseDouble(zstr); - return parseLocation(origin.getWorld(), x, y, z, origin.getX(), origin.getY(), origin.getZ()); - } - - public Location parseRelativeBlockLocation(String xstr, String ystr, String zstr, float pitch, float yaw) { - Location loc = parseRelativeBlockLocation(xstr, ystr, zstr); - loc.setPitch(pitch); - loc.setYaw(yaw); - return loc; - } - - public Location parseRelativeLocation(String xstr, String ystr, String zstr, float pitch, float yaw) { - Location loc = parseRelativeLocation(xstr, ystr, zstr); - loc.setPitch(pitch); - loc.setYaw(yaw); - return loc; - } - - public String blockLocationToRelative(Location loc) { - return parseLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), origin.getBlockX(), origin.getBlockY(), origin.getBlockZ()); - } - - public String locationToRelative(Location loc) { - return parseLocation(loc.getX(), loc.getY(), loc.getZ(), origin.getX(), origin.getY(), origin.getZ()); - } - - private String parseLocation(double x, double y, double z, double originX, double originY, double originZ) { - return (x - originX) + "," + (y - originY) + "," + (z - originZ); - } - - private Location parseLocation(World world, double x, double y, double z, double originX, double originY, double originZ) { - return new Location(world, originX + x, originY + y, originZ + z); - } - - private String parseLocation(int x, int y, int z, int originX, int originY, int originZ) { - return (x - originX) + "," + (y - originY) + "," + (z - originZ); - } - - private Location parseLocation(World world, int x, int y, int z, int originX, int originY, int originZ) { - return new Location(world, originX + x, originY + y, originZ + z); - } - - public void send(Object a) { - send(a.toString()); - } - - public void send(String a) { - if (pendingRemoval) return; - synchronized (outQueue) { - outQueue.add(a); - } - } - - public void close() { - if (closed) return; - running = false; - pendingRemoval = true; - - //wait for threads to stop - try { - inThread.join(2000); - outThread.join(2000); - } catch (InterruptedException e) { - plugin.getLogger().warning("Failed to stop in/out thread"); - e.printStackTrace(); - } - - try { - socket.close(); - } catch (Exception e) { - e.printStackTrace(); - } - plugin.getLogger().info("Closed connection to" + socket.getRemoteSocketAddress() + "."); - } - - public void kick(String reason) { - try { - out.write(reason); - out.flush(); - } catch (Exception e) { - } - close(); - } - - /** - * socket listening thread - */ - private class InputThread implements Runnable { - public void run() { - plugin.getLogger().info("Starting input thread"); - while (running) { - try { - String newLine = in.readLine(); - //System.out.println(newLine); - if (newLine == null) { - running = false; - } else { - inQueue.add(newLine); - //System.out.println("Added to in queue"); - } - } catch (Exception e) { - // if its running raise an error - if (running) { - if (e.getMessage().equals("Connection reset")) { - plugin.getLogger().info("Connection reset"); - } else { - e.printStackTrace(); - } - running = false; - } - } - } - //close in buffer - try { - in.close(); - } catch (Exception e) { - plugin.getLogger().warning("Failed to close in buffer"); - e.printStackTrace(); - } - } - } - - private class OutputThread implements Runnable { - public void run() { - plugin.getLogger().info("Starting output thread!"); - while (running) { - try { - String line; - while ((line = outQueue.poll()) != null) { - out.write(line); - out.write('\n'); - } - out.flush(); - Thread.yield(); - Thread.sleep(1L); - } catch (Exception e) { - // if its running raise an error - if (running) { - e.printStackTrace(); - running = false; - } - } - } - //close out buffer - try { - out.close(); - } catch (Exception e) { - plugin.getLogger().warning("Failed to close out buffer"); - e.printStackTrace(); - } - } - } - - /** - * from CraftBukkit's org.bukkit.craftbukkit.block.CraftBlock.blockFactToNotch - */ - public static int blockFaceToNotch(BlockFace face) { - switch (face) { - case DOWN: - return 0; - case UP: - return 1; - case NORTH: - return 2; - case SOUTH: - return 3; - case WEST: - return 4; - case EAST: - return 5; - default: - return 7; // Good as anything here, but technically invalid - } - } + } + } + + // gets the current player + public Player getCurrentPlayer() { + if (!serverHasPlayer()) { + send("Fail,There are no players in the server."); + return null; + } + Player player = attachedPlayer; + // if the player hasnt already been retreived for this session, go and get it. + if (player == null) { + player = plugin.getHostPlayer(); + attachedPlayer = player; + } + return player; + } + + private boolean serverHasPlayer() { + return !Bukkit.getOnlinePlayers().isEmpty(); + } + + public Location parseRelativeBlockLocation(String xstr, String ystr, String zstr) { + int x = (int) Double.parseDouble(xstr); + int y = (int) Double.parseDouble(ystr); + int z = (int) Double.parseDouble(zstr); + return parseLocation(origin.getWorld(), x, y, z, origin.getBlockX(), origin.getBlockY(), origin.getBlockZ()); + } + + public Location parseRelativeLocation(String xstr, String ystr, String zstr) { + double x = Double.parseDouble(xstr); + double y = Double.parseDouble(ystr); + double z = Double.parseDouble(zstr); + return parseLocation(origin.getWorld(), x, y, z, origin.getX(), origin.getY(), origin.getZ()); + } + + public Location parseRelativeBlockLocation(String xstr, String ystr, String zstr, float pitch, float yaw) { + Location loc = parseRelativeBlockLocation(xstr, ystr, zstr); + loc.setPitch(pitch); + loc.setYaw(yaw); + return loc; + } + + public Location parseRelativeLocation(String xstr, String ystr, String zstr, float pitch, float yaw) { + Location loc = parseRelativeLocation(xstr, ystr, zstr); + loc.setPitch(pitch); + loc.setYaw(yaw); + return loc; + } + + public String blockLocationToRelative(Location loc) { + return parseLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), origin.getBlockX(), origin.getBlockY(), origin.getBlockZ()); + } + + public String locationToRelative(Location loc) { + return parseLocation(loc.getX(), loc.getY(), loc.getZ(), origin.getX(), origin.getY(), origin.getZ()); + } + + private String parseLocation(double x, double y, double z, double originX, double originY, double originZ) { + return (x - originX) + "," + (y - originY) + "," + (z - originZ); + } + + private Location parseLocation(World world, double x, double y, double z, double originX, double originY, double originZ) { + return new Location(world, originX + x, originY + y, originZ + z); + } + + private String parseLocation(int x, int y, int z, int originX, int originY, int originZ) { + return (x - originX) + "," + (y - originY) + "," + (z - originZ); + } + + private Location parseLocation(World world, int x, int y, int z, int originX, int originY, int originZ) { + return new Location(world, originX + x, originY + y, originZ + z); + } + + public void send(Object a) { + send(a.toString()); + } + + public void send(String a) { + if (pendingRemoval) return; + synchronized (outQueue) { + outQueue.add(a); + } + } + + public void close() { + if (closed) return; + running = false; + pendingRemoval = true; + + //wait for threads to stop + try { + inThread.join(2000); + outThread.join(2000); + } catch (InterruptedException e) { + plugin.getLogger().warning("Failed to stop in/out thread"); + e.printStackTrace(); + } + + try { + socket.close(); + } catch (Exception e) { + e.printStackTrace(); + } + plugin.getLogger().info("Closed connection to" + socket.getRemoteSocketAddress() + "."); + } + + public void kick(String reason) { + try { + out.write(reason); + out.flush(); + } catch (Exception e) { + } + close(); + } + + /** + * socket listening thread + */ + private class InputThread implements Runnable { + public void run() { + plugin.getLogger().info("Starting input thread"); + while (running) { + try { + String newLine = in.readLine(); + //System.out.println(newLine); + if (newLine == null) { + running = false; + } else { + inQueue.add(newLine); + //System.out.println("Added to in queue"); + } + } catch (Exception e) { + // if its running raise an error + if (running) { + if (e.getMessage().equals("Connection reset")) { + plugin.getLogger().info("Connection reset"); + } else { + e.printStackTrace(); + } + running = false; + } + } + } + //close in buffer + try { + in.close(); + } catch (Exception e) { + plugin.getLogger().warning("Failed to close in buffer"); + e.printStackTrace(); + } + } + } + + private class OutputThread implements Runnable { + public void run() { + plugin.getLogger().info("Starting output thread!"); + while (running) { + try { + String line; + while ((line = outQueue.poll()) != null) { + out.write(line); + out.write('\n'); + } + out.flush(); + Thread.yield(); + Thread.sleep(1L); + } catch (Exception e) { + // if its running raise an error + if (running) { + e.printStackTrace(); + running = false; + } + } + } + //close out buffer + try { + out.close(); + } catch (Exception e) { + plugin.getLogger().warning("Failed to close out buffer"); + e.printStackTrace(); + } + } + } + + /** + * from CraftBukkit's org.bukkit.craftbukkit.block.CraftBlock.blockFactToNotch + */ + public static int blockFaceToNotch(BlockFace face) { + switch (face) { + case DOWN: + return 0; + case UP: + return 1; + case NORTH: + return 2; + case SOUTH: + return 3; + case WEST: + return 4; + case EAST: + return 5; + default: + return 7; // Good as anything here, but technically invalid + } + } } diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java index 7dbb47dc..f4895e36 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java @@ -9,20 +9,16 @@ public class CmdEntity { private final String preFix = "entity."; - private String command; - private String[] args; private RemoteSession session; private RaspberryJuicePlugin plugin; - public CmdEntity(RemoteSession session, String cmd, String[] args) { + public CmdEntity(RemoteSession session) { this.session = session; - this.command = cmd; - this.args = args; this.plugin = session.plugin; } - public void execute() { + public void execute(String command, String[] args) { //get entity based on id Entity entity = plugin.getEntity(Integer.parseInt(args[0])); diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java index 459ba40e..233eb87b 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEvent.java @@ -8,17 +8,13 @@ public class CmdEvent { private final String preFix = "events."; - private String command; - private String[] args; private RemoteSession session; - public CmdEvent(RemoteSession session, String cmd, String[] args) { + public CmdEvent(RemoteSession session) { this.session = session; - this.command = cmd; - this.args = args; } - public void execute() { + public void execute(String command, String[] args) { // events.clear if (command.equals("clear")) { session.interactEventQueue.clear(); diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java index deb8455b..2f87bcb7 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java @@ -8,14 +8,10 @@ public class CmdPlayer { private final String preFix = "player."; - private String command; - private String[] args; private RemoteSession session; - public CmdPlayer(RemoteSession session, String cmd, String[] args) { + public CmdPlayer(RemoteSession session) { this.session = session; - this.command = cmd; - this.args = args; } private boolean serverHasPlayer() { @@ -34,7 +30,7 @@ private Player getCurrentPlayer() { return null; } - public void execute() { + public void execute(String command, String[] args) { Player currentPlayer = getCurrentPlayer(); if (currentPlayer == null) { diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java index dbf925a3..e5283cca 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java @@ -25,16 +25,13 @@ public class CmdWorld { private RaspberryJuicePlugin plugin; private World world; - public CmdWorld(RemoteSession session, World world, String cmd, String[] args) { + public CmdWorld(RemoteSession session) { this.session = session; - this.command = cmd; - this.args = args; - this.world = world; this.plugin = session.plugin; } - public void execute() { + public void execute(World world, String cmd, String[] args) { // world.getBlock if (command.equals("getBlock")) { From c0294c2c80cea69b91aa050b63b61fc6d07d9a1d Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sat, 7 Sep 2019 00:03:05 +0800 Subject: [PATCH 57/82] add example py file --- out/example/example1.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 out/example/example1.py diff --git a/out/example/example1.py b/out/example/example1.py new file mode 100644 index 00000000..e69de29b From cc01ba60e522d2653142f738a5488107449099b7 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sat, 7 Sep 2019 23:45:54 +0800 Subject: [PATCH 58/82] example - explosion --- out/example/example1.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/out/example/example1.py b/out/example/example1.py index e69de29b..0b8a804b 100644 --- a/out/example/example1.py +++ b/out/example/example1.py @@ -0,0 +1,6 @@ +from mcpi.minecraft import Minecraft +mc = Minecraft.create() + +x,y,z = mc.player.getTilePos() + +mc.createExplosion(x,y,z) \ No newline at end of file From 2ca0a13bd46e44770e2d57b313c49fc15d3d0ceb Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sun, 8 Sep 2019 15:46:27 +0800 Subject: [PATCH 59/82] Modify return datatype of getBlocks (String to 3 dim list) --- out/mcpi/minecraft.py | 27 +++++++++++++++++++++++---- out/mcpi/util.py | 2 +- src/main/resources/mcpi/minecraft.py | 22 ++++++++++++++++++++-- 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/out/mcpi/minecraft.py b/out/mcpi/minecraft.py index 80be8012..ece40848 100644 --- a/out/mcpi/minecraft.py +++ b/out/mcpi/minecraft.py @@ -2,7 +2,9 @@ from .vec3 import Vec3 from .event import BlockEvent, ChatEvent #from .entity import Entity +#from .block import Block from .util import flatten +from warnings import warn """ Minecraft PI low level api v0.1_1 @@ -176,7 +178,24 @@ def getBlock(self, x:int, y:int, z:int) -> str: def getBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int) -> list: """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" - return self.conn.sendReceive(b"world.getBlocks", x1, y1, z1, x2, y2, z2) + blocks = self.conn.sendReceive(b"world.getBlocks", x1, y1, z1, x2, y2, z2) + arr1d = blocks.split(',') + + xSize = abs(x1 - x2) + 1 + ySize = abs(y1 - y2) + 1 + zSize = abs(z1 - z2) + 1 + totalSize = xSize * ySize * zSize + arr3d = [] + + if len(arr1d) != totalSize: + warn('Get number of blocks is incomplete') + + for i in range(0,totalSize,xSize*ySize): + curArr = [] + for j in range(0,xSize*ySize,xSize): + curArr.append(arr1d[i+j:i+j+xSize]) + arr3d.append(curArr) + return arr3d def setBlock(self, x:int, y:int, z:int, block:str) -> None: """Set block (x,y,z,id,[data])""" @@ -207,7 +226,7 @@ def postToChat(self, *msg) -> None: """Post a message to the game chat""" self.conn.send(b"chat.post", msg) - # TODO:Use a .py file processing Sign + # TODO:修改成一個py檔處理Sign def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", line2:str="", line3:str="", line4:str="") -> None: minecraftSignsType = ["SPRUCE_SIGN","ACACIA_SIGN","BIRCH_SIGN","DARK_OAK_SIGN","JUNGLE_SIGN","OAK_SIGN"] @@ -241,7 +260,7 @@ def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", signDir = minecraftSignsDir.get(0) signType = signType.upper() - if signType not in minecraftSignsType: raise Exception("Sign name error") + if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") self.conn.send(b"world.setSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4="") -> None: @@ -263,7 +282,7 @@ def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",l signDir = minecraftSignsDir.get(0) signType = signType.upper() - if signType not in minecraftSignsType: raise Exception("Sign name error") + if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") self.conn.send(b"world.setWallSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) def spawnEntity(self, x:int, y:int, z:int, entityID:int) -> int: diff --git a/out/mcpi/util.py b/out/mcpi/util.py index c6531913..9791072e 100644 --- a/out/mcpi/util.py +++ b/out/mcpi/util.py @@ -15,4 +15,4 @@ def _misc_to_bytes(m): See `Connection.send` for more details. """ - return str(m).encode("utf8") + return str(m).encode("cp437") diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index 996a3225..ece40848 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -2,8 +2,9 @@ from .vec3 import Vec3 from .event import BlockEvent, ChatEvent #from .entity import Entity -from .block import Block +#from .block import Block from .util import flatten +from warnings import warn """ Minecraft PI low level api v0.1_1 @@ -177,7 +178,24 @@ def getBlock(self, x:int, y:int, z:int) -> str: def getBlocks(self, x1:int, y1:int, z1:int, x2:int, y2:int, z2:int) -> list: """Get a cuboid of blocks (x0,y0,z0,x1,y1,z1) => [id:int]""" - return self.conn.sendReceive(b"world.getBlocks", x1, y1, z1, x2, y2, z2) + blocks = self.conn.sendReceive(b"world.getBlocks", x1, y1, z1, x2, y2, z2) + arr1d = blocks.split(',') + + xSize = abs(x1 - x2) + 1 + ySize = abs(y1 - y2) + 1 + zSize = abs(z1 - z2) + 1 + totalSize = xSize * ySize * zSize + arr3d = [] + + if len(arr1d) != totalSize: + warn('Get number of blocks is incomplete') + + for i in range(0,totalSize,xSize*ySize): + curArr = [] + for j in range(0,xSize*ySize,xSize): + curArr.append(arr1d[i+j:i+j+xSize]) + arr3d.append(curArr) + return arr3d def setBlock(self, x:int, y:int, z:int, block:str) -> None: """Set block (x,y,z,id,[data])""" From 8083c3ec768803efbf64d676d4cd05485d0f3dce Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Mon, 9 Sep 2019 20:48:27 +0800 Subject: [PATCH 60/82] Remove unuse variable --- .../java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java index e5283cca..dc1c6b5e 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java @@ -19,11 +19,8 @@ public class CmdWorld { private final String preFix = "world."; - private String command; - private String[] args; private RemoteSession session; private RaspberryJuicePlugin plugin; - private World world; public CmdWorld(RemoteSession session) { this.session = session; @@ -31,7 +28,7 @@ public CmdWorld(RemoteSession session) { this.plugin = session.plugin; } - public void execute(World world, String cmd, String[] args) { + public void execute(World world, String command, String[] args) { // world.getBlock if (command.equals("getBlock")) { From c537f74b317abc555776d9654cf01f0edc3394f7 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Mon, 9 Sep 2019 20:56:17 +0800 Subject: [PATCH 61/82] fix bug of entity.getName --- .../java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java index f4895e36..3e56ad8b 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdEntity.java @@ -93,7 +93,7 @@ public void execute(String command, String[] args) { session.send(entity.getLocation().getPitch()); // entity.getListName - } else if (command.equals("entity.getName")) { + } else if (command.equals("getName")) { if (entity instanceof Player) { Player p = (Player) entity; //sending list name because plugin.getNamedPlayer() uses list name From ba4e474ee492a02717380516cc7aefd2ec843cb1 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Mon, 9 Sep 2019 21:28:28 +0800 Subject: [PATCH 62/82] add player.getFoodLevel method --- out/jar/RaspberryJuice.jar | Bin 61606 -> 62846 bytes .../raspberryjuice/cmd/CmdPlayer.java | 5 +++++ src/main/resources/mcpi/minecraft.py | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/out/jar/RaspberryJuice.jar b/out/jar/RaspberryJuice.jar index 84f568569ba12172006ea924fb48a76e61d8a25d..d878be0183e567dc6cef530bb103cada8ef15d95 100644 GIT binary patch delta 25569 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 Q03JX9Px# delta 24370 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 G<^Btt5RUKw diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java index 2f87bcb7..a81861cc 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java @@ -124,6 +124,11 @@ public void execute(String command, String[] args) { session.send(currentPlayer.getLocation().getPitch()); + // player.getFoodLevel + }else if (command.equals("getFoodLevel")){ + + session.send(currentPlayer.getFoodLevel()); + // player.sendTitle } else if (command.equals("sendTitle")) { diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index ece40848..3dfc4892 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -116,6 +116,11 @@ def getPitch(self) -> float: return CmdPositioner.getPitch(self, []) def setPitch(self, pitch) -> None: return CmdPositioner.setPitch(self, [], pitch) + + def getFoodLevel(self) -> int: + print('test') + return self.conn.sendReceive(self.pkg + b".getFoodLevel", id) + def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) From 21aca8697c21de99bb8f38272142d7534e1b9ae4 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Tue, 10 Sep 2019 17:43:48 +0800 Subject: [PATCH 63/82] Add player.setFoodLevel Fix bug of not create Object --- .../raspberryjuice/RemoteSession.java | 18 +++++++++--- .../raspberryjuice/cmd/CmdPlayer.java | 28 +++++++++++-------- .../raspberryjuice/cmd/CmdWorld.java | 1 - src/main/resources/mcpi/minecraft.py | 7 +++-- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java index 3cadb25b..4d4ffbc4 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/RemoteSession.java @@ -51,16 +51,17 @@ public class RemoteSession { private Player attachedPlayer = null; - private CmdEntity cmdEntity = new CmdEntity(this); - private CmdEvent cmdEvent = new CmdEvent(this); - private CmdPlayer cmdPlayer = new CmdPlayer(this); - private CmdWorld cmdWorld = new CmdWorld(this); + private CmdEntity cmdEntity; + private CmdEvent cmdEvent; + private CmdPlayer cmdPlayer; + private CmdWorld cmdWorld; public RemoteSession(RaspberryJuicePlugin plugin, Socket socket) throws IOException { this.socket = socket; this.plugin = plugin; this.locationType = plugin.getLocationType(); init(); + createCmdObject(); } public void init() throws IOException { @@ -73,6 +74,14 @@ public void init() throws IOException { plugin.getLogger().info("Opened connection to" + socket.getRemoteSocketAddress() + "."); } + public void createCmdObject(){ + cmdEntity = new CmdEntity(this); + cmdEvent = new CmdEvent(this); + cmdPlayer = new CmdPlayer(this); + cmdWorld = new CmdWorld(this); + + } + protected void startThreads() { inThread = new Thread(new InputThread()); inThread.start(); @@ -164,6 +173,7 @@ protected void handleCommand(String c, String[] args) { cmdEntity.execute(cmd[1], args); } else if (cmd[0].equals("world")) { +// new CmdWorld(this).execute(world, cmd[1], args); cmdWorld.execute(world, cmd[1], args); } else if (cmd[0].equals("events")) { diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java index a81861cc..bd3ab073 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java @@ -7,12 +7,12 @@ import org.bukkit.util.Vector; public class CmdPlayer { - private final String preFix = "player."; - private RemoteSession session; + private final String preFix = "player."; + private RemoteSession session; - public CmdPlayer(RemoteSession session) { - this.session = session; - } + public CmdPlayer(RemoteSession session) { + this.session = session; + } private boolean serverHasPlayer() { return !Bukkit.getOnlinePlayers().isEmpty(); @@ -30,7 +30,7 @@ private Player getCurrentPlayer() { return null; } - public void execute(String command, String[] args) { + public void execute(String command, String[] args) { Player currentPlayer = getCurrentPlayer(); if (currentPlayer == null) { @@ -124,13 +124,19 @@ public void execute(String command, String[] args) { session.send(currentPlayer.getLocation().getPitch()); - // player.getFoodLevel - }else if (command.equals("getFoodLevel")){ + // player.getFoodLevel + } else if (command.equals("getFoodLevel")) { + + session.send(currentPlayer.getFoodLevel()); + + // player.setFoodLevel + } else if (command.equals("setFoodLevel")) { + Integer foodLevel = Integer.parseInt(args[0]); - session.send(currentPlayer.getFoodLevel()); + currentPlayer.setFoodLevel(foodLevel); - // player.sendTitle - } else if (command.equals("sendTitle")) { + // player.sendTitle + } else if (command.equals("sendTitle")) { String title = args[0]; String subTitle = args[1]; diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java index dc1c6b5e..2717f126 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdWorld.java @@ -24,7 +24,6 @@ public class CmdWorld { public CmdWorld(RemoteSession session) { this.session = session; - this.plugin = session.plugin; } diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index 3dfc4892..ac3f1c1c 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -38,6 +38,7 @@ def setPos(self, ID, x:float, y:float, z:float) -> None: self.conn.send(self.pkg + b".setPos", ID, x, y, z) def getTilePos(self, ID) -> Vec3: + print(self.pkg) """Get entity tile position (entityId:int) => Vec3""" s = self.conn.sendReceive(self.pkg + b".getTile", ID) return Vec3(*list(map(int, s.split(",")))) @@ -118,8 +119,10 @@ def setPitch(self, pitch) -> None: return CmdPositioner.setPitch(self, [], pitch) def getFoodLevel(self) -> int: - print('test') - return self.conn.sendReceive(self.pkg + b".getFoodLevel", id) + return self.conn.sendReceive(self.pkg + b".getFoodLevel", []) + + def setFoodLevel(self, foodLevel:int) -> None: + self.conn.send(self.pkg + b".setFoodLevel", foodLevel) def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) From c17ec0529570b5ed88de80466584cf14761b426f Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Tue, 10 Sep 2019 18:59:58 +0800 Subject: [PATCH 64/82] remove test code --- src/main/resources/mcpi/minecraft.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index ac3f1c1c..5d98bb91 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -38,7 +38,6 @@ def setPos(self, ID, x:float, y:float, z:float) -> None: self.conn.send(self.pkg + b".setPos", ID, x, y, z) def getTilePos(self, ID) -> Vec3: - print(self.pkg) """Get entity tile position (entityId:int) => Vec3""" s = self.conn.sendReceive(self.pkg + b".getTile", ID) return Vec3(*list(map(int, s.split(",")))) From e8ade86c70c00db94f6b72bcc0c83c26054b8715 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 11 Sep 2019 18:59:30 +0800 Subject: [PATCH 65/82] edit language of sign name error message --- src/main/resources/mcpi/minecraft.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index 5d98bb91..40b54f5b 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -267,7 +267,7 @@ def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", signDir = minecraftSignsDir.get(0) signType = signType.upper() - if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") + if signType not in minecraftSignsType: raise Exception("Sign name error") self.conn.send(b"world.setSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4="") -> None: @@ -289,7 +289,7 @@ def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",l signDir = minecraftSignsDir.get(0) signType = signType.upper() - if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") + if signType not in minecraftSignsType: raise Exception("Sign name error") self.conn.send(b"world.setWallSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) def spawnEntity(self, x:int, y:int, z:int, entityID:int) -> int: From e3bc106247d71f3ffd28acea0a9a6eeb55e62c02 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Wed, 11 Sep 2019 19:58:26 +0800 Subject: [PATCH 66/82] Add player.getHealth method --- out/jar/RaspberryJuice.jar | Bin 62846 -> 62901 bytes out/mcpi/minecraft.py | 14 ++++++++++++-- .../raspberryjuice/cmd/CmdPlayer.java | 8 ++++++-- src/main/resources/mcpi/minecraft.py | 3 +++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/out/jar/RaspberryJuice.jar b/out/jar/RaspberryJuice.jar index d878be0183e567dc6cef530bb103cada8ef15d95..0c130ee3954a5219bde91afaba0b3b09eaa94d85 100644 GIT binary patch delta 20627 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 diff --git a/out/mcpi/minecraft.py b/out/mcpi/minecraft.py index ece40848..dc09f5d5 100644 --- a/out/mcpi/minecraft.py +++ b/out/mcpi/minecraft.py @@ -116,6 +116,16 @@ def getPitch(self) -> float: return CmdPositioner.getPitch(self, []) def setPitch(self, pitch) -> None: return CmdPositioner.setPitch(self, [], pitch) + + def getFoodLevel(self) -> int: + return self.conn.sendReceive(self.pkg + b".getFoodLevel", []) + + def setFoodLevel(self, foodLevel:int) -> None: + self.conn.send(self.pkg + b".setFoodLevel", foodLevel) + + def getHealth(self) -> float: + return self.conn.sendReceive(self.pkg + b".getHealth", []) + def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) @@ -260,7 +270,7 @@ def setSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1:str="", signDir = minecraftSignsDir.get(0) signType = signType.upper() - if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") + if signType not in minecraftSignsType: raise Exception("Sign name error") self.conn.send(b"world.setSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",line2="",line3="",line4="") -> None: @@ -282,7 +292,7 @@ def setWallSign(self, x:int, y:int, z:int, signType:str, signDir:int, line1="",l signDir = minecraftSignsDir.get(0) signType = signType.upper() - if signType not in minecraftSignsType: raise Exception("告示牌名稱打錯") + if signType not in minecraftSignsType: raise Exception("Sign name error") self.conn.send(b"world.setWallSign", x, y, z , signType, signDir, line1 ,line2 ,line3 ,line4) def spawnEntity(self, x:int, y:int, z:int, entityID:int) -> int: diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java index bd3ab073..a2c34fcb 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java @@ -131,9 +131,13 @@ public void execute(String command, String[] args) { // player.setFoodLevel } else if (command.equals("setFoodLevel")) { - Integer foodLevel = Integer.parseInt(args[0]); + Integer foodLevel = Integer.parseInt(args[0]); - currentPlayer.setFoodLevel(foodLevel); + currentPlayer.setFoodLevel(foodLevel); + + } else if(command.equals("getHealth")){ + + session.send(currentPlayer.getHealth()); // player.sendTitle } else if (command.equals("sendTitle")) { diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index 40b54f5b..dc09f5d5 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -122,6 +122,9 @@ def getFoodLevel(self) -> int: def setFoodLevel(self, foodLevel:int) -> None: self.conn.send(self.pkg + b".setFoodLevel", foodLevel) + + def getHealth(self) -> float: + return self.conn.sendReceive(self.pkg + b".getHealth", []) def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) From c854fd9839677522fdbc72e91947a2fac441092b Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Thu, 12 Sep 2019 20:11:42 +0800 Subject: [PATCH 67/82] Add player.setHealth method --- out/jar/RaspberryJuice.jar | Bin 62901 -> 62948 bytes out/mcpi/minecraft.py | 3 +++ .../raspberryjuice/cmd/CmdPlayer.java | 6 +++++- src/main/resources/mcpi/minecraft.py | 3 +++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/out/jar/RaspberryJuice.jar b/out/jar/RaspberryJuice.jar index 0c130ee3954a5219bde91afaba0b3b09eaa94d85..27bfb26445383d9d454a3c8b7f3422a9aabc91b8 100644 GIT binary patch delta 3370 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 delta 3309 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 diff --git a/out/mcpi/minecraft.py b/out/mcpi/minecraft.py index dc09f5d5..df8422c7 100644 --- a/out/mcpi/minecraft.py +++ b/out/mcpi/minecraft.py @@ -126,6 +126,9 @@ def setFoodLevel(self, foodLevel:int) -> None: def getHealth(self) -> float: return self.conn.sendReceive(self.pkg + b".getHealth", []) + def setHealth(self, health:float) -> None: + self.conn.send(self.pkg + b".setHealth", [], health) + def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) diff --git a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java index a2c34fcb..679c6f1e 100644 --- a/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java +++ b/src/main/java/net/zhuoweizhang/raspberryjuice/cmd/CmdPlayer.java @@ -135,10 +135,14 @@ public void execute(String command, String[] args) { currentPlayer.setFoodLevel(foodLevel); - } else if(command.equals("getHealth")){ + } else if(command.equals("getHealth")) { session.send(currentPlayer.getHealth()); + } else if(command.equals("setHealth")){ + Double health = Double.parseDouble(args[0]); + + currentPlayer.setHealth(health); // player.sendTitle } else if (command.equals("sendTitle")) { diff --git a/src/main/resources/mcpi/minecraft.py b/src/main/resources/mcpi/minecraft.py index dc09f5d5..df8422c7 100644 --- a/src/main/resources/mcpi/minecraft.py +++ b/src/main/resources/mcpi/minecraft.py @@ -126,6 +126,9 @@ def setFoodLevel(self, foodLevel:int) -> None: def getHealth(self) -> float: return self.conn.sendReceive(self.pkg + b".getHealth", []) + def setHealth(self, health:float) -> None: + self.conn.send(self.pkg + b".setHealth", [], health) + def sendTitle(self, title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: self.conn.send(self.pkg + b".sendTitle", id, title, subTitle, fadeIn, stay, fadeOut) From c4edd3cde2bcd5a32f0fc6c8a0e400b06f934829 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Fri, 13 Sep 2019 15:56:35 +0800 Subject: [PATCH 68/82] Midify READMD.md method --- README.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dc7ef779..de0adf5e 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ A Minecraft Bukkit plugin which connect to python program - Get player's rotation - - player.setRotation(yaw) -> None: + - player.setRotation(yaw:float) -> None: - Set player's rotation @@ -98,7 +98,23 @@ A Minecraft Bukkit plugin which connect to python program - player.setPitch(pitch) -> None: - - Set player's pitch + - Set player's pitch + + + - player.getFoodLevel() -> int: + - Get player's food level + + +- player.setFoodLevel(foodLevel:int) -> None: + - Set player's food level + + +- player.getHealth() -> float: + - Get player's health + + +- player.setHealth(health:float) -> None: + - Set player's health - player.sendTitle(title:str, subTitle:str="", fadeIn:int=10, stay:int=70, fadeOut:int=20) -> None: From 173e9102c983abb7595d777d2763ca64a3950b23 Mon Sep 17 00:00:00 2001 From: MinecraftDawn Date: Sat, 14 Sep 2019 13:03:59 +0800 Subject: [PATCH 69/82] Modify version to 1.14-07 Rebuild javadoc --- out/jar/RaspberryJuice.jar | Bin 62948 -> 62707 bytes out/javadoc/allclasses-frame.html | 4 +- out/javadoc/allclasses-noframe.html | 4 +- out/javadoc/constant-values.html | 4 +- out/javadoc/deprecated-list.html | 4 +- out/javadoc/help-doc.html | 4 +- out/javadoc/index-files/index-1.html | 4 +- out/javadoc/index-files/index-10.html | 4 +- out/javadoc/index-files/index-11.html | 4 +- out/javadoc/index-files/index-12.html | 4 +- out/javadoc/index-files/index-13.html | 4 +- out/javadoc/index-files/index-14.html | 4 +- out/javadoc/index-files/index-15.html | 4 +- out/javadoc/index-files/index-16.html | 4 +- out/javadoc/index-files/index-2.html | 14 ++-- out/javadoc/index-files/index-3.html | 12 +-- out/javadoc/index-files/index-4.html | 4 +- out/javadoc/index-files/index-5.html | 4 +- out/javadoc/index-files/index-6.html | 4 +- out/javadoc/index-files/index-7.html | 4 +- out/javadoc/index-files/index-8.html | 4 +- out/javadoc/index-files/index-9.html | 4 +- out/javadoc/index.html | 2 +- .../raspberryjuice/CustomBlockFace.html | 8 +- .../raspberryjuice/HitClickType.html | 12 +-- .../raspberryjuice/LocationType.html | 12 +-- .../raspberryjuice/RaspberryJuicePlugin.html | 36 ++++---- .../raspberryjuice/RemoteSession.html | 79 ++++++++++-------- .../raspberryjuice/ServerListenerThread.html | 12 +-- .../raspberryjuice/cmd/CmdEntity.html | 26 +++--- .../raspberryjuice/cmd/CmdEvent.html | 54 ++++++++++-- .../raspberryjuice/cmd/CmdPlayer.html | 30 ++++--- .../raspberryjuice/cmd/CmdWorld.html | 30 ++++--- .../raspberryjuice/cmd/package-frame.html | 6 +- .../raspberryjuice/cmd/package-summary.html | 16 ++-- .../raspberryjuice/cmd/package-tree.html | 16 ++-- .../raspberryjuice/package-frame.html | 6 +- .../raspberryjuice/package-summary.html | 20 ++--- .../raspberryjuice/package-tree.html | 20 ++--- out/javadoc/overview-frame.html | 4 +- out/javadoc/overview-summary.html | 4 +- out/javadoc/overview-tree.html | 4 +- src/main/resources/plugin.yml | 2 +- 43 files changed, 274 insertions(+), 227 deletions(-) diff --git a/out/jar/RaspberryJuice.jar b/out/jar/RaspberryJuice.jar index 27bfb26445383d9d454a3c8b7f3422a9aabc91b8..eabc353ad44737e83a3cabac5670756e672fd1be 100644 GIT binary patch delta 5325 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 delta 5559 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 diff --git a/out/javadoc/allclasses-frame.html b/out/javadoc/allclasses-frame.html index f684dcf6..2e56fe2c 100644 --- a/out/javadoc/allclasses-frame.html +++ b/out/javadoc/allclasses-frame.html @@ -2,9 +2,9 @@ - + All Classes - + diff --git a/out/javadoc/allclasses-noframe.html b/out/javadoc/allclasses-noframe.html index d3d660c3..2312b8a1 100644 --- a/out/javadoc/allclasses-noframe.html +++ b/out/javadoc/allclasses-noframe.html @@ -2,9 +2,9 @@ - + All Classes - + diff --git a/out/javadoc/constant-values.html b/out/javadoc/constant-values.html index 0c287124..c52b55ee 100644 --- a/out/javadoc/constant-values.html +++ b/out/javadoc/constant-values.html @@ -2,9 +2,9 @@ - + Constant Field Values - + diff --git a/out/javadoc/deprecated-list.html b/out/javadoc/deprecated-list.html index a27e9bcf..7daca6d0 100644 --- a/out/javadoc/deprecated-list.html +++ b/out/javadoc/deprecated-list.html @@ -2,9 +2,9 @@ - + Deprecated List - + diff --git a/out/javadoc/help-doc.html b/out/javadoc/help-doc.html index eaf72fbb..957b3cac 100644 --- a/out/javadoc/help-doc.html +++ b/out/javadoc/help-doc.html @@ -2,9 +2,9 @@ - + API Help - + diff --git a/out/javadoc/index-files/index-1.html b/out/javadoc/index-files/index-1.html index 2cbdba22..ea7afb14 100644 --- a/out/javadoc/index-files/index-1.html +++ b/out/javadoc/index-files/index-1.html @@ -2,9 +2,9 @@ - + B-Index - + diff --git a/out/javadoc/index-files/index-10.html b/out/javadoc/index-files/index-10.html index 5114bb63..92f668c2 100644 --- a/out/javadoc/index-files/index-10.html +++ b/out/javadoc/index-files/index-10.html @@ -2,9 +2,9 @@ - + O-Index - + diff --git a/out/javadoc/index-files/index-11.html b/out/javadoc/index-files/index-11.html index de6ad4d3..5c71c5b9 100644 --- a/out/javadoc/index-files/index-11.html +++ b/out/javadoc/index-files/index-11.html @@ -2,9 +2,9 @@ - + P-Index - + diff --git a/out/javadoc/index-files/index-12.html b/out/javadoc/index-files/index-12.html index 41baf273..5048debb 100644 --- a/out/javadoc/index-files/index-12.html +++ b/out/javadoc/index-files/index-12.html @@ -2,9 +2,9 @@ - + Q-Index - + diff --git a/out/javadoc/index-files/index-13.html b/out/javadoc/index-files/index-13.html index bd9880dc..7d738e37 100644 --- a/out/javadoc/index-files/index-13.html +++ b/out/javadoc/index-files/index-13.html @@ -2,9 +2,9 @@ - + R-Index - + diff --git a/out/javadoc/index-files/index-14.html b/out/javadoc/index-files/index-14.html index 5b925293..ac745853 100644 --- a/out/javadoc/index-files/index-14.html +++ b/out/javadoc/index-files/index-14.html @@ -2,9 +2,9 @@ - + S-Index - + diff --git a/out/javadoc/index-files/index-15.html b/out/javadoc/index-files/index-15.html index 7edf781f..1d44bea5 100644 --- a/out/javadoc/index-files/index-15.html +++ b/out/javadoc/index-files/index-15.html @@ -2,9 +2,9 @@ - + T-Index - + diff --git a/out/javadoc/index-files/index-16.html b/out/javadoc/index-files/index-16.html index 4dee48ad..36fc62ec 100644 --- a/out/javadoc/index-files/index-16.html +++ b/out/javadoc/index-files/index-16.html @@ -2,9 +2,9 @@ - + V-Index - + diff --git a/out/javadoc/index-files/index-2.html b/out/javadoc/index-files/index-2.html index 058b8536..2e9297f6 100644 --- a/out/javadoc/index-files/index-2.html +++ b/out/javadoc/index-files/index-2.html @@ -2,9 +2,9 @@ - + C-Index - + @@ -81,19 +81,21 @@

    C

     
    CmdEntity - Class in net.zhuoweizhang.raspberryjuice.cmd
     
    -
    CmdEntity(RemoteSession, String, String[]) - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdEntity
    +
    CmdEntity(RemoteSession) - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdEntity
     
    CmdEvent - Class in net.zhuoweizhang.raspberryjuice.cmd
     
    -
    CmdEvent() - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdEvent
    +
    CmdEvent(RemoteSession) - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdEvent
     
    CmdPlayer - Class in net.zhuoweizhang.raspberryjuice.cmd
     
    -
    CmdPlayer(RemoteSession, String, String[]) - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer
    +
    CmdPlayer(RemoteSession) - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer
     
    CmdWorld - Class in net.zhuoweizhang.raspberryjuice.cmd
     
    -
    CmdWorld(RemoteSession, World, String, String[]) - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdWorld
    +
    CmdWorld(RemoteSession) - Constructor for class net.zhuoweizhang.raspberryjuice.cmd.CmdWorld
    +
     
    +
    createCmdObject() - Method in class net.zhuoweizhang.raspberryjuice.RemoteSession
     
    CustomBlockFace - Class in net.zhuoweizhang.raspberryjuice
     
    diff --git a/out/javadoc/index-files/index-3.html b/out/javadoc/index-files/index-3.html index b6cf54fb..72f38a92 100644 --- a/out/javadoc/index-files/index-3.html +++ b/out/javadoc/index-files/index-3.html @@ -2,9 +2,9 @@ - + E-Index - + @@ -73,11 +73,13 @@

    E

    -
    execute() - Method in class net.zhuoweizhang.raspberryjuice.cmd.CmdEntity
    +
    execute(String, String[]) - Method in class net.zhuoweizhang.raspberryjuice.cmd.CmdEntity
     
    -
    execute() - Method in class net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer
    +
    execute(String, String[]) - Method in class net.zhuoweizhang.raspberryjuice.cmd.CmdEvent
     
    -
    execute() - Method in class net.zhuoweizhang.raspberryjuice.cmd.CmdWorld
    +
    execute(String, String[]) - Method in class net.zhuoweizhang.raspberryjuice.cmd.CmdPlayer
    +
     
    +
    execute(World, String, String[]) - Method in class net.zhuoweizhang.raspberryjuice.cmd.CmdWorld
     
    B C E G H I K L N O P Q R S T V  diff --git a/out/javadoc/index-files/index-4.html b/out/javadoc/index-files/index-4.html index 0ca3cfaa..84c9b813 100644 --- a/out/javadoc/index-files/index-4.html +++ b/out/javadoc/index-files/index-4.html @@ -2,9 +2,9 @@ - + G-Index - + diff --git a/out/javadoc/index-files/index-5.html b/out/javadoc/index-files/index-5.html index b27e1992..59dfa11e 100644 --- a/out/javadoc/index-files/index-5.html +++ b/out/javadoc/index-files/index-5.html @@ -2,9 +2,9 @@ - + H-Index - + diff --git a/out/javadoc/index-files/index-6.html b/out/javadoc/index-files/index-6.html index c0982087..7505390c 100644 --- a/out/javadoc/index-files/index-6.html +++ b/out/javadoc/index-files/index-6.html @@ -2,9 +2,9 @@ - + I-Index - + diff --git a/out/javadoc/index-files/index-7.html b/out/javadoc/index-files/index-7.html index d14e9485..de0254be 100644 --- a/out/javadoc/index-files/index-7.html +++ b/out/javadoc/index-files/index-7.html @@ -2,9 +2,9 @@ - + K-Index - + diff --git a/out/javadoc/index-files/index-8.html b/out/javadoc/index-files/index-8.html index 2b4e9df3..1be97c54 100644 --- a/out/javadoc/index-files/index-8.html +++ b/out/javadoc/index-files/index-8.html @@ -2,9 +2,9 @@ - + L-Index - + diff --git a/out/javadoc/index-files/index-9.html b/out/javadoc/index-files/index-9.html index d26c6308..856be564 100644 --- a/out/javadoc/index-files/index-9.html +++ b/out/javadoc/index-files/index-9.html @@ -2,9 +2,9 @@ - + N-Index - + diff --git a/out/javadoc/index.html b/out/javadoc/index.html index 45702a63..304cc5c5 100644 --- a/out/javadoc/index.html +++ b/out/javadoc/index.html @@ -2,7 +2,7 @@ - + Generated Documentation (Untitled) @@ -49,7 +49,7 @@