85 lines
4.2 KiB
Diff
85 lines
4.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Arthur Blanchot <blanchot.arthur@protonmail.ch>
|
|
Date: Wed, 29 Jun 2022 02:49:45 +0200
|
|
Subject: [PATCH] Faster Sheep.getOffspringColor
|
|
|
|
Original license: MIT
|
|
Original project: https://github.com/fxmorin/carpet-fixes
|
|
|
|
Copyright (c) 2020 Fx Morin
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
|
|
index ed289bdc0455e737c79e8630e1cdfdeb957e2c03..4215ff3e536da3384f75cabbcecb82da81ce4d65 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
|
|
@@ -367,21 +367,56 @@ public class Sheep extends Animal implements Shearable {
|
|
return super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt);
|
|
}
|
|
|
|
+ // Mirai start
|
|
+ private static DyeColor properDye(DyeColor firstColor, DyeColor secondColor) {
|
|
+ if (firstColor.equals(secondColor)) return firstColor;
|
|
+ switch(firstColor) {
|
|
+ case WHITE -> {
|
|
+ switch(secondColor) {
|
|
+ case BLUE -> {return DyeColor.LIGHT_BLUE;}
|
|
+ case GRAY -> {return DyeColor.LIGHT_GRAY;}
|
|
+ case BLACK -> {return DyeColor.GRAY;}
|
|
+ case GREEN -> {return DyeColor.LIME;}
|
|
+ case RED -> {return DyeColor.PINK;}
|
|
+ }
|
|
+ }
|
|
+ case BLUE -> {
|
|
+ switch(secondColor) {
|
|
+ case WHITE -> {return DyeColor.LIGHT_BLUE;}
|
|
+ case GREEN -> {return DyeColor.CYAN;}
|
|
+ case RED -> {return DyeColor.PURPLE;}
|
|
+ }
|
|
+ }
|
|
+ case RED -> {
|
|
+ switch(secondColor) {
|
|
+ case YELLOW -> {return DyeColor.ORANGE;}
|
|
+ case WHITE -> {return DyeColor.PINK;}
|
|
+ case BLUE -> {return DyeColor.PURPLE;}
|
|
+ }
|
|
+ }
|
|
+ case GREEN -> {
|
|
+ switch(secondColor) {
|
|
+ case BLUE -> {return DyeColor.CYAN;}
|
|
+ case WHITE -> {return DyeColor.LIME;}
|
|
+ }
|
|
+ }
|
|
+ case YELLOW -> {if (secondColor.equals(DyeColor.RED)) return DyeColor.ORANGE;}
|
|
+ case PURPLE -> {if (secondColor.equals(DyeColor.PINK)) return DyeColor.MAGENTA;}
|
|
+ case PINK -> {if (secondColor.equals(DyeColor.PURPLE)) return DyeColor.MAGENTA;}
|
|
+ case GRAY -> {if (secondColor.equals(DyeColor.WHITE)) return DyeColor.LIGHT_GRAY;}
|
|
+ case BLACK -> {if (secondColor.equals(DyeColor.WHITE)) return DyeColor.GRAY;}
|
|
+ }
|
|
+ return null;
|
|
+ }
|
|
+
|
|
private DyeColor getOffspringColor(Animal firstParent, Animal secondParent) {
|
|
- DyeColor enumcolor = ((Sheep) firstParent).getColor();
|
|
- DyeColor enumcolor1 = ((Sheep) secondParent).getColor();
|
|
- CraftingContainer inventorycrafting = Sheep.makeContainer(enumcolor, enumcolor1);
|
|
- Optional<Item> optional = this.level.getRecipeManager().getRecipeFor(RecipeType.CRAFTING, inventorycrafting, this.level).map((recipecrafting) -> { // CraftBukkit - decompile error
|
|
- return recipecrafting.assemble(inventorycrafting);
|
|
- }).map(ItemStack::getItem);
|
|
-
|
|
- Objects.requireNonNull(DyeItem.class);
|
|
- optional = optional.filter(DyeItem.class::isInstance);
|
|
- Objects.requireNonNull(DyeItem.class);
|
|
- return (DyeColor) optional.map(DyeItem.class::cast).map(DyeItem::getDyeColor).orElseGet(() -> {
|
|
- return this.level.random.nextBoolean() ? enumcolor : enumcolor1;
|
|
- });
|
|
+ DyeColor firstColor = ((Sheep)firstParent).getColor();
|
|
+ DyeColor secondColor = ((Sheep)secondParent).getColor();
|
|
+ DyeColor col = properDye(firstColor,secondColor);
|
|
+ if (col == null) col = this.level.random.nextBoolean() ? firstColor : secondColor;
|
|
+ return col;
|
|
}
|
|
+ // Mirai end
|
|
|
|
private static CraftingContainer makeContainer(DyeColor firstColor, DyeColor secondColor) {
|
|
CraftingContainer inventorycrafting = new CraftingContainer(new AbstractContainerMenu((MenuType) null, -1) {
|