diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java index 6e777cc2d0..8cb1331414 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java @@ -9,11 +9,11 @@ import net.minecraft.util.GsonHelper; import net.minecraft.util.StringRepresentable; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.Level; import org.jetbrains.annotations.Nullable; -import java.util.List; -import java.util.Locale; +import java.util.*; // Partially based on: // https://github.com/SlimeKnights/Mantle/blob/1.18.2/src/main/java/slimeknights/mantle/recipe/ingredient/EntityIngredient.java @@ -83,4 +83,13 @@ public static Component getModNameComponent(String namespace) { String mod = IXplatAbstractions.INSTANCE.getModName(namespace); return Component.literal(mod).withStyle(ChatFormatting.BLUE, ChatFormatting.ITALIC); } + + private static Map, Entity> cachedExampleEntity = new HashMap<>(); + protected static Entity getCachedExampleEntity(EntityType type, Level level) { + // don't cache for server levels (if any) to prevent wrong side + if (!level.isClientSide) { + return type.create(level); + } + return cachedExampleEntity.computeIfAbsent(type, t -> t.create(level)); + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java index cb6b0a0912..2535cebd9e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java @@ -70,10 +70,13 @@ public List getTooltip(boolean advanced) { @Override public Entity exampleEntity(Level level) { - var someEntityTys = BuiltInRegistries.ENTITY_TYPE.getTagOrEmpty(this.entityTypeTag).iterator(); - if (someEntityTys.hasNext()) { - var someTy = someEntityTys.next(); - return someTy.value().create(level); + var someEntityTysHolder = BuiltInRegistries.ENTITY_TYPE.getTag(this.entityTypeTag); + if (someEntityTysHolder.isEmpty()) return null; + var someEntityTys = someEntityTysHolder.get(); + if (someEntityTys.size() > 0) { + long seconds = System.currentTimeMillis(); + var someTy = someEntityTys.get((int) (seconds % someEntityTys.size())); + return getCachedExampleEntity(someTy.value(), level); } else { return null; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java index f510c17d2e..91d86b40fb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java @@ -43,7 +43,7 @@ public List getTooltip(boolean advanced) { @Override public Entity exampleEntity(Level level) { - return this.entityType.create(level); + return getCachedExampleEntity(this.entityType, level); } @Override