[MECH] Elevators [BukkitDev]

Discussion in 'Archived: Plugin Releases' started by Cybran, Jan 27, 2011.

  1. Offline

    Cybran

    [​IMG]

    The plugin will be continued at dev.bukkit.org!
    Want to help? Sign up as an alpha- or beta-tester!


    What this plugin does:

    It creates vertical moving elevators, which can be controlled by redstone-powered blocks.

    Features (open)

    • Creating elevators with an individual size (square or rectangle shape).
    • Floor-management: define your own floors with their own names, being able to call an elevator on every floor by – per example – pressing a button.
    • Movement-triggers: control the elevator with redstone circuits or buttons or any other redstone-powered block!
    • Elevator movement-controls: have different buttons for moving the elevator up and down, skip floors by pressing a control button several times.
    • Command-queuing: the elevator will move to the different floors one after the other if it gets more than one command at the same time.
    • Build on the elevator whatever you want (nearly ;))
    • Use redstone outputs to link the elevator to iron doors or more complex circuits.
    • Connect the elevator to your minecart system!
    • Use the elevator as something else, like a lava door.
    • Build automtically opening/closing glass doors around or on your elevator!
    • Protect your elevator with a password or user restriction.
    • Permissions support!

    How to install (open)

    • The server mod:
      Just copy the Elevators.jar into your plugins/ folder. That's it. You can modify the config later (See section Tutorials>Configuration).
    • ???

    FAQ (open)

    • Q: I'm completely new to this plugin! What shall I do?
      A: First, install the mod (see How to install), then you can read the basic tutorials in the tutorial section below.
    • Q: I'm sick of using buttons all the time to control the elevator! I want to include my redstone circuits!
      A: You don't have to use buttons! You can right-click any type of redstone-powered block! The buttons are just the easiest way.
    • Q: I want to build several buttons or other blocks for the SAME floor! How to do it?
      A: Have a look at the "direct" command. It links other blocks to an already existing floor.
    • Q: I try to build a lava door, but the lava is transported with the elevator! How can I let displace the lava by the elevator?
      A: At first, build the elevator like it should be later. Then, use the command /elev lock. Now your elevator will not grab any blocks or fluids placed later on it.
    • Q: Is there a size limitation for the elevator's shape?
      A: Yes. Normally, there is a maximum for the area of 25 blocks. But: you can change this limitation in the config.

    Command usage & Permissions (open)

    [...] = optional parameter. ...|... = select ONE of the values, they all mean the same. <...> = put your own values here.

    /elevators|elevator|elev <command from the list below>

    The basic commands:
    • help|? - shows the commands.
    • permission|permissions - shows your current permission level.
    • create - creates a new elevator at your current position.
    • remove - removes an existing elevator from your current position.
    • call|floor <Floorname> - creates a new floor with the given Floorname.
    • up - creates a new UpBlock, right-click to select block after command.
    • down - creates a new DownBlock, right-click to select block after command.
    • go|direct [<Floorname>] - creates a new link to the given floor or the nearest. Toggled by redstone input. Right-click a block.
    • redstoneout [<Floorname>] - creates a redstoneoutput, right-click to select the output block after. Has to be a lever.
    • glassdoor [<Floorname>] - Type command and place glass blocks. A door will be created to the given floor or the nearest. Use /elev finish to finish and disable glass block listener.
    • glassremove [<Floorname>] - Removes all glass blocks linked to the given floor or from the cabin when no floor is specified.
    • finish - Finishes an action (like glassdoor placement).
    • info - creates debugging info file. CONSOLE ONLY.
    • lock - locks the cabin blocks to stop updating before every movement.
    The more advanced ones:
    • help|? - shows the commands.
    • permission|permissions - shows your current permission level.
    • create [password <Password>] [users <Username1> <Username2> <UsernameN>]- creates a new elevator at your current position, optional with password or user whitelist.
    • remove - removes an existing elevator from your current position.
    • call|floor <Floorname> [password <Password>] [users <Username1> <Username2> <UsernameN>] - creates a new floor with the given Floorname, optional with password or user whitelist.
    • up - creates a new UpBlock, right-click to select block after command.
    • down - creates a new DownBlock, right-click to select block after command.
    • go|direct [<Floorname>] - creates a new link to the given floor or the nearest. Toggled by redstone input. Right-click a block.
    • redstoneout [<Floorname>] - creates a redstoneoutput, right-click to select the output block after. Has to be a lever.
    • glassdoor [<Floorname>] [direction <DirectionIdentifier>] - Type command and place glass blocks. A door will be created to the given floor or the nearest. Use /elev finish to finish and disable glass block listener. You can use a DirectionIdentifier (left,right,up,down,splitH,splitV) to set the opening direction manually.
    • glassremove [<Floorname>] - Removes all glass blocks linked to the given floor or from the cabin when no floor is specified.
    • finish - Finishes an action (like glassdoor placement).
    • info - creates debugging info file. CONSOLE ONLY.
    • pw|password [<Floorname>] [password <Password>] - Overrides password protection for the given floor or the whole elevator.
    • user [<Floorname>] [users <Username1> <Username2> <UsernameN>] - Overrides user whitelist for the given floor or the whole elevator.
    • give [<Username>] - changes the owner of the elevator. Once changed, a reset is not possible.
    • lock - locks the cabin blocks to stop updating before every movement.
    Permission nodes:
    • elevators.builder - basic permission level, user can set up elevators.
    • elevators.advancedbuilder - advanced permission level, user can protect elevators with password / user list.
    • elevators.operator - ignores owner, passwords and user restrictions, can modify everything.

    Tutorials (open)

    Basic setup:
    • Prepare a shaft – size can be between 1x1 up to 5x5. There has to be air in the whole shaft(means also no ladders and no torches directly on the wall).
    • Build a plain of any block type in your shaft as the elevator’s ground. (I would recommend to use a block type that is not placed anywhere in the shaft again with the same shape.)
    • Stand on the ground while typing /elevator create
    • A new floor and a new “CallBlock” (to call the elevator later) are created simultaneously by first typing /elevator call <Floorname> and then right-clicking on a (already existing!!) button. The elevator will halt 2 stones below this block
    • You have to create Up- and DownBlocks (to control the elevator) on every floor OR (better) inside the elevator. Type /elevator up or /elevator down , then right-click on a button (again the buttons have to be created BEFORE).
    • Create as many floors as you want. Besides: the control-blocks can be up to 2 blocks away from the elevator
    • Now you are ready to use the elevator!
    • If you want to remove floors or control-blocks, simply destroy the blocks.
    • If you want to remove the whole elevator, stand nearby and type /elevator remove.
    Configuration:
    • After the first server startup with the plugin v1.3+, a new file named Configuration.txt is created in plugins\Elevators\
    • Feel free to modify the values in there. But keep to the given format.
    • restart the server (or use /reload command) to apply the changes.
    Enhanced redstone:
    • If you want, you can extend your calling mechanism, per example by using stone plates connected to redstone wire.
    • To make your elevator moving to a specific floor, type /elevator direct <Floorname> and right-click any redstone wire or button or stone plate...
    • You can also use /elev direct WITHOUT the floorname. This will lead to the next floor in range.
    • If you want, you can add a redstone output to the elevator. Build a LEVER near to the elevator, then type /elev redstoneout and right-click the lever. Connect the lever to your circuit with redstone wire.
    Glass doors for your elevator:
    • Type /elev glassdoor [<Floorname>] [direction <DirectionIdentifier>] to start.
    • You can use a DirectionIdentifier (left,right,up,down,splitH,splitV) to set the opening direction manually. left and right are seen from outside the elevator. splitH and splitV will let the door split horizontally or vertically from the center.
    • Now build glass blocks around the elevator or on the elevator. Use any shape you want.
    • Type /elev finish to stop adding blocks as doors.
    • Call the elevator again to the floor where you built the door. Your created door opens.
    • The door is now activated and will open and close automatically. Have fun!
    Elevator protection (advanced builders):
    • every created elevator has an owner. Only the owner can modify the elevator. To change the owner, type "/elev give <newownername>". To enable modification for every player, type "/elev give". This will remove any owner protection.
    • use the optional parameters to create an elevator/floor with protection, p.e. "/elev floor testing floor password ultimatepassword users NTcomputer Notch" would create a new floor named "testing floor" with the password "ultimatepassword", only available for the users NTcomputer and Notch.
    • modify your protection settings with the commands /elev user and /elev password, p.e.: "/elev user testing floor users Admin" will override the previous settings to only allow user Admin the usage.
    • remove protection settings? Very easy: use /elev password or /elev user without any parameters or floorname only to reset the protection.
    • so far the whitelist, but I want to create a blacklist. How to? Like this: "/elev user testing floor users * -griefer" (no, there isn't any space between the minus and the player - damn line break). * means everybody can use it, the "-" before a name indicates you hate this player and don't want to let him destroy your secret room on the testing floor ;)
    • I have set up the protection, but I'm never asked for a password?! This can have several reasons: 1.) You are an operator. 2.) You have the permission elevators.operator 3.) You are the owner of the elevator. Just let somebody else try, he WILL get a prompt. 4.) You are standing near the elevator while another player tries to use it. He/she won't be blocked.

    Known issues (open)

    • It is difficult to move yourself or turn around while moving with an elevator.
    • Don't use doors on an elevator! They will "clone" items.
    • Pressure plates don't work as Up- /DownBlocks directly. Build at least two redstone to them, type the command and right-click the end of the wire.
    • Avoid using up/down in circuits. This will force any selected redstone-block to remain in off-state. (You can use "direct", though!)

    Future Ideas (open)

    • name elevators - v1.4.4
    • signs with current floor - v1.4.5
    • allow any block type for doors - v1.4.5
    • iConomy support - coming in v1.5

    Changelog (server mod) (open)

    • Version 1.4.3 (RB #740)
      >>Download<<
      -implementation of the secret project (not useable yet)
      -fixed the chest duplication bug
      -fixed the powered/detector rail dropping bug
      -enabled plugin usage for subfolder-worlds
      -fixed some other exceptions
    • Version 1.4.2 (RB #670)
      >>Download<<
      -elevators are now stored in the world folders (-> allow backups)
      -items will drop when moved away from a wall
      -added forbidden blocks to config
      -added command abbreviations to config
      -added glassdoor directions
      -added "lock" for cabin blocks
      -prevent block changes while elevator moves
      -added more config options and messages
    • Version 1.4.1 (RB #602)
      >>Download<<
      -cabin blocks are now searched when initiating movement
      ->WorldEdit & Co for cabin blocks supported!
      -Entities are now moved along, even if they are positioned a greater distance above the ground blocks
      -merged direct and extend commands
      -enabled relative glass doors (=doors in the cabin)
      -glass doors are now "grouped" automatically for a more real opening order
      -redstone outputs floor parameter added.
      -ground blocks pending between grass and dirt are not blocking the elevator anymore
      -wheat, cactus and sugar cane item duplication bug fixed
    • Version 1.4 (RB #556)
      -Permissions support added
      -elevator and floor protection added
      ->many new commands and command parameters
      -command to remove glass doors from a specific floor
      -owner system added
      -individual elevator size support
      -fixed some bugs (can't remember which)
    • Version 1.3.1:
      >>Download<<
      -removed TSLPC
      -added go|direct command
      -improved elevator search
      -improved elevator position search (prevention of loosing the ceiling ;-))
      -storing entity positions when initiating moving - hopefully fixes fall-through bugs
      -added info console command to create debugging info files
      -binds glass doors to a command
      -fixed button and redstone bugs
      -improved storage cleanup
    • Version 1.3:
      -added automatically closing glass doors.
      -added configuration.
      -fixed a fault timing.
      -changed the command handler to onCommand in main file.
    • Version 1.2.3:
      -fixed a block checking bug.
      -redstone on the elevator is now working.
    • Version 1.2.2:
      -chests and dispensers are now working.
      -furnaces are now working.
      -adjacent mine tracks are now working.
      -item orientation bugfix.
    • Version 1.2.1:
      -color of wool is now stored.
      -Signs are now working inside the elevator.
      -orientation of levers, buttons, torches etc. is now stored (can still be glitchy, cause multiplayer servers always have problems with that)
      -fixed many bugs for the blocks built on the elevator
      -elevator blocks can be safely removed by iStick, Superpickaxe and others now
      -improved the movement system for liquids (enables lava doors and more!)
      -improved the movement system for all entities (creatures and minecarts will also be transported now)
      -elevator movement is now much smoother
      -improved floor search for up- and down-blocks when the elevator got stuck
      -changed the entire storage system
    • Version 1.2:
      - enabled building on the elevator.
      - created redstone outputs
      - fixed server crashes
      - made compatible to CraftBukkit 289+
      - improved handling of breaked blocks
      - made plugin thread-secure
      -fixed path problems on mac + linux
      - and maybe some others...
    • Version 1.1:
      - made the creation a bit easier.
      - fixed some bugs
      - increased the maximum size to 5x5
    • Version 1.0:
      - Release
     
  2. Offline

    Reterg

    Do I need to remake all the elevators in the 1.4.2 release? They aren't working anymore. No errors in the console. They still work if I go back to 1.4.1.

    Or can I copy something over to the world folder where the elevators are stored like you mentioned in your changes post?

    It's ok. I fixed it myself :p
    I created a temporary elevator and all my elevators in the world seemed to then move over to the worlds folder and now they work :)

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 7, 2016
  3. Offline

    RebornSheep

    I got a problem.. My users cant create elevators. When they are typing "/elev create" they are getting this message:

    The command is typed perfect, and there should not be a problem. I have tryed to give them operator permissions, but it seems not to work. I have also tryed to remove it completly from permissions.
    I am running Craftbukkit 617.
     
  4. Offline

    LucidLethargy

    Oh that is amazing, I backup those files often so that might just be what I need! As for info, the log was pretty blank as killing a process seems to stop everything in it's tracks (my host uses linux.) I do know the database this plugin uses is shared by other plugins I use though. I honestly can't say which one or ones right now, but mcmmo and iconomychestshop come to mind as possible users. A full list of my plugins and server version are here if this helps at all: http://www.paradigne.com/index.php/details/.

    This is why I can't simply replace that database, though, which I would have done in a second if I didn't fear losing data from other plugins : / It's late right now, but when I have time I will try to get as much info on the subject as possible - is it possible to simply extract the tables your plugin creates from a backup and insert them into my existing database? I do have backups with it working, so if this is possible I will play around with the process! Also this plugin doesn't have it own database such as iConomy used to have when it was on sqlite, does it? (this meaning a separate file, rather than a link into a generic sqlite database of some sort)

    Oh, also it's just possible I have Reterg's problem as well, I will test this tomorrow!
     
  5. Offline

    Cody Graves

    ADD MULTI WORLD SUPPORT!!! Otherwise this plugin is awesome.
     
  6. Offline

    Punchin

    The elevators are actually stored in .properties files in the world/elevators folder. They don't share a database with anything else. Pre-1.4.2 they were stored in a single file in the plugins/elevators folder. If you have a backup of that single file, you can replace it and restart the server and it should convert it again. Hopefully the elevators will convert properly this time and work.
     
  7. Offline

    Cybran

    Multiple worlds are supported ;)
     
  8. Offline

    Kahl

    Is there a way to remove just a floor?
     
  9. Offline

    Brain

    Found two bugs, one slightly annoying, the other cosmetic.
    1. /elev extend is sorely missed. I have an elevator with a floor that has two doors on opposing sides. Since extend was removed I am unable to sufficiently provide glass doors for this floor. The first created call button works normally. The second call button on the floor (also created with /elev call floorname) calls the elevator, but the glass doors won't open. I first created the two call buttons and then the glass doors.

    2. Get a tame wolf with you in the elevator. Order him to sit. Move the elevator to another floor. The wolf now seems to be standing, but in fact is sitting. This is can be verified by moving away. The wolf won't follow. If you return and right-click him once he doesn't seem to change his standing stance, but will follow you again.
     
  10. Offline

    Punchin

    Both confirmed.

    1. Easily fixed. Use the Go|Direct command instead of another call button

    2. This is game based and I don't think he can easily fix it. The same thing happens to me whenever I log out with them sitting, and sometimes when I come back to them after walking far away.
     
    Brain likes this.
  11. Offline

    JHeim

    I found a small glitch. Putting a bed in the elevator will cause it to replicate when traveling down.
     
  12. Offline

    Punchin

    I couldn't duplicate the bed glitch. Can you describe how you have it set up in your elevator? I have just a solid bedrock 5x5 with nothing on it. It didn't duplicate for me.
     
  13. Offline

    hnrch02

    I've got a problem:
    When I push the up button in the elevator and call it down again the glassdoor won't open..
     
  14. Offline

    Brain

    1. Thank you Punchin, that works!

    2. Same here. Logical world state seems consistent, visual world state is not. Might be client issue.

    Had this problem sometimes in the past. Since using "/elev glassdoor floorname" it has not happened again.
     
  15. Offline

    hnrch02

    I've rebuild the glassdoor. Still not working.
     
  16. Offline

    AnrDaemon

    But you definitely could prevent drop from other blocks, so, the question... did you tried to remove doors in a different order?

    Also a couple of issues...

    1. Breaking blocks on elevator counts as building. Baaad :/ I can't use my old elevator shape any more.
    2. Elevator falsely report "stuck above" 1 block before it reaching the top level. There's definitely a free space to move elevator to. It broke both my main elevator to the roof and my redstone-powered door to crafting room in basement.
     
  17. Offline

    Punchin

    1. Did you try using the new /lock feature to save the shape?

    2. Sometimes if you place a block and remove it, it'll recount properly. I've had a couple times where it didn't find all the blocks and thought some of them were free-floating when they're actually attached.

    Try resetting permissions with "/elev pw" and "/elev user". I had an entire floor not work once. I had to reset permissions that I'd forgot I had to get it to work again.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 7, 2016
  18. Offline

    Spathizilla

    I've tried to set a single floor with a useraccess list and the rest is unrestricted using /elev user <floorname> users spathizilla user1 user 2

    However, when anyone on the list presses the down button, it tells them they have no permission. They can still go up to unrestricted floors though. I've remade the call button a few times with no joy.

    Edit: just remade the entire elevator with no luck. Someone who doesnt have the operator permission cannot go down even when they're on the access list. The user who cannot go down does have builder and advancedbuilder though.
     
  19. Offline

    LucidLethargy

    I have successfully restored ALL my elevators by simply moving my old backup properties file into the active server! Thank you Punchin and Cybran! Now it backs up with the worlds, and now I know to restore backups it's as simple as moving the properties file, this will never be a problem again! :D
     
  20. Offline

    AnrDaemon

    Plugin isn't updated to 1.4.2 on live server yet. I'll try and make some rounds on test tomorrow.

    They actually "free-floating"... when elevator is completed. It's quite hard to have roof attached to platform on 1x1 elevator.
     
  21. Offline

    Bill Warner

    upgraded from 1.4.1 to 1.4.2 and now I get:

    2011-04-12 05:44:49 [SEVERE] Could not pass event BLOCK_BREAK to Elevators
    at de.NTcomputer.Elevators.ElevatorsStore.VersionUpdater(ElevatorsStore.java:577)
    at de.NTcomputer.Elevators.ElevatorsStore.FindNearbyElevatorAcc(ElevatorsStore.java:473)
    at de.NTcomputer.Elevators.ElevatorsStore.FindNearbyElevatorAcc(ElevatorsStore.java:456)
    at de.NTcomputer.Elevators.ElevatorsBlockListener.onBlockBreak(ElevatorsBlockListener.java:56)

    2011-04-12 05:45:23 [SEVERE] at de.NTcomputer.Elevators.ElevatorsStore.VersionUpdater(ElevatorsStore.java:577)

    and

    2011-04-12 05:43:00 [SEVERE] Could not pass event REDSTONE_CHANGE to Elevators
    at de.NTcomputer.Elevators.ElevatorsStore.VersionUpdater(ElevatorsStore.java:577)
    at de.NTcomputer.Elevators.ElevatorsStore.FindNearbyElevatorAcc(ElevatorsStore.java:473)
    at de.NTcomputer.Elevators.ElevatorsStore.FindNearbyElevatorAcc(ElevatorsStore.java:456)
    at de.NTcomputer.Elevators.ElevatorsBlockListener.onBlockRedstoneChange(ElevatorsBlockListener.java:25)
     
  22. Offline

    Ulrar

    Hi.

    I was wondering if there is a way to make automatic elevator ?
    I tried to use sensor from minecart mania to detect the cart, and bind "/elev up" to a diode just behind the sign.
    When the minecart pass, the diode turn on, the cart arrive in the elevator but it don't go up.
    What am I doing wrong ?

    PS : There is no player in the cart, it's a chest
     
  23. Offline

    Punchin

    Use torches to bridge the gap. Use /elev lock. Remove torches. I just tested it on my test server on 1.4.2. Looks like you may need to upgrade to accomplish your solution.

    Put 2 redstone dust leading from the sign. On the farther one, use /elev go <floorname>. Use it on the dust itself, not the block it's on. Replace <floorname> with the next floor up, obviously. Lemme know if that solves it for ya.
     
  24. Offline

    Oscarius

    Can we use other blocks than glass for doors?
     
  25. Offline

    Punchin

    You can use the redstoneout function to operate wooden or steel doors as long as they're not on the platform itself. Other than that, glass is the only usable material currently.

    Interesting question, though..

    Cybran. Any chance on getting another parameter added to the glassdoor function to choose material per door and a config option for default material?

    You could even trim down the command by getting rid of "direction" entirely. Parse the command so that /elev and glassdoor (or custom command) are filtered out. If there's a number after it, treat it as an item ID. If it's text, check if it's a direction. Otherwise treat it as either an error or check of corresponding item by that name. No clue how much work that would pile on to your plate, but it would be sweet to streamline the command. :)
     
  26. Offline

    Etsijä

    Same error as Bill Warner reported: upgraded from 1.4.1 to 1.4.2 (CB #670), now when I push the buttons on my elevator, all I get is a shitload of these:

    Code:
    16:16:20 [SEVERE] Could not pass event REDSTONE_CHANGE to Elevators
    java.lang.NullPointerException
            at de.NTcomputer.Elevators.ElevatorsStore.VersionUpdater(ElevatorsStore.java:577)
            at de.NTcomputer.Elevators.ElevatorsStore.FindNearbyElevatorAcc(ElevatorsStore.java:473)
            at de.NTcomputer.Elevators.ElevatorsStore.FindNearbyElevatorAcc(ElevatorsStore.java:456)
            at de.NTcomputer.Elevators.ElevatorsBlockListener.onBlockRedstoneChange(ElevatorsBlockListener.java:25)
            at org.bukkit.plugin.java.JavaPluginLoader$30.execute(JavaPluginLoader.java:380)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:59)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:255)
            at net.minecraft.server.BlockButton.a(BlockButton.java:141)
            at net.minecraft.server.BlockButton.b(BlockButton.java:122)
            at net.minecraft.server.ItemInWorldManager.a(ItemInWorldManager.java:75)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:356)
            at net.minecraft.server.Packet14BlockDig.a(SourceFile:42)
            at net.minecraft.server.NetworkManager.a(NetworkManager.java:198)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:72)
            at net.minecraft.server.NetworkListenThread.a(SourceFile:100)
            at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:368)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:283)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:375)
     
  27. Offline

    Punchin

    I got that error when I first switched to 1.4.2, but didn't get a copy of it before I restarted my server for something. When I restarted my server everything worked fine with no errors. Have you tried rebooting the server?
     
  28. Offline

    jordanaustin

    We found a significant bug with your plugin on our server. Putting a single chest on an elevator works great.

    However, if you place two chests on a single elevator, place items in one chest, then ride up or down. It duplicates all the items in the first chest to the second chest.

    We've tested this on 3 different elevators on our server and as a result had to uninstall your plugin. Please fix soon! We already miss the elevators.
     
  29. Offline

    Etsijä

    Thank you so much for this information. Rebooting got rid of the problem, and now the elevators are again working perfectly!
     
  30. Offline

    Roachii

    Can you please make it so that you can also put levers (as redstoneout) on the outside of the elevator? I tried this but every time the elevator starts to move the lever just falls of (there's definetely enough space in the shaft for the lever itself). If i try to put it inside the elevator it works, but looks ugly...
     
  31. Offline

    Dreadreaver

    use "/elev redstoneout" and you won't have to use levers at all ...
     

Share This Page