[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

    amosngweien

    Ya, Whats Youtube for? Shit?
    okay
     
  3. Offline

    Aeron

    Tested with CB740, works fine, except the chest duplication exploit!
     
  4. Offline

    Charles Potvin

    Ok, I got a situation here. Im hosting a server and sometimes I need to close it to add plugins, making updates, stuff like that. But each time I re-open the server, the elevators don't work. I have to create them again.
    Might sounds noobish, but how I got this fixed?

    Oh and I want to thank you for this plugin. Its useful and it keeps the look & feel of Minecraft. Keep up the good work!
     
  5. Offline

    eagleFMJ

    Not sure what you are trying to say, but I searched there and found a nice video tutorial. WTF is wrong with youtube?
     
  6. Offline

    tahoward

    If I didn't know any better that's sarcasm.
     
  7. Offline

    jordanaustin

    UEF Here, I don't like the sound of this secret project, did Brackman put you up to it?

    If you foresee weeks of work any chance we could get a hotfix for the Dupe Item bug? Doesn't have to be an official release or anything. ;)
     
  8. Offline

    Cybran

    QAI instructed me to keep this project sealed until succes. No way.
    Today I'm working out some other bugfixes, and will release them as 1.4.3 together with the secret project's working implementation, which, however, can't be used then.
     
  9. Offline

    jordanaustin

    Perhaps UEF and Cybran can put apart their differences as we did with the Seraphim. I'm keeping an eye on you cybran. :cool:
     
  10. Offline

    RebornSheep

    Hello, i am getting this error:

    Code:
    01:10:37 [SEVERE] java.lang.ArrayIndexOutOfBoundsException: 0
    
    01:10:37 [SEVERE] at java.util.Arrays$ArrayList.get(Arrays.java:3381)
    
    01:10:37 [SEVERE] at de.NTcomputer.Elevators.ElevatorSubRoutines.GetList(E
    
    levatorSubRoutines.java:320)
    
    01:10:37 [SEVERE] at de.NTcomputer.Elevators.Elevators.onCommand(Elevators
    
    .java:103)
    
    01:10:37 [SEVERE] at org.bukkit.command.PluginCommand.execute(PluginComman
    
    d.java:35)
    
    01:10:37 [SEVERE] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCo
    
    mmandMap.java:85)
    
    01:10:37 [SEVERE] at org.bukkit.craftbukkit.CraftServer.dispatchCommand(Cr
    
    aftServer.java:255)
    
    01:10:37 [SEVERE] at net.minecraft.server.NetServerHandler.handleCommand(N
    
    etServerHandler.java:677)
    
    01:10:37 [SEVERE] at net.minecraft.server.NetServerHandler.chat(NetServerH
    
    andler.java:640)
    
    01:10:37 [SEVERE] at net.minecraft.server.NetServerHandler.a(NetServerHand
    
    ler.java:634)
    
    01:10:37 [SEVERE] at net.minecraft.server.Packet3Chat.a(Packet3Chat.java:3
    
    2)
    
    01:10:37 [SEVERE] at net.minecraft.server.NetworkManager.a(NetworkManager.
    
    java:195)
    
    01:10:37 [SEVERE] at net.minecraft.server.NetServerHandler.a(NetServerHand
    
    ler.java:74)
    
    01:10:37 [SEVERE] at net.minecraft.server.NetworkListenThread.a(SourceFile
    
    :100)
    
    01:10:37 [SEVERE] at net.minecraft.server.MinecraftServer.h(MinecraftServe
    
    r.java:370)
    
    01:10:37 [SEVERE] at net.minecraft.server.MinecraftServer.run(MinecraftSer
    
    ver.java:285)
    
    01:10:37 [SEVERE] at net.minecraft.server.ThreadServerApplication.run(Sour
    What to do? :)
     
  11. Offline

    Cybran

    Which version of the plugin do you use? As I can see in my source code, this error can never appear, a range check before calling the function (which throws your posted error) avoids an exception!
     
  12. Offline

    Etsijä

    Sooo, 1.4.2 doesn't work with 1.5 client? I'm just trying to find out (after some time), whether we could finally move our server to 1.5.
     
  13. Offline

    Pinkpixels

    I have it running on 1.5. No errors :). Though this is the first version I've had it running with, so I'm not sure how its supposed to behave. When we use the elevators they are a little jumpy, but I'm guessing that is normal!
     
  14. Offline

    RebornSheep

    I am using Elevators version 1.4.2. I dont know, maybe i should just ignore this error? or can you tell me why this error is showed?
     
  15. Offline

    TBK

    Is it possible to create several "call" buttons for each floor?
     
  16. Offline

    LucidLethargy

    Any idea what specifically may be causing this error? It says something about a store section missing?
    Elevators: 1.4.2 Bukkit: 740

     
  17. Offline

    Manbeast77

    Not that I know of. What are you trying to do? There may be a way of doing it.


    From just barely looking for the IOhelper error at the beginning, it looks as if you are out of memory. I'm not a java whiz nor do I know how to program, but the interwebs is a good source of info for whenever I have an error like this. How much memory is your server running? How many plugins do you have? Is it a local hosted server, or a VPS?
     
  18. Offline

    Bufahad360

  19. Offline

    TBK

    There are 4 hallways leading to my shaft, so I needed 4 buttons. I just used the /elev call <name> with the same name 4 times, and it seems to work without any issue.
    Now only the duplication bug is bugging me :( Looking forward to the update ;)
     
  20. Offline

    Manbeast77

    Ah ok, that makes a bit more sense, there is a range requirement on a lot of the blocks for the elevators. I've made almost every type of elevator possible, from the ones that come up from underground, to massive 10 floor construct.
    One huge tip, don't use redstone torches as the up/down blocks in a redstone circuit. For some odd reason, when you use one as such, it stays in the "off" state. This makes the stupid thing act like a pulsar that pulses once every 22 or so seconds. It's something that needs to be addressed by the author if he ever comes back.
     
  21. Offline

    Cybran

    Just update to v1.4.3 when I put it out. The update should fix it, I hope.
    It is. You can use the "direct" command to link more blocks to an existing floor. Adding this to the FAQ...
    Either the cabin blocks, the linked blocks, or the glass doors section for an elevator is missing in your storage file, means: You got a corrupted file. Maybe you didn't shut down the server properly? Anyway, you will have to load a backup or delete the file (uhmm, that will be difficult cause you don't know which file EXACTLY... I will add a filename to this error...)
    Yes, you shouldn't use up/down in circuits. Use "direct" instead. When you use up/down, the redstone state will be reset, waiting for the next pulse, so you can "step over" several floors (just as you would hit a button several times). But this is no bug, but a feature (as I said, for the buttons).
    I'm still here ;). Just can't work all the time for bukkit.

    Sure. To show we respect the cooperation, we apologize for the longer waiting time and decided to have the..
    [​IMG]
    Updates:
    • chest duplication bugfix!
    • secret project implementation (not running yet, sorry :()
    • booster/detector rails bugfix!
    • subfolder worlds enabled
    • ...and some others!

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

    maetthew

    I love this plugin! Altough I had problems following the "Basic Setup"-instructions. I found a video on YouTube which I think you should include in the post. Here is the link
     
  23. Offline

    XilDarkz

    This Plugin is AWESOME.

    Ill make a video on how to do it, ive heard people say its rather confusing, but I got the hang of it real fast.

    Tell me if you want a video showcasing it, or a Howto or something like that.

    A++++ Plugin :D

    EDIT: Above video does that :p, guess im too slow
     
  24. Offline

    Manbeast77

    Dunno if you ever saw a post I made a few pages ago, so I'll ask again. Is there any possible way to edit the yml in the jar so you can have elevators closer together, or would that break many things that I don't know about? What I'm attempting to do is this: I would like to make a large area (25*25 up to 100*100) that rises out of the ground after being uncovered using retractable bridges. If I can do that, I'll upload a vid of it.
     
  25. Offline

    throwaway

    One of my users has discovered a duplication exploit. If you create a 1 x 1 elevator, destroy it by hand, then call the non-existent elevator to a different floor than the one it was destroyed on, it still shows up. Yahtzee, you now have two of the material you used to build the elevator.

    Infinite doors is one thing, infinite everything else is another.
     
  26. Offline

    Cybran

    Sorry, maybe I missed it :confused:..
    I don't know why your problem is related to the .yml, but currently the distance limit is hardcoded. Since I include names for elevators, this check will be unnecessary and removed, so you can build elevators side-by-side. You will have to wait until it's ready...
    Thanks for the hint! I will check and fix it.
     
  27. Offline

    Manbeast77

    That's just friggin....... BRILLIANT. Take your time man, I just wish I knew how to do this stuff now so I could help. And once you do get that working, I will be posting a vid.
     
  28. Offline

    Stadionfeger

    hey, my server crashed 2 times today and i always had to re-do one or more elevators...i'm getting this when the server starts:

    Code:
    22:41:05 [SEVERE] java.lang.NullPointerException
    22:41:05 [SEVERE]       at de.NTcomputer.util.IOHelper.GetSubSectionCount(IOHelper.java:45)
    22:41:05 [SEVERE]       at de.NTcomputer.util.IOHelper.GetSubSections(IOHelper.java:56)
    22:41:05 [SEVERE]       at de.NTcomputer.Elevators.ElevatorsStore.ReadElevatorBlocks(ElevatorsStore.java:292)
    22:41:05 [SEVERE]       at de.NTcomputer.Elevators.ElevatorsStore.ReadElevator(ElevatorsStore.java:280)
    22:41:05 [SEVERE]       at de.NTcomputer.Elevators.ElevatorsStore.ReadWorldStore(ElevatorsStore.java:185)
    22:41:05 [SEVERE]       at de.NTcomputer.Elevators.ElevatorsStore.ReadStore(ElevatorsStore.java:145)
    22:41:05 [SEVERE]       at de.NTcomputer.Elevators.ElevatorsStore.<init>(ElevatorsStore.java:51)
    22:41:05 [SEVERE]       at de.NTcomputer.Elevators.Elevators.onEnable(Elevators.java:68)
    22:41:05 [SEVERE]       at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:127)
    22:41:05 [SEVERE]       at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:632)
    22:41:05 [SEVERE]       at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:218)
    22:41:05 [SEVERE]       at org.bukkit.craftbukkit.CraftServer.loadPlugin(CraftServer.java:116)
    22:41:05 [SEVERE]       at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:94)
    22:41:05 [SEVERE]       at net.minecraft.server.MinecraftServer.e(MinecraftServer.java:217)
    22:41:05 [SEVERE]       at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:204)
    22:41:05 [SEVERE]       at net.minecraft.server.MinecraftServer.init(MinecraftServer.java:144)
    22:41:05 [SEVERE]       at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:259)
    22:41:05 [SEVERE]       at net.minecraft.server.ThreadServerApplication.run(SourceFile:394)
    22:41:05 [WARNING] Elevators - Store - Section missing!
    
    
    
    could you remove the elevators saving at closing the server? i think that f... it up if the server crashes. There should be a way to manually save it by /elevator save all or sth. like that.
     
  29. Offline

    Magnetore

    when I try to create the elevator by useing the /elev create it brings me to the list of commands. I have watched several tutorials and I am no i am doing it right.

    can someone help.:(
     
  30. Offline

    Petrus

    I have the same issue. If it's of any help I'm running 1.5_01 and bukkit 766 on a multiplay.co.uk server. When I use any command other than elev ? or help, I get a Warning: Elevators - Command Analyzation Exception, and a list of commands, none of which work.
     
  31. Offline

    GoNavy56

     

Share This Page