A powerful Minecraft Server Software coming from the future

Overview

Mirai Face

Mirai

A powerful Minecraft Server Software coming from the future

Mirai is under heavy development and contributions are welcome!

Actions

Features

  • 30% faster hoppers over Paper.
  • Improved entity performance from a reduction in ticking entity behavior based on how far away they are from the player.
  • Reduced GC times & frequency from removing useless allocations, which also improves CPU performance.
  • Reduced bandwidth consumption from avoiding sending useless entity packets.
  • Fast raytracing which improves performance of any entity which utilizes line of sight, mainly Villagers.
  • Built-in profiler which has 0 performance hit and easy to read metrics for both server owners and developers.
  • Faster crafting, reduction in uselessly loaded chunks, entity ticking, block ticking, bat spawning…
  • New NBT cache which reduces a lot of I/O operations from the main thread while preserving correct data.
  • Pre-tweaked configuration files to reach optimal performance with minimal impact on normal behaviors.
  • IP and login location hiding feature, which adds another security layer in the logs.
  • Removed metrics, no one can collect data, not even us.
  • Bugfixes for several Minecraft issues.
  • Safer methods for Vanilla calls.
  • Plugin compatibility with Spigot & Paper plugins.

Downloads

The latest JAR file can be downloaded from the release/1.17 branch. You can also clone this repository and build it yourself.

If you are interested in making a fork, check out this template here!

Building

If you want to avoid the patching system:

./gradlew clean applyPatches && ./gradlew build

Otherwise, in order to distribute, you need a paperclip file:

./gradlew clean applyPatches && ./gradlew paperclipJar

License

Patches are licensed under GPL-3.0.
All other files are licensed under MIT.

Comments
  • Could you publish the jar in another way?

    Could you publish the jar in another way?

    As a Mirai user, I really like Mirai, which is why I say this. Please forgive me, the current jar release method is really inconvenient! The current action configuration is very troublesome for version management and download. Maybe you do this for your own reasons, I understand what you are doing very well, but as a normal user, I still make such a suggestion, thank you anyway.

    enhancement 
    opened by Mhy278 13
  • Network problem

    Network problem

    Brief introduction: I drive a 50-person daily active server, but I'm distressed that many players don't have high latency, but often drop the line At first I thought that this option was not turned on, but he had already turned it on, and I found that after turning off this option, there were fewer abnormal drops So,i close it "use-alternate-keepalive: false" (In Timings ) I would like to ask why this option is not useful, and the chance of letting the line drop increase, can you check the patch?

    94AA7C06BD930F37D5AB7DC513FB760D

    Ver :This server is running Mirai version git-Mirai-28d706c (MC: 1.19) (Implementing API version 1.19-R0.1-SNAPSHOT) (Git: 28d706c on ver/1.19)

    Config:https://timings.aikar.co/?id=97282b895319403baa17e06a75616ee1

    opened by MineSunshineone 10
  • Hoglin Problem

    Hoglin Problem

    Hoglin will stay away from The Strange Bacteria, Strange Mushroom Potted Plants, Nether Portal Blocks, and Respawn Anchors 7 blocks

    But it dont work on the mirai lastest ver

    This server is running Mirai version git-Mirai-64a31b5 (MC: 1.19) (Implementing API version 1.19-R0.1-SNAPSHOT) (Git: 64a31b5 on ver/1.19)

    19D090AD3FB774B7F8AA2B225187304E

    opened by MineSunshineone 6
  • JVM Crash when generating new chunks

    JVM Crash when generating new chunks

    Hi, I juste dicoverd and tested Mirai, It seam pretty good for the server performances in general until I try chunky to check the chunk load rate.

    For the first time I use Chunky with Mirai the server crashed. So to be sure it was chunk generation I walked far from my pregenerate zone and when entering the non generated zone the server crashed the same way, I also try to teleport myseft realy far and same crash.

    I got a lot of thread dump but there is the last one I got (from teleporting)

    • https://pastebin.com/LBEqH8iw

    Last logs before crash:

    • https://pastebin.com/7j6xsZg6

    I used the last release of Mirai (1.19) with TEMURIN 18 and the JVM Flags on the git repo https://github.com/etil2jz/etil-minecraft-flags

    Btw Idk if its realy Mirai or my physical server but I think not.

    bug good first issue working on it 
    opened by Hapixs 5
  • Warn-Error that occurred to me only in Mirai [1.19 last build]

    Warn-Error that occurred to me only in Mirai [1.19 last build]

    I also found a problem with AI MythicMobs

    [13:56:27 ERROR]: [STDERR] [net.minecraft.world.entity.EntityLiving] [NAN-HEALTH] be291e57-6cbb-4d8a-936a-9435a29b80d6 had NaN health set [13:56:27 WARN]: [MythicMobs] Failed to construct AI pathfinder lookatplayers [13:56:27 WARN]: java.lang.IllegalStateException: Cannot add sublisteners after listening range was set! [13:56:27 WARN]: at me.jellysquid.mods.lithium.common.entity.tracker.nearby.NearbyEntityListenerMulti.addListener(NearbyEntityListenerMulti.java:18) [13:56:27 WARN]: at net.minecraft.world.entity.Entity.addListener(Entity.java:175) [13:56:27 WARN]: at net.minecraft.world.entity.ai.goal.PathfinderGoalLookAtPlayer.(PathfinderGoalLookAtPlayer.java:59) [13:56:27 WARN]: at net.minecraft.world.entity.ai.goal.PathfinderGoalLookAtPlayer.(PathfinderGoalLookAtPlayer.java:36) [13:56:27 WARN]: at MythicMobs-5.1.0-SNAPSHOT 4194 .jar//io.lumine.mythic.core.volatilecode.v1_19_R1.ai.goals.LookAtPlayersGoal.create(LookAtPlayersGoal.java:26) [13:56:27 WARN]: at MythicMobs-5.1.0-SNAPSHOT 4194 .jar//io.lumine.mythic.core.volatilecode.v1_19_R1.VolatileAIHandlerImpl.addPathfinderGoals(VolatileAIHandlerImpl.java:264) [13:56:27 WARN]: at MythicMobs-5.1.0-SNAPSHOT 4194 .jar//io.lumine.mythic.core.skills.mechanics.RunAIGoalSelectorMechanic.cast(RunAIGoalSelectorMechanic.java:51) [13:56:27 WARN]: at MythicMobs-5.1.0-SNAPSHOT 4194 .jar//io.lumine.mythic.core.skills.SkillMechanic.executeNoTargetSkill(SkillMechanic.java:545) [13:56:27 WARN]: at MythicMobs-5.1.0-SNAPSHOT 4194 .jar//io.lumine.mythic.core.skills.SkillMechanic.lambda$executeSkills$6(SkillMechanic.java:490) [13:56:27 WARN]: at MythicMobs-5.1.0-SNAPSHOT 4194 .jar//io.lumine.mythic.bukkit.utils.Delegates$RunnableToSupplier.get(Delegates.java:121) [13:56:27 WARN]: at MythicMobs-5.1.0-SNAPSHOT 4194 .jar//io.lumine.mythic.bukkit.utils.promise.LuminePromise$SupplyRunnable.run(LuminePromise.java:654) [13:56:27 WARN]: at MythicMobs-5.1.0-SNAPSHOT 4194 .jar//io.lumine.mythic.bukkit.utils.tasks.LumineExecutors$SchedulerWrappedRunnable.run(LumineExecutors.java:70) [13:56:27 WARN]: at org.bukkit.craftbukkit.v1_19_R1.scheduler.CraftTask.run(CraftTask.java:101) [13:56:27 WARN]: at org.bukkit.craftbukkit.v1_19_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:483) [13:56:27 WARN]: at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1507) [13:56:27 WARN]: at net.minecraft.server.dedicated.DedicatedServer.b(DedicatedServer.java:459) [13:56:27 WARN]: at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:1430) [13:56:27 WARN]: at net.minecraft.server.MinecraftServer.v(MinecraftServer.java:1198) [13:56:27 WARN]: at net.minecraft.server.MinecraftServer.lambda$spin$1(MinecraftServer.java:304) [13:56:27 WARN]: at java.base/java.lang.Thread.run(Thread.java:833)

    Sometimes a similar error may occur in the ModelEngine, I used to use SSSpigot before, this was not

    13:59:21 WARN]: [ModelEngine] Plugin ModelEngine vR2.5.2 generated an exception while executing task 467

    java.lang.NullPointerException: Cannot invoke "com.ticxo.modelengine.api.animation.Queryable.getQueryID()" because "" is null at com.ticxo.modelengine.api.animation.Query.addQuery(Query.java:23) ~[model-engine-r2_5_2.jar:?] at com.ticxo.modelengine.animation.MEAnimationInterpreter.getFramePosition(MEAnimationInterpreter.java:21) ~[model-engine-r2_5_2.jar:?] at com.ticxo.modelengine.model.part.MEBasePartEntity.tick(MEBasePartEntity.java:84) ~[model-engine-r2_5_2.jar:?] at com.ticxo.modelengine.model.MEActiveModel.tick(MEActiveModel.java:38) ~[model-engine-r2_5_2.jar:?] at com.ticxo.modelengine.model.MEModeledEntity.tick(MEModeledEntity.java:83) ~[model-engine-r2_5_2.jar:?] at com.ticxo.modelengine.manager.MEModelRunnable.run(MEModelRunnable.java:48) ~[model-engine-r2_5_2.jar:?] at org.bukkit.craftbukkit.v1_19_R1.scheduler.CraftTask.run(CraftTask.java:101) ~[mirai-1.19.jar:git-Mirai-28d706c] at org.bukkit.craftbukkit.v1_19_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[mirai-1.19.jar:git-Mirai-28d706c] at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[mirai-1.19.jar:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?] at java.lang.Thread.run(Thread.java:833) ~[?:?]

    bug help wanted 
    opened by XionioXMaster 5
  • Temporarily fix build (Mirai-Purpur 1.18.2)

    Temporarily fix build (Mirai-Purpur 1.18.2)

    This fixes the build issue on github actions on the purpur 1.18.2 branch by changing the version of Simple-YAML used by Mirai. This is probably only needed until Purpur updates their Pufferfish upstream.

    opened by Pascalpex 5
  • Error saving world

    Error saving world

    image Even if there is no plugin, a save error will occur when the player closes the server after entering, which will cause the player to revert. The latest build of Mirai is used.

    bug help wanted 
    opened by DJelly4K 5
  • NPCs generated by citizen plugins are sometimes visible and sometimes not visible.

    NPCs generated by citizen plugins are sometimes visible and sometimes not visible.

    There are NPCs that you can see when you reconnect, but there are still NPCs that you can't see. I am using the latest version of Mirai. NPC with type set to animal can be seen well.

    opened by RangFarm 4
  • Long loading of chunks when using data packs for world generation

    Long loading of chunks when using data packs for world generation

    image archive-2022-06-02T082926+0200.tar.gz My datapacks

    For example, I teleported to large coordinates and loaded 1 chunk into them, saw a burst of TPS drop and then after a while the chunks loaded, but when I generate them further they just freeze and slowly continue to display themselves image

    opened by DonorKrovi 4
  • Opening a naturally-generated chest with a map inside lags out the server

    Opening a naturally-generated chest with a map inside lags out the server

    • Go to structures with a chest that contains a map (treasure map for example) such as shipwreck, ocean ruins
    • Open the chest

    The server will lag out for a bit, then back to normal. It might also kick other players and corrupt the map as well.

    opened by QuanTrieuPCYT 3
  • Packet encoding of packet ID 80 threw

    Packet encoding of packet ID 80 threw

    [16:01:48 ERROR]: Packet encoding of packet ID 80 threw (skippable? false) java.lang.IllegalArgumentException: item is null or air at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145) ~[guava-31.0.1-jre.jar:?] at org.bukkit.craftbukkit.v1_19_R1.inventory.CraftMetaBundle.addItem(CraftMetaBundle.java:125) ~[mirai-1.19.2.jar:git-Mirai-17] at org.bukkit.craftbukkit.v1_19_R1.inventory.CraftMetaBundle.(CraftMetaBundle.java:50) ~[mirai-1.19.2.jar:git-Mirai-17] at org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack.getItemMeta(CraftItemStack.java:524) ~[mirai-1.19.2.jar:git-Mirai-17] at org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack.getItemMeta(CraftItemStack.java:283) ~[mirai-1.19.2.jar:git-Mirai-17] at org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack.getItemMeta(CraftItemStack.java:275) ~[mirai-1.19.2.jar:git-Mirai-17] at net.minecraft.world.entity.LivingEntity.sanitizeItemStack(LivingEntity.java:3219) ~[?:?] at net.minecraft.network.syncher.EntityDataSerializers$1.write(EntityDataSerializers.java:41) ~[?:?] at net.minecraft.network.syncher.EntityDataSerializers$1.copy(EntityDataSerializers.java:38) ~[?:?] at net.minecraft.network.syncher.SynchedEntityData.writeDataItem(SynchedEntityData.java:232) ~[?:?] at net.minecraft.network.syncher.SynchedEntityData.pack(SynchedEntityData.java:169) ~[?:?] at net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket.write(ClientboundSetEntityDataPacket.java:33) ~[?:?] at net.minecraft.network.PacketEncoder.encode(PacketEncoder.java:41) ~[mirai-1.19.2.jar:git-Mirai-17] at net.minecraft.network.PacketEncoder.encode(PacketEncoder.java:14) ~[mirai-1.19.2.jar:git-Mirai-17] at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:107) ~[netty-codec-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:120) ~[netty-codec-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1015) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannel.write(AbstractChannel.java:301) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at com.comphenix.protocol.injector.netty.channel.NettyChannelProxy.write(NettyChannelProxy.java:210) ~[ProtocolLib (프로토콜 LIB).jar:?] at com.comphenix.protocol.injector.netty.channel.NettyChannelProxy.write(NettyChannelProxy.java:199) ~[ProtocolLib (프로토콜 LIB).jar:?] at net.minecraft.network.Connection.doSendPacket(Connection.java:459) ~[?:?] at net.minecraft.network.Connection.lambda$sendPacket$10(Connection.java:428) ~[?:?] at com.comphenix.protocol.injector.netty.channel.NettyEventLoopProxy.lambda$proxyRunnable$2(NettyEventLoopProxy.java:48) ~[ProtocolLib (프로토콜 LIB).jar:?] at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.77.Final.jar:4.1.77.Final] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.77.Final.jar:4.1.77.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) ~[netty-common-4.1.77.Final.jar:4.1.77.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.77.Final.jar:4.1.77.Final] at java.lang.Thread.run(Thread.java:833) ~[?:?] [16:01:48 INFO]: Showing new actionbar title for surbi [16:01:48 INFO]: Showing new actionbar title for Lead_Lord [16:01:48 INFO]: surbi lost connection: Internal Exception: io.netty.handler.codec.EncoderException: java.lang.IllegalArgumentException: item is null or air

    It may not be a "mirai-paperclip-1.19.2-R0.1-SNAPSHOT-reobf" problem, but I write because I have an opinion that it may be correct.

    opened by Lead-Lord 0
  • Remove configurable enchantment table book animation tick patch

    Remove configurable enchantment table book animation tick patch

    This removes the configurable enchantment table book animation tick patch entirely.

    This patch has no effect: EnchantmentTableBlockEntity.bookAnimationTick is only called from the TickerHelper created in EnchantmentTableBlock.getTicker, which is only called from the client side / if the server is running as a single-player embedded server (see the super constructor call in the ServerLevel constructor that sets flag to false, which later becomes Level.isClientSide)

    opened by MartijnMuijsers 0
  • Update Upstream (Purpur)

    Update Upstream (Purpur)

    https://github.com/PurpurMC/Purpur/commit/86f2da583b1d84372cbca9a7dcfff45c287853ad Move PlayerCommandSendEvent listeners check

    https://github.com/PurpurMC/Purpur/commit/86935193f47d810c5239a52c8a690b6d762bf39f Fix the timeout for alternative keepalive handling

    opened by MartijnMuijsers 0
Releases(1.19)
Stresscraft - State-of-art Minecraft stressing software written in Kotlin

StressCraft (W.I.P) State-of-art Minecraft stressing software written in Kotlin.

Cubxity 57 Dec 4, 2022
A minecraft modification based on Fabric with Yarn Mappings, developed for the newest version of the sandbox game Minecraft.

JupiterClient A minecraft modification based on Fabric with Yarn Mappings, developed for the newest version of the sandbox game Minecraft. Building th

Cedric H. 1 Jun 27, 2022
Kauth - Open-source powerful minecraft authorization plugin

KAuth KAuth is a minecraft plugin for offline-mode authorization on your server.

Viktor 1 Feb 17, 2022
Gradle plugin adding a task to run a Paper Minecraft server

Run Paper Run Paper is a Gradle plugin which adds a task to automatically download and run a Paper Minecraft server along with your plugin built by Gr

Jason 64 Dec 29, 2022
VirtualTag is a name tag edit plugin for minecraft server

VirtualTag VirtualTag is a NameTag Edit plugin for modern minecraft server Support Version 1.17.x Download https://github.com/jiangdashao/VirtualTag/r

RERERE 13 Dec 18, 2022
Server-Side chat emotes for Minecraft

Chat Emotes Chat Emotes is a server-side mod that utilizes the Chat Preview feature introduced in Minecraft 1.19 to provide the use of emotes like Emo

Colin Barndt 7 Oct 25, 2022
A Minecraft server implementation for SuCraft.

Suki A fork of Mirai Made for the server SuCraft: sucraft.org Features Fork of Mirai for the best performance, notably: Fork of Pufferfish for the bes

SuCraft 22 Jan 2, 2023
A simple solution to handling persistent data storage in your Minecraft server.

Modern Data Stores A simple solution to handling persistent data storage in your Minecraft server. This plugin will be used throughout the Modern Plug

Modern Plugins 2 Nov 7, 2022
A simple solution to handling persistent data storage in your Minecraft server.

Modern Data Stores A simple solution to handling persistent data storage in your Minecraft server. This plugin will be used throughout the Modern Plug

Modern Plugins 2 Nov 7, 2022
Minecraft NBT support for kotlinx.serialization

knbt An implementation of Minecraft's NBT format for kotlinx.serialization. Technical information about NBT can be found here. Using the same version

Ben Woodworth 41 Dec 21, 2022
An under development minecraft plugin (1.8.8) to learning Kotlin language

CorePlus CorePlus is a minecraft plugin coded with Kotlin language. Still under development CorePlus will be an essential for each minecraft servers !

Gonz 3 Jun 16, 2021
Run Minecraft on the command line

HeadlessForge While headless Minecraft Clients aren't anything new, they come with a drawback. The Minecraft API is missing and you need to add all fu

null 28 Oct 17, 2022
Kotlin utility mod for Minecraft

Lambda is a free, open-source, Minecraft 1.12.2 utility mod providing a visionary system for plugins that allow customizing the clients features thank

Lambda 405 Dec 28, 2022
Gestor is an innovative open-source application for universal Minecraft mod management.

Gestor Gestor is an innovative open-source application for universal Minecraft mod management. About It combines three types of tools into a single ap

GestorMC 11 Dec 9, 2021
Simple random ore mod for Minecraft/Fabric. Heavily inspired by Randomite.

Rand'Ore >> Download << Simple random ores for Fabric! This mod is open source and under a permissive license. As such, it can be included in any modp

null 3 Dec 31, 2021
MIT mappings for Minecraft with no exceptions

leather MIT mappings for Minecraft with no exceptions Tannery Tannery is our custom gradle plugin to create the perfect mapping workspace Tasks build

null 3 Nov 11, 2022
An open-source plugin that accommodates Starships on Minecraft servers.

Minecraft Starship Plugin An open-source plugin that accommodates starships on minecraft servers. 'A shameless rip-off of Star Legacy's plugins.' Mine

null 4 Dec 13, 2021
Create minecraft worlds without lag!

WorldGen 랙 없는 월드 생성을 위한 라이브러리 시작하기에 앞서, 이 라이브러리는 UHC_System 의 월드 생성 코드를 작성하면서 WorldCreator의 단점인 랙을 없애기 위해 만들어진 코드의 일부를 라이브러리로 공개하는 것임을 알려드립니다 WorldCre

dolphin2410 4 Jul 29, 2022
A injection minecraft cheat using jvm attach api

Luminous A injection minecraft cheat using jvm attach api Website: https://lumi.getfdp.today Build We used a thing called Wrapper to make development

null 24 Dec 21, 2022