In order to prepare for the next major ViaVersion update, you have to do the following things:
Update the dependency by changing
- the group id to
com.viaversion, - the version to
4.0.0, - the artifact id, depending on your needs, either to
viaversion-apiorviaversion.
Instead of reimporting or renaming each and every class used, it's easiest to just take a few minutes to do project wide replacements (e.g. Ctrl+Shift+R in IntelliJ).
Replace the base package:
us.myles.ViaVersion -> com.viaversion.viaversion
From here, replace these amazing classes and packages:
com.viaversion.viaversion.api.protocol.ProtocolVersion->com.viaversion.viaversion.api.protocol.version.ProtocolVersioncom.viaversion.viaversion.api.data.UserConnection->com.viaversion.viaversion.api.connection.UserConnectioncom.viaversion.viaversion.api.PacketWrapper->com.viaversion.viaversion.api.protocol.packet.PacketWrapper.get(ProtocolInfo.class)->.getProtocolInfo()new PacketWrapper(->PacketWrapper.create(com.viaversion.viaversion.api.protocol.ClientboundPacketType->com.viaversion.viaversion.api.protocol.packet.ClientboundPacketTypecom.viaversion.viaversion.api.protocol.ServerboundPacketType->com.viaversion.viaversion.api.protocol.packet.ServerboundPacketTypecom.viaversion.viaversion.packets.->com.viaversion.viaversion.api.protocol.packet.- Calls to
ProtocolVersion#getId()->ProtocolVersion#getVersion() - Getting
UserConnectioninstances:Via.getManager().getConnectionManager().getConnectedClient(UUID). ProtocolRegistry.SERVER_PROTOCOL->Via.getManager().getProtocolManager().getServerProtocolVersion().lowestSupportedVersion()(or the shortcutVia.getAPI().getServerVersion().lowestSupportedVersion())- Other methods from
ProtocolRegistry-> Identical methods underVia.getManager().getProtocolManager() - Any
ValueCreatorinstance creation and itswrite(PacketWrapper)method -> the usualPacketHandlerandhandle(PacketWrapper)
More internal classes/packages:
- If you use the
sendorsendToServermethods inUserConnection, you have to update their usages (see their javadocs for more detail) extends SimpleProtocol->extends AbstractSimpleProtocolextends Protocol->extends AbstractProtocol(except for wilcard cases likeList<? extends Protocol>)- General terminology: "outgoing" -> "clientbound", "incoming" -> "serverbound"
registerIncoming(->registerServerbound(registerOutgoing(->registerClientbound(cancelIncoming(->cancelServerbound(cancelOutgoing(->cancelClientbound(Direction.INCOMING->Direction.SERVERBOUNDDirection.OUTGOING->Direction.CLIENTBOUND
com.viaversion.viaversion.api.rewriters.->com.viaversion.viaversion.rewriter.com.viaversion.viaversion.api.remapper.->com.viaversion.viaversion.api.protocol.remapper.com.viaversion.viaversion.api.data.StoredObject->com.viaversion.viaversion.api.connection.StoredObjectcom.viaversion.viaversion.api.entities.->com.viaversion.viaversion.api.minecraft.entities.com.viaversion.viaversion.api.Pair->com.viaversion.viaversion.util.Pairnew UserConnection(->new UserConnectionImpl(new ProtocolPipeline(->new ProtocolPipelineImpl(GsonUtil.getJsonParser().parse(->JsonParser.parseString(TaskId->PlatformTask(make sure you don't accidentally replace something else with this)- Renames in
Item:getAmount()->amount(),getData()->data(),getTag()->tag(), andnew Item(->new DataItem(
To preserve compatibility with old plugins only using basic API, we have kept the following classes in a legacy api module under the old packages: Via, ViaAPI, ProtocolRegistry, ProtocolVersion, and Bossbar classes.
If you need to, a plain and simple approach to checking for 4.0.0+ versions before calling Via API would be a class check: Class.forName("com.viaversion.viaversion.api.ViaManager").
Via.getAPI().apiVersion() has been added and provides an integer you can check against in case future breakage happens.
Make sure you do not call the deprecated legacy api classes we kept unter us.myles.ViaVersion
Make sure you do not use the Bukkit platform's ViaVersionPlugin to get the general API; instead, use Via
If you have any other questions, feel free to ask in the support channel on our Discord. :)
Thanks for the detailed guide!