From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: etil2jz <81570777+etil2jz@users.noreply.github.com> 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 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) {