Ships
Ships
Source Code - Github |
JavaDocs |
Sponge version |
Discord channel |
Translate Core |
---|
Looking for Dev builds?
Dev builds give off new features and bug fixes before they are officially released, however these features and bug fixes may not have been tested as much as a release on here
Old page:
I am testing this new page out. I am aware of some parts that are missing such as ship types, but please say if there is anything that you wish to see. I plan on making a FAQ's that includes common questions such as how to change ship requirements.
If you want to see the old page, it is here
Video tutorial
Ships 6 changes
Ships has gone through many changes, Ships 6 is the latest rewrite of the plugin. The latest rewrite fixes multiple bugs found in the root of previous versions of Ships.
Features
Moving ships
As the name of the plugin suggests, you can create your own ship and move it with just a single click.
Works with all blocks
There is a fully-fledged list where you can configure every block to react differently for the ships, including being able to add a block type to interact with Ships, detect it as a collide, and even not react at all.
Teleport to ships
There have been many requests to be able to teleport to ships for not only this plugin but others like it. This feature has been added to Ships, however, if it is something you do not wish, then you can disable to command by not adding the command.
Falling Ships
Ships will fall/sink if requirements are not met, this could be done through your own interaction such as running out of fuel, or by something else such as a TNT explosion.
Ship types
Airship | Link |
Ship | Link |
Marsship | Link |
Submarine | Link |
Plane | Link |
Hybridship | Coming soon |
Move the ship:
In Ships, movement is done by signs. You can see all signs here
Collide types:
Name | ID | Description |
---|---|---|
Detect collide | DETECT_COLLIDE | If Ships detects this block in the way of a ship moving then the ship will not move with the error of this block being in the way |
Material | MATERIAL | Material means that you can build a ship out of this block and the Ships block detection system will detect it as part of your ship |
Ignore | IGNORE | If Ships detects this block in the way of a ship moving then the block will break and the ship will take its place |
Permissions
Permission node | Description |
---|---|
ships.cmd.info |
Allows the player to use the command '/ships info' |
ships.cmd.blockinfo |
Allows the player to use the command '/ships blockinfo' |
ships.cmd.shiptype.create |
Allows the player to use the command '/ships shiptype create' |
ships.cmd.config.set |
Allows the player to use the command '/ships config set' |
ships.cmd.config.view |
Allows the player to use the command '/ships config view' |
ships.cmd.blocklist.set |
Allows the player to use the command '/ships blocklist set' |
ships.cmd.blocklist.view |
Allows the player to use the command '/ships blocklist view' |
ships.cmd.ship.track |
Allows the player to use the command '/ships ship track' |
ships.cmd.ship.eot |
Allows the player to use the command '/ships ship eot' |
ships.cmd.ship.crew |
Allows the player to use the command '/ships ship crew' |
ships.move.own.ships.airship | Allows a player to move own airship |
ships.move.own.ships.watership | Allows a player to move own ship |
ships.move.own.ships.marsship | Allows a player to move own marsship |
ships.move.other.ships.airship | Allows a player to move anyones airship |
ships.make.ships.airship | Allows a player to make a airship |
ships.remove.other |
Allows a player to destroy anyones ships sign |
Developers:
Looking for a development wiki? maven/gradle dependencies? or something else relating to ships or translate core? Take a look at the getting started wiki
In reply to thetreethatgrows:
That depends. Are the blocks that are in the way ment to be part of the ship or not? If the are then check what size your ship is (clicking the licence sign will tell you), if it matchs or exceeds the tracking limit (shown in the config - you can use the command below to check the value) then just increase the tracking limit.
If the blocks are not supposed to be part of the ship and you wish for those blocks to break on impact such as a flower of some kind then change the material to IGNORE instead if MATERIAL.
ships config view config Advanced.Block.Track
In reply to Mosemister:
The blocks are supposed to be part of the ship. Tried setting the tracking limit but i still get the error that some blocks are in the way
In reply to Mosemister:
Found the problem. Seems like it only tracks "connected" blocks as part of the ships, and not "diagonally placed blocks". This was a mistake on my part, srry.
In reply to thetreethatgrows:
That ok. I don't believe that is in the docs anymore so its more my fault then anyones.
Hi everyone. So while I have been waiting for Ships Alpha 2.4 to be approved. I have been working on the next update, Alpha 2.5 contains fixes for a crash listed in the comment below and a fix for entities (including players) who would not be moved on a ship due to them being on a half slab or stairs. It also may include the first part of the Ships 5 file convert code that would convert Ships 5 files to Ships 6 R2. I do plan at some point to convert ships 6 R1 files to R2 as well.
As for the update awaiting approval i didnt make a pre update changelog for it as the last 2 updates have been approved within 30min of upload. But here are the changes.
Ships 6.0.0.0 Alpha 2.4
I have the plugin installed to my server through Apex Hosting. When I place a license sign it gives me a message like Missing Permission: ships.make.ships.marsship. How would I be able to access the permissions and enable this?
In reply to bigbooflad:
Permissions work in the same way all other plugins permissions work. You need to enable them through your permissions plugin. There are a few permission plugins to choose from. The one I use to test permissions is GroupManager however this one is old and lacks more modern features.
Hi there, getting this as an error whilst attempting to use an airship's altitude sign, with the latest update
[03:19:50 WARN]: Failed to know what to do: EventListener caused exception from org.ships.event.listener.CoreEventListener.onPlayerInteractWithBlock(AsPlayer arg0)[03:19:50 WARN]: Failed to know what to do: EventListener caused exception from org.ships.event.listener.CoreEventListener.onPlayerInteractWithBlock(AsPlayer arg0)[03:19:50 WARN]: java.lang.NullPointerException[03:19:50 WARN]: at org.ships.vessel.sign.AltitudeSign.lambda$onVesselMove$4(AltitudeSign.java:162)[03:19:50 WARN]: at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)[03:19:50 WARN]: at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)[03:19:50 WARN]: at java.util.HashMap$KeySpliterator.forEachRemaining(Unknown Source)[03:19:50 WARN]: at java.util.stream.AbstractPipeline.copyInto(Unknown Source)[03:19:50 WARN]: at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)[03:19:50 WARN]: at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)[03:19:50 WARN]: at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)[03:19:50 WARN]: at java.util.stream.AbstractPipeline.evaluate(Unknown Source)[03:19:50 WARN]: at java.util.stream.ReferencePipeline.forEach(Unknown Source)[03:19:50 WARN]: at org.ships.vessel.sign.AltitudeSign.onVesselMove(AltitudeSign.java:162)[03:19:50 WARN]: at org.ships.vessel.sign.AltitudeSign.access$000(AltitudeSign.java:30)[03:19:50 WARN]: at org.ships.vessel.sign.AltitudeSign$1.onStructureUpdate(AltitudeSign.java:92)[03:19:50 WARN]: at org.ships.vessel.common.loader.ShipsOvertimeUpdateBlockLoader$OvertimeRunnable.onShipsStructureUpdated(ShipsOvertimeUpdateBlockLoader.java:40)[03:19:50 WARN]: at org.ships.algorthum.blockfinder.Ships5BlockFinder.getConnectedBlocksOvertime(Ships5BlockFinder.java:70)[03:19:50 WARN]: at org.ships.vessel.common.loader.ShipsOvertimeUpdateBlockLoader.loadOvertime(ShipsOvertimeUpdateBlockLoader.java:62)[03:19:50 WARN]: at org.ships.vessel.sign.AltitudeSign.onSecondClick(AltitudeSign.java:123)[03:19:50 WARN]: at org.ships.event.listener.CoreEventListener.lambda$onPlayerInteractWithBlock$6(CoreEventListener.java:96)[03:19:50 WARN]: at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)[03:19:50 WARN]: at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)[03:19:50 WARN]: at java.util.HashMap$KeySpliterator.forEachRemaining(Unknown Source)[03:19:50 WARN]: at java.util.stream.AbstractPipeline.copyInto(Unknown Source)[03:19:50 WARN]: at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)[03:19:50 WARN]: at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)[03:19:50 WARN]: at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)[03:19:50 WARN]: at java.util.stream.AbstractPipeline.evaluate(Unknown Source)[03:19:50 WARN]: at java.util.stream.ReferencePipeline.forEach(Unknown Source)[03:19:50 WARN]: at org.ships.event.listener.CoreEventListener.onPlayerInteractWithBlock(CoreEventListener.java:95)[03:19:50 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[03:19:50 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)[03:19:50 WARN]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)[03:19:50 WARN]: at java.lang.reflect.Method.invoke(Unknown Source)[03:19:50 WARN]: at org.ships.implementation.bukkit.event.BEventLaunch.run(BEventLaunch.java:25)[03:19:50 WARN]: at org.ships.implementation.bukkit.event.BukkitListener.lambda$call$1(BukkitListener.java:170)[03:19:50 WARN]: at java.lang.Iterable.forEach(Unknown Source)[03:19:50 WARN]: at org.ships.implementation.bukkit.event.BukkitListener.call(BukkitListener.java:170)[03:19:50 WARN]: at org.ships.implementation.bukkit.event.BukkitListener.onPlayerInteractWithBlockEvent(BukkitListener.java:127)[03:19:50 WARN]: at com.destroystokyo.paper.event.executor.StaticMethodHandleEventExecutor.execute(StaticMethodHandleEventExecutor.java:38)[03:19:50 WARN]: at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80)[03:19:50 WARN]: at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70)[03:19:50 WARN]: at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:545)[03:19:50 WARN]: at org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:445)[03:19:50 WARN]: at org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:412)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.PlayerInteractManager.a(PlayerInteractManager.java:136)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.PlayerConnection.a(PlayerConnection.java:1307)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.PacketPlayInBlockDig.a(SourceFile:40)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.PacketPlayInBlockDig.a(SourceFile:10)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(PlayerConnectionUtils.java:23)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.TickTask.run(SourceFile:18)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.MinecraftServer.aX(MinecraftServer.java:1012)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.MinecraftServer.executeNext(MinecraftServer.java:1005)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeAll(IAsyncTaskHandler.java:95)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.MinecraftServer.a(MinecraftServer.java:1134)[03:19:50 WARN]: at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:918)[03:19:50 WARN]: at java.lang.Thread.run(Unknown Source)
In reply to kain_mercer:
Thanks for the error. Ill patch it out as soon as I can. If you wish to still use ships in the mean time you can use the newer block finder (the old one is giving the bug). You can swap the finder using the /ships config set config command
In reply to Mosemister:
Excellent, thanks for info.
Should I just leave the newer block finder enabled permanently?
Any pros/cons between the two?
I really appreciate the work you've put into this plugin. My server loves it.
In reply to kain_mercer:
There is a pro con list between the two.
Pros for the old one:
Its faster. Much faster
Pros for the new one:
It can detect a unlimited amount of blocks as it doesnt attempt to detect everything at once.
The cons are the vice versa. Such as the new one is much slower
In reply to Mosemister:
Could you tell me the exact command?
I'm assuming it's something like "/ships config set ships 6"
the syntax is slightly confusing for me, sorry!
In reply to kain_mercer:
I dont have a computer infront of me so i can not give the exact however the suggestions (shown on the players screen or by hitting tab on the console) will show the suggestions.
/Ships config set config Advanced.Block.Finder block_finder_ships_six
The part i am unsure about is the last two arguments, the Advanced.Block.Finder is the key argument, i am 90% sure its that (100% something like that) and the next argument is the value, there should be 2 options in the suggedtions, one ending in ships six and the other ending in ships five
In reply to Mosemister:
Okay, I should be able to work it out from there. Thanks again!
EDIT here is the exact command for anyone reading :)
/ships config set config Advanced.Block.Finder ships:blockfinder_ships_five (or six)
In reply to kain_mercer:
So I have just fixed the error in my dev build of Ships. I got it wrong, the issue comes from a complete different part of Ships. The issue stems from the progress bar not being shown. While progressbar is disabled in your config, there are some parts of the code that didnt get the message that it is and attempts to update a progress bar that isnt there.
The quick fix would be to enable the progress bar (minecraft calls it a bossbar so thats what it is called in the config)
Just uploaded Ships 6.0.0.0 R2 Alpha 2.3, ready to download.
In reply to Mosemister:
Ok, I am trying the new version. I will let you know if there are any problems.
Currently only found that the new version of the plugin almost does not match the old file, I will confirm the other issues.
Yesterday I went to see you live live show, modify the plugin configuration
Although I don't understand (the dense programming language), I also watched nearly 2 hours.
See that you have modified each object and grammar repeatedly
I only feel that you are really good at programming.
In the future, the program you design will definitely create great achievements for you.
Thank you very much for everything you paid for the plugin.
I like this plugin and prefer your work attitude.
In reply to kevinhsneh:
Thanks for watching. Sorry you didnt understand the code but nice to know i kept you entertained.
Grammar is not my forte, so you may see it get corrected every so often. On the live show I was mainly modifing the new command system that would make it a lot more simple for me to add command, it would also gain access to more peemissions with the commands.
As for the current version almost not matching the old file. I have done a lot of work on the new movement and block tracking algorithms that has greatly improved stability.
I am aware of a few issues with them though and plan to mitigate the issues as soon as possible. Current issues I know about that are new to 2.3 are the following:
The new fast loader may crash ships due to async activity
EOT ignores if the ship has done moving and attempts to move the ship even before it is done resulting in a ship you can not stop.
I am also aware that the new tracking algorithm takes a while to track, i have some ideas for optimizations but it means rewriting a small part of Ships, so stay tuned.
In reply to Mosemister:
HI Thank you for your explanation, I am happy to see your live live design program.
Although you know that there are some problems at present, based on the reasons for making you more aware of the problem, I still need to report to you the results of my test of the new version.
I started the server and found that after the new version did not match the old one, I immediately used the clean Ships-b 6.0.0.0 R2 Alpha 2.3.1 new version plugin to generate the file.
And copy my old BlockList.yml back to replace the original file.
After the first successful start of the server, I entered the minecraft game.
Then I created each new SIGN for an aircraft, including ([Move], [Altitude], [Wheel]).
Finally create the [Ships] type as opship and use the right mouse button to click and sneak click to register.
Leave the game without doing anything.
I once again started the server and the following error log appeared:
------------------------------------
下午 07:29:52 [Thread-11/WARN]: Exception in thread "Thread-11"下午 07:29:52 [Thread-11/WARN]: Exception in thread "Thread-11"下午 07:29:52 [Thread-11/WARN]: java.lang.IllegalStateException: Tile is null, asynchronous access? CraftBlock{pos=BlockPosition{x=757, y=71, z=-62},type=OAK_WALL_SIGN,data=Block{minecraft:oak_wall_sign}[facing=south,waterlogged=false],fluid=net.minecraft.server.v1_14_R1.FluidTypeEmpty@50d13246}下午 07:29:52 [Thread-11/WARN]: at com.google.common.base.Preconditions.checkState(Preconditions.java:444)下午 07:29:52 [Thread-11/WARN]: at org.bukkit.craftbukkit.v1_14_R1.block.CraftBlockEntityState.<init>(CraftBlockEntityState.java:28)
--------------------------------------------------------------
I tried to solve it over and over again, testing it many times, without breaking away from such a result.
Does this mean that the plugin does not detect the sign, and the ships file contains the registration file?
Maybe this is not a big problem, I can still enter the game and then move the plane, but clicking [Altitude] does not work, so I think the new version of this problem will cause the plugin to fail to run smoothly, I hope and expect you Subsequent optimization.
In reply to kevinhsneh:
So the issue you arr refering to is the async quick loading. I have fixed it on my internal server and will be releasing it soon.
Basically whats happening is minecraft itself doesnt like it when you interact with the world on a separate thread. Due to the fact that loading the structure of the ship i thought won't interact with the world as its loading 3dVectors (XYZ) i put the code for loading the structure on a separate thread. However the issue is that if the structure loaded has any slight hickup and ships quickly attempts to fix the issue, one of the issues is it not knowing where the licence sign is compared to the structure, so it checks where the sign is out of the structure to resync it, this being a interaction with the world.
The fix I have done is taken them off the second thread and back on the main thread, loads slower but way more reliable