Skip to content

Commit

Permalink
Entity Activation Range 2.0! Major improvements to restoring behavior
Browse files Browse the repository at this point in the history
Calling this 2.0 as it's a pretty major improvement with more knobs to twist.

This update fixes many things. The goal here is to restore vanilla behavior to some degree.
Instead of permanent inactive pools of animals, let them show some signs of life some....

Yes this may reduce performance compared to before, but I hope it is minimal. Got to find a balance.
Previous EAR logic really compromised vanilla behavior of mobs. This tries to restore it.

Changes:

1) All monsters are now classed as Monster. Mojang has an interface, we should use it.
   - This now includes Shulker, Slimes, see #2 for Phantom and Ghast
2) Villagers and Flying Monsters now have their own separate activation range configs.
   - Villagers will default to your Animals config
3) Added a bunch of more immunities
   - Brand new entities are immune for a few seconds
   - Entities that recently traveled by portal are immune for few seconds
   - Entities that are leashed to a player are immune
   - Ender Signals are immune
   - Entities that are jumping, climbing, dying (lol) are immune
   - Minecarts are now always immune to the movement restriction
4) Villagers immunity received major overhaul...
   - Now has many immunities for Villager activities to let them
     do their work then go back inactive
   - Such as interacting with doors and workstations should be more normal now
   - Raids will trigger immunities, in that villagers will run and hide when bell rings.
   - Raid should keep the entire village immune during the raid to keep gameplay mechanics
     You can disable raids by game rule if you dont want raids

Then the big one.....

Wake Up Inactive Entities:
One issue plagueing "farms" is that we no longer even let entities move now.
Entities become lifeless.

A new system has been introduced to wake up inactive entities every so often, to let
them stretch their legs, eat some food, play with each other and experience the good entity life.

Animals, Villagers, Monsters (Includes Pillagers), and Flying Monsters will now wake up every
so often after staying inactive for a very long. This grants them a temporary immunity, that
the goal is they will then find "stuff to do" by having a longer activity window.

How many to wake up, how often they wake up, and for how long they wake up are all configurable.

Current EAR Immunities really don't give some entities enough of a window to find work
to then keep them immune for the work to even start. This system should help that.

We will only wake up a few entities per tick on the first wave, restoring 1 per type per world per tick.

So say you have 10 monsters qualify for inactive wake up, all 8 will wake up on the first eligible tick,
and then the 9th will wake up on next tick, 10th on next tick.

If for 5 ticks no more inactive wake up, our buffer will have built back up to 5, and then 5 can go next needed tick.

This basically incrementally wakes them up, preventing too many from waking up in a single tick, to reduce impact to TPS.
  • Loading branch information
aikar committed Apr 27, 2020
1 parent 10396d2 commit e0ea2e0
Show file tree
Hide file tree
Showing 9 changed files with 324 additions and 109 deletions.

Large diffs are not rendered by default.

8 changes: 5 additions & 3 deletions Spigot-Server-Patches/0426-Tracking-Range-Improvements.patch
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
From 0fb693f9d446eb0aaf739ea4c7b6743fb8fdc4b7 Mon Sep 17 00:00:00 2001
From d4b743b1eb3dc8719e37aa97dd4f7173a6e9e92d Mon Sep 17 00:00:00 2001
From: kickash32 <kickash32@gmail.com>
Date: Sat, 21 Dec 2019 15:22:09 -0500
Subject: [PATCH] Tracking Range Improvements
Expand All @@ -20,7 +20,7 @@ index a7b981f299..043ba702d7 100644
if (j > i) {
i = j;
diff --git a/src/main/java/org/spigotmc/TrackingRange.java b/src/main/java/org/spigotmc/TrackingRange.java
index 6f8e6c1d07..46c33e6917 100644
index 6f8e6c1d07..765bdaf9b5 100644
--- a/src/main/java/org/spigotmc/TrackingRange.java
+++ b/src/main/java/org/spigotmc/TrackingRange.java
@@ -1,6 +1,7 @@
Expand All @@ -31,7 +31,7 @@ index 6f8e6c1d07..46c33e6917 100644
import net.minecraft.server.EntityExperienceOrb;
import net.minecraft.server.EntityGhast;
import net.minecraft.server.EntityItem;
@@ -25,26 +26,24 @@ public class TrackingRange
@@ -25,26 +26,26 @@ public class TrackingRange
if ( entity instanceof EntityPlayer )
{
return config.playerTrackingRange;
Expand All @@ -47,6 +47,7 @@ index 6f8e6c1d07..46c33e6917 100644
+ switch (entity.activationType) {
+ case RAIDER:
+ case MONSTER:
+ case FLYING_MONSTER:
return config.monsterTrackingRange;
- } else
- {
Expand All @@ -57,6 +58,7 @@ index 6f8e6c1d07..46c33e6917 100644
- return config.animalTrackingRange;
- } else if ( entity instanceof EntityItemFrame || entity instanceof EntityPainting || entity instanceof EntityItem || entity instanceof EntityExperienceOrb )
+ case WATER:
+ case VILLAGER:
+ case ANIMAL:
+ return config.animalTrackingRange;
+ case MISC:
Expand Down
16 changes: 8 additions & 8 deletions Spigot-Server-Patches/0429-Seed-based-feature-search.patch
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
From 9383dd8d2a7882e4a8afd1d88d57c953b64556c4 Mon Sep 17 00:00:00 2001
From 901d05219b3afd04387f9ebd254faf38c75ad532 Mon Sep 17 00:00:00 2001
From: Phoenix616 <mail@moep.tv>
Date: Mon, 13 Jan 2020 15:40:32 +0100
Subject: [PATCH] Seed based feature search
Expand All @@ -15,7 +15,7 @@ changes but this should usually not happen. A config option to disable
this improvement is added though in case that should ever be necessary.

diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 3b8488d3..bce50218 100644
index 3b8488d3ff..bce502181f 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -359,6 +359,12 @@ public class PaperWorldConfig {
Expand All @@ -32,7 +32,7 @@ index 3b8488d3..bce50218 100644
private void maxEntityCollision() {
maxCollisionsPerEntity = getInt( "max-entity-collisions", this.spigotConfig.getInt("max-entity-collisions", 8) );
diff --git a/src/main/java/net/minecraft/server/BiomeManager.java b/src/main/java/net/minecraft/server/BiomeManager.java
index e96f544f..68423645 100644
index e96f544f12..68423645df 100644
--- a/src/main/java/net/minecraft/server/BiomeManager.java
+++ b/src/main/java/net/minecraft/server/BiomeManager.java
@@ -12,10 +12,12 @@ public class BiomeManager {
Expand All @@ -49,7 +49,7 @@ index e96f544f..68423645 100644
return this.c.a(this.b, blockposition.getX(), blockposition.getY(), blockposition.getZ(), this.a);
}
diff --git a/src/main/java/net/minecraft/server/ChunkCoordIntPair.java b/src/main/java/net/minecraft/server/ChunkCoordIntPair.java
index f2a19acd..09f1308b 100644
index f2a19acd84..09f1308b0d 100644
--- a/src/main/java/net/minecraft/server/ChunkCoordIntPair.java
+++ b/src/main/java/net/minecraft/server/ChunkCoordIntPair.java
@@ -64,10 +64,12 @@ public class ChunkCoordIntPair {
Expand All @@ -66,7 +66,7 @@ index f2a19acd..09f1308b 100644
return this.z << 4;
}
diff --git a/src/main/java/net/minecraft/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java
index e8ce2ecf..acfe732a 100644
index e8ce2ecf23..acfe732af5 100644
--- a/src/main/java/net/minecraft/server/StructureGenerator.java
+++ b/src/main/java/net/minecraft/server/StructureGenerator.java
@@ -109,6 +109,15 @@ public abstract class StructureGenerator<C extends WorldGenFeatureConfiguration>
Expand Down Expand Up @@ -94,10 +94,10 @@ index e8ce2ecf..acfe732a 100644

public abstract StructureGenerator.a a();
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 48c75af8..79d8c7ba 100644
index 228e6e9ab9..f1d072a39c 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -1563,8 +1563,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
@@ -1569,8 +1569,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
return this.methodProfiler;
}

Expand All @@ -109,5 +109,5 @@ index 48c75af8..79d8c7ba 100644
}
}
--
2.25.1.windows.1
2.26.2

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
From 6c6a52d79167aca84ffc1f252bd0b09bb87ca44c Mon Sep 17 00:00:00 2001
From b9f9bfb94e246b7f483cb6bdaade26a72ad42c81 Mon Sep 17 00:00:00 2001
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
Date: Sat, 25 Jan 2020 17:04:35 -0800
Subject: [PATCH] Optimise getChunkAt calls for loaded chunks
Expand All @@ -7,7 +7,7 @@ bypass the need to get a player chunk, then get the either,
then unwrap it...

diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
index 29197d6c8d..57e797cd86 100644
index fe894a68bc..e67e006535 100644
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
@@ -435,6 +435,12 @@ public class ChunkProviderServer extends IChunkProvider {
Expand Down Expand Up @@ -65,10 +65,10 @@ index 29197d6c8d..57e797cd86 100644
}

diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 2d51ca9224..5036348abf 100644
index f1d072a39c..0c23fc89d7 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -259,6 +259,14 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
@@ -265,6 +265,14 @@ public abstract class World implements GeneratorAccess, AutoCloseable {

@Override
public Chunk getChunkAt(int i, int j) {
Expand All @@ -84,5 +84,5 @@ index 2d51ca9224..5036348abf 100644
}

--
2.25.1
2.26.2

10 changes: 5 additions & 5 deletions Spigot-Server-Patches/0435-Optimise-random-block-ticking.patch
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
From 2356450c9a501c6a5e3957a2fe1e3c6284e74cd2 Mon Sep 17 00:00:00 2001
From 02f32cef330de0f4b4bb4367e12181195b1aa14f Mon Sep 17 00:00:00 2001
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
Date: Mon, 27 Jan 2020 21:28:00 -0800
Subject: [PATCH] Optimise random block ticking
Expand Down Expand Up @@ -111,7 +111,7 @@ index e76528f199..e650a2e48d 100644
return this.d(baseblockposition.getX(), baseblockposition.getY(), baseblockposition.getZ());
}
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 29cfef1605..8fc26aa4b8 100644
index a23dfeb63d..2e3db1a755 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -572,8 +572,8 @@ public class Chunk implements IChunkAccess {
Expand Down Expand Up @@ -351,10 +351,10 @@ index de43881653..e821c236b4 100644

public final SoundEffectType getStepSound() { return this.r(); } // Paper - OBFHELPER
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 5036348abf..5e6481f115 100644
index 0c23fc89d7..de9f49b884 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -1557,10 +1557,19 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
@@ -1563,10 +1563,19 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
public abstract TagRegistry t();

public BlockPosition a(int i, int j, int k, int l) {
Expand Down Expand Up @@ -520,5 +520,5 @@ index 62fabb7ad5..9a2b4fa7a2 100644

protected BlockPosition a(BlockPosition blockposition) {
--
2.25.1
2.26.2

19 changes: 5 additions & 14 deletions Spigot-Server-Patches/0436-Entity-Jump-API.patch
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
From e46d8baca6bb86dc49303f2d5b92d794ba84b47d Mon Sep 17 00:00:00 2001
From 3918cd75001b10cc7c5257f178b1a29fa50f9933 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <Blake.Galbreath@GMail.com>
Date: Sat, 8 Feb 2020 23:26:11 -0600
Subject: [PATCH] Entity Jump API


diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index 1b9551ae..ad474500 100644
index 158ae4ff68..1e6106f2ba 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -91,7 +91,7 @@ public abstract class EntityLiving extends Entity {
protected float aV;
protected int aW; protected int getKillCount() { return this.aW; } // Paper - OBFHELPER
public float lastDamage;
- protected boolean jumping;
+ public boolean jumping; // Paper - protected -> public
public float aZ;
public float ba;
public float bb;
@@ -2605,8 +2605,10 @@ public abstract class EntityLiving extends Entity {
} else if (this.aH()) {
this.c(TagsFluid.LAVA);
Expand All @@ -29,7 +20,7 @@ index 1b9551ae..ad474500 100644
} else {
this.jumpTicks = 0;
diff --git a/src/main/java/net/minecraft/server/EntityPanda.java b/src/main/java/net/minecraft/server/EntityPanda.java
index cd41c80f..f50ed190 100644
index cd41c80f19..f50ed19080 100644
--- a/src/main/java/net/minecraft/server/EntityPanda.java
+++ b/src/main/java/net/minecraft/server/EntityPanda.java
@@ -438,7 +438,9 @@ public class EntityPanda extends EntityAnimal {
Expand All @@ -43,7 +34,7 @@ index cd41c80f..f50ed190 100644
}

diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
index 6de01e4f..8ffa3cb0 100644
index 6de01e4f0e..8ffa3cb059 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -723,5 +723,20 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
Expand All @@ -68,5 +59,5 @@ index 6de01e4f..8ffa3cb0 100644
// Paper end
}
--
2.25.1.windows.1
2.26.2

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
From 2f634c7ef7576d0011a745b806127c13c4856c14 Mon Sep 17 00:00:00 2001
From b56a99223d17176e5a002c81e1d49a27f0461e97 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sun, 12 Apr 2020 15:50:48 -0400
Subject: [PATCH] Forced Watchdog Crash support and Improve Async Shutdown
Expand Down Expand Up @@ -73,7 +73,7 @@ index cfe43e882e..2632c7c3ec 100644
}

diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 01534d19d4..94daf684b1 100644
index 5f57a9e1c8..98f0398348 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -144,6 +144,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
Expand Down Expand Up @@ -203,18 +203,18 @@ index dc6d030621..bc8b904660 100644
SystemUtils.c.shutdown();

diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 5e6481f115..d530508b61 100644
index de9f49b884..c8619af2cf 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -786,6 +786,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
@@ -792,6 +792,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {

gameprofilerfiller.exit();
} catch (Throwable throwable) {
+ if (throwable instanceof ThreadDeath) throw throwable; // Paper
// Paper start - Prevent tile entity and entity crashes
String msg = "TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ();
System.err.println(msg);
@@ -861,6 +862,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
@@ -867,6 +868,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
try {
consumer.accept(entity);
} catch (Throwable throwable) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
From ca75ee6547a42395d8303bf5aa56520d0956676e Mon Sep 17 00:00:00 2001
From 93fcb8bd718fccbbc4a1e3150b9b2898be11bf73 Mon Sep 17 00:00:00 2001
From: Callahan <mr.callahhh@gmail.com>
Date: Wed, 8 Apr 2020 18:00:17 -0500
Subject: [PATCH] Port 20w15a Villager AI optimizations - DROP 1.16


diff --git a/src/main/java/net/minecraft/server/BehaviorController.java b/src/main/java/net/minecraft/server/BehaviorController.java
index a1883eba..c75581dd 100644
index 7c6e687707..396b64ea0f 100644
--- a/src/main/java/net/minecraft/server/BehaviorController.java
+++ b/src/main/java/net/minecraft/server/BehaviorController.java
@@ -38,30 +38,22 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri
Expand Down Expand Up @@ -90,7 +90,7 @@ index a1883eba..c75581dd 100644
}

public void a(Activity activity) {
@@ -167,12 +167,14 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri
@@ -168,12 +168,14 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri

public BehaviorController<E> f() {
BehaviorController<E> behaviorcontroller = new BehaviorController<>(this.memories.keySet(), this.sensors.keySet(), new Dynamic(DynamicOpsNBT.a, new NBTTagCompound()));
Expand All @@ -111,7 +111,7 @@ index a1883eba..c75581dd 100644
return behaviorcontroller;
}

@@ -185,14 +187,14 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri
@@ -186,14 +188,14 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri
public void b(WorldServer worldserver, E e0) {
long i = e0.world.getTime();

Expand All @@ -129,7 +129,7 @@ index a1883eba..c75581dd 100644
return ((MemoryModuleType) entry.getKey()).getSerializer().isPresent() && ((Optional) entry.getValue()).isPresent();
}).map((entry) -> {
return Pair.of(dynamicops.createString(IRegistry.MEMORY_MODULE_TYPE.getKey(entry.getKey()).toString()), ((MinecraftSerializable) ((Optional) entry.getValue()).get()).a(dynamicops));
@@ -209,33 +211,45 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri
@@ -210,33 +212,45 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri

private void d(WorldServer worldserver, E e0) {
long i = worldserver.getTime();
Expand Down Expand Up @@ -194,5 +194,5 @@ index a1883eba..c75581dd 100644

private boolean a(Object object) {
--
2.25.1.windows.1
2.26.2

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
From 0467c06a3ef19731b946d4240eb9ab19b22de245 Mon Sep 17 00:00:00 2001
From 2cd65f7b6d5b4a4feca664d8bf958e097a21e2b0 Mon Sep 17 00:00:00 2001
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
Date: Wed, 15 Apr 2020 18:08:53 -0700
Subject: [PATCH] Optimise entity hard collision checking
Expand All @@ -11,7 +11,7 @@ Less crammed entities are likely to show significantly less benefit.
Effectively, this patch optimises crammed entity situations.

diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
index 8695845445..32c342d313 100644
index d802acef71..09137d8785 100644
--- a/src/main/java/net/minecraft/server/Chunk.java
+++ b/src/main/java/net/minecraft/server/Chunk.java
@@ -90,6 +90,54 @@ public class Chunk implements IChunkAccess {
Expand Down Expand Up @@ -88,7 +88,7 @@ index 8695845445..32c342d313 100644
}
if (entity instanceof EntityItem) {
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 9cb4e5a1e6..96a47dd1c2 100644
index d88e851c4a..89e5fbe51d 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -210,6 +210,40 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
Expand Down Expand Up @@ -178,10 +178,10 @@ index 4157e50e4d..5135308fb6 100644

return stream.filter(axisalignedbb1::c).map(VoxelShapes::a);
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index d530508b61..1a3c7c148b 100644
index c8619af2cf..899c535c40 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -1172,6 +1172,32 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
@@ -1178,6 +1178,32 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
return this.getChunkAt(i, j, ChunkStatus.FULL, false);
}

Expand Down Expand Up @@ -215,5 +215,5 @@ index d530508b61..1a3c7c148b 100644
public List<Entity> getEntities(@Nullable Entity entity, AxisAlignedBB axisalignedbb, @Nullable Predicate<? super Entity> predicate) {
this.getMethodProfiler().c("getEntities");
--
2.25.1
2.26.2

5 comments on commit e0ea2e0

@rumickon
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome!
Unfortunately there are no flying animals (bees). :(

@aikar
Copy link
Member Author

@aikar aikar commented on e0ea2e0 Apr 27, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well apparently there is, but md5 named it bird

so bees are birds

@rumickon
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add config for birds?

@aeonlamb
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Parrots are another flying animal. Also bats

@kennytv
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those are indeed very true facts!
But what they are jokingly referring to is just that md_5 decided to call the Flying type Interface “Bird” 🐋

Please sign in to comment.