tridentsdk / trident Goto Github PK
View Code? Open in Web Editor NEWThe server & API implementation for the TridentSDK
License: Apache License 2.0
The server & API implementation for the TridentSDK
License: Apache License 2.0
This week:
Concurrent thread buffers?
Producer/Consumer tuned queues?
Lazy sets?
NIO.2 net handlers?
Optimizations?
Atomic field updaters?
Perhaps packets and housekeeping for entities should be kept within a specified range in order to prevent mobs that cannot be seen or that are irrelevant from taking up bandwidth and tick cycles.
Probably some race condition. A player sometimes appears 2-3 blocks below where they should be.
Slots are basically items or stacks of items that hold metadata and are sent over the network (or vice versa) to communicated item data.
Usage:
Configs currently cannot hold comments or integer values (they can only be floating point or double for whatever reason).
Remove the branches that haven't been updated in like 2 months
Lots and lots of work needed here.
Not really an issue, but I didn't know where I had to ask this.
Does this project has an IRC channel where developers can discuss, and Server owners ask questions/suggest things. If not, I can create one if you guys want.
In the future, I assume you will be using some sort of Pathfinding and/or Navigation system. I suggest that you implement a way to either implement or extend a generic Pathfinder class that you can use to create your own Pathfinder logic, then allow the use of an API to give mobs said Pathfinders. Some mock psuedocode is something along the lines of having the Entity contain a Pathfinding/Navigation manager, lets call this a 'Navigator', then calling something like Entity#getNavigatior(), which would then lead to something like Navigator#addPathfinder(), passing in the Pathfinder.
Just a suggestion ;)
As we continue development, this is just a landmark issue for implementing more of the packets in the protocol.
This is the todo list of what still needs to be done for the revamp of TridentSDK, once you start working on one of them, please create a new issue and reference it here.
Boss bars are currently being implemented by @nickrobson
We need to go over the API and the implementation details here.
Some/several TODO items are found in the linked file:
This is going to be tricky, we can examine the MC server source code and write something extremely similar so that a world would generate the same given the same seed on our server and mojangs, or examine their source to produce a slightly similar implementation that would produce almost indistinguishable worlds. The other option is to create our own world generator that looks only vaguely similar to the official maps and allow users to add their own Maps if they want the real worlds.
Jul 01, 2017 9:03:17 PM io.netty.channel.DefaultChannelPipeline onUnhandledInboundException
WARNING: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException: readerIndex(222) + length(8) exceeds writerIndex(224): PooledUnsafeDirectByteBuf(ridx: 222, widx: 224, cap: 224)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:442)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:248)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:1018)
at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:394)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:299)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IndexOutOfBoundsException: readerIndex(222) + length(8) exceeds writerIndex(224): PooledUnsafeDirectByteBuf(ridx: 222, widx: 224, cap: 224)
at io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1389)
at io.netty.buffer.AbstractByteBuf.readLong(AbstractByteBuf.java:792)
at io.netty.buffer.AbstractByteBuf.readDouble(AbstractByteBuf.java:818)
at net.tridentsdk.server.packet.play.PlayInPosLook.read(PlayInPosLook.java:44)
at net.tridentsdk.server.net.InDecoder.decode(InDecoder.java:102)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:411)
... 14 more
Bukkit plugin support
Lite and pro version
Boss Bar Native
World Edit native
Essentials native
Notable examples to implement:
stop
kick
teleport
say
help
Enhance the current implementation of sending players chunks.
Vilsol:
you started crypto before there was crypto
See TridentPlayer#resetTitle()
Titles cannot be fully reset, the subtitle is a remnant artifact even after using the PlayOutTitle#Reset packet. Therefore, 3 packets are sent instead, each to set all the fields to empty/default values.
if (location.getWorld().getName().equals(this.getName()))
throw new IllegalArgumentException("Provided location does not have the same world!");
This will run if the worlds are the same, please change to:
if (!location.getWorld().getName().equals(this.getName()))
throw new IllegalArgumentException("Provided location does not have the same world!");
Make block updates happen in a way similar to MC server, i.e. one block being updated gives all the blocks around it a chance to execute updates, and it propogates like this. Possibly our own implementation that does block updates randomly so that sand will fall etc. Configurable.
Currently players cannot sprint or crouch properly.
Implement and create an API for handling plugin channels that may be created or used by client plugins.
No SDK issue as of yet.
Also need to develop the plugin/command/event API implementations.
Since chat is considered a HUD element, should it belong in that package rather than its own standalone?
The Minecraft client seems to not respond to PlayOutPosLook with a teleportation confirm. We use this to resume login, and that doesn't happen sometimes.
Usually occurs when starting the server after a while without using it. Can be fixed by restarting the server, but whether or not it happens again is random.
I suspect an error is occurring, but since netty swallows a lot of exceptions, I really don't have any clue. On a side note, the client doesn't seem to be disconnected when the a matching teleportation confirm packet is not sent within 30 seconds, so more testing is needed here.
Implement a high-performance, thread-safe Event framework.
Netty seems to have a thing with hiding errors thrown in packet handling classes such as NullPointerExceptions and the like. Unfortunately errors like these are difficult to trace and cause a lot of dumb behavior that should be spotted.
Not sure if this is an issue with exceptionCaught
not being implemented in the initialized channel handlers?
Can the server run yet, or are you just doing basic framework? When I compile with maven, it doesn't run. Thanks
Add the ability for players to place blocks and have them stored in the chunk.
Implement the ability to save and load worlds to the world folder.
Create and implement packet classes for updates to the world options. Also add notifications and packet sending for those particular setting updates to the players on the given world (we missed this the last time).
See:
Create a lookup class that would convert an ID to a message, and provide a link in the error message to the website explaining the error and some usual scenarios.
Upon joining, leaving, and then rejoining the server, the server does not send an extra AddPlayer packet for the tablist. This results in the player losing his skin and not having an updated tablist.
We need a way to have chunks be unloaded when they are not used by any entity or player. Upon disconnect, the chunks loaded by a player must be released.
We can do this a multitude of ways, some of which are:
Please check or at least make a decent attempt at ensuring the classes that are used in a multithreaded context have the proper initialization safety and access safety for accessors that are given to plugins for modification.
Clients running an older version of the game are not kicked from the server, but rather disconnect with a decoding error.
The heightmap needs to be updated after setting blocks in TridentChunk
. Perhaps this number should be calculated rather than cached and updated every block update.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.