diff --git a/gradle.properties b/gradle.properties index 4b8f8b88c24..5203d6ce4c5 100755 --- a/gradle.properties +++ b/gradle.properties @@ -28,7 +28,7 @@ minecraft_range=[1.21, 1.22) dataGeneratorsVersion=1.20.4-0.1.57-ALPHA blockUI_version=1.0.192-1.21.1-snapshot -structurize_version=1.0.754-1.21.1-snapshot +structurize_version=1.0.755-1.21.1-snapshot domumOrnamentumVersion=1.0.204-1.21.1-snapshot multiPistonVersion=1.2.51-1.21.1-snapshot diff --git a/src/datagen/generated/minecolonies/data/c/tags/item/foods.json b/src/datagen/generated/minecolonies/data/c/tags/item/foods.json index 87874c27381..8dfd5748e78 100644 --- a/src/datagen/generated/minecolonies/data/c/tags/item/foods.json +++ b/src/datagen/generated/minecolonies/data/c/tags/item/foods.json @@ -1,8 +1,63 @@ { "values": [ - "minecolonies:milky_bread", - "minecolonies:sugary_bread", - "minecolonies:golden_bread", - "minecolonies:chorus_bread" + "minecolonies:cheddar_cheese", + "minecolonies:feta_cheese", + "minecolonies:cooked_rice", + "minecolonies:tofu", + "minecolonies:flatbread", + "minecolonies:cheese_ravioli", + "minecolonies:chicken_broth", + "minecolonies:meat_ravioli", + "minecolonies:mint_jelly", + "minecolonies:mint_tea", + "minecolonies:polenta", + "minecolonies:potato_soup", + "minecolonies:veggie_ravioli", + "minecolonies:yogurt", + "minecolonies:squash_soup", + "minecolonies:pea_soup", + "minecolonies:corn_chowder", + "minecolonies:tortillas", + "minecolonies:spicy_grilled_chicken", + "minecolonies:manchet_bread", + "minecolonies:lembas_scone", + "minecolonies:muffin", + "minecolonies:pottage", + "minecolonies:pasta_plain", + "minecolonies:apple_pie", + "minecolonies:plain_cheesecake", + "minecolonies:baked_salmon", + "minecolonies:eggdrop_soup", + "minecolonies:fish_n_chips", + "minecolonies:pierogi", + "minecolonies:veggie_soup", + "minecolonies:yogurt_with_berries", + "minecolonies:cabochis", + "minecolonies:veggie_quiche", + "minecolonies:rice_ball", + "minecolonies:mutton_dinner", + "minecolonies:pasta_tomato", + "minecolonies:cheese_pizza", + "minecolonies:pepper_hummus", + "minecolonies:kebab", + "minecolonies:congee", + "minecolonies:kimchi", + "minecolonies:hand_pie", + "minecolonies:mintchoco_cheesecake", + "minecolonies:borscht", + "minecolonies:schnitzel", + "minecolonies:steak_dinner", + "minecolonies:lamb_stew", + "minecolonies:fish_dinner", + "minecolonies:sushi_roll", + "minecolonies:ramen", + "minecolonies:eggplant_dolma", + "minecolonies:stuffed_pita", + "minecolonies:mushroom_pizza", + "minecolonies:pita_hummus", + "minecolonies:spicy_eggplant", + "minecolonies:stew_trencher", + "minecolonies:stuffed_pepper", + "minecolonies:tacos" ] } \ No newline at end of file diff --git a/src/datagen/generated/minecolonies/data/c/tags/item/foods/bread.json b/src/datagen/generated/minecolonies/data/c/tags/item/foods/bread.json index 87874c27381..61ca1c7d2e9 100644 --- a/src/datagen/generated/minecolonies/data/c/tags/item/foods/bread.json +++ b/src/datagen/generated/minecolonies/data/c/tags/item/foods/bread.json @@ -3,6 +3,13 @@ "minecolonies:milky_bread", "minecolonies:sugary_bread", "minecolonies:golden_bread", - "minecolonies:chorus_bread" + "minecolonies:chorus_bread", + "minecolonies:flatbread", + "minecolonies:hand_pie", + "minecolonies:lembas_scone", + "minecolonies:manchet_bread", + "minecolonies:muffin", + "minecolonies:stew_trencher", + "minecolonies:stuffed_pita" ] } \ No newline at end of file diff --git a/src/datagen/generated/minecolonies/data/c/tags/item/foods/candy.json b/src/datagen/generated/minecolonies/data/c/tags/item/foods/candy.json new file mode 100644 index 00000000000..e9bc283b697 --- /dev/null +++ b/src/datagen/generated/minecolonies/data/c/tags/item/foods/candy.json @@ -0,0 +1,6 @@ +{ + "values": [ + "minecolonies:hand_pie", + "minecolonies:muffin" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/minecolonies/data/c/tags/item/foods/cooked_meat.json b/src/datagen/generated/minecolonies/data/c/tags/item/foods/cooked_meat.json new file mode 100644 index 00000000000..8c3ed198ebc --- /dev/null +++ b/src/datagen/generated/minecolonies/data/c/tags/item/foods/cooked_meat.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecolonies:lamb_stew" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/minecolonies/data/c/tags/item/foods/soup.json b/src/datagen/generated/minecolonies/data/c/tags/item/foods/soup.json new file mode 100644 index 00000000000..4cdbc6510aa --- /dev/null +++ b/src/datagen/generated/minecolonies/data/c/tags/item/foods/soup.json @@ -0,0 +1,7 @@ +{ + "values": [ + "minecolonies:cabochis", + "minecolonies:lamb_stew", + "minecolonies:pottage" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/minecolonies/data/c/tags/item/foods/vegetable.json b/src/datagen/generated/minecolonies/data/c/tags/item/foods/vegetable.json new file mode 100644 index 00000000000..70f7f6e8606 --- /dev/null +++ b/src/datagen/generated/minecolonies/data/c/tags/item/foods/vegetable.json @@ -0,0 +1,9 @@ +{ + "values": [ + "minecolonies:cabochis", + "minecolonies:eggplant_dolma", + "minecolonies:pottage", + "minecolonies:stuffed_pepper", + "minecolonies:stuffed_pita" + ] +} \ No newline at end of file diff --git a/src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore1.json b/src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore1.json similarity index 93% rename from src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore1.json rename to src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore1.json index 68e1519c018..d3f2141376e 100644 --- a/src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore1.json +++ b/src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore1.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore2.json b/src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore2.json similarity index 95% rename from src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore2.json rename to src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore2.json index 2158112901d..17b3a58ede2 100644 --- a/src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore2.json +++ b/src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore2.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore3.json b/src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore3.json similarity index 96% rename from src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore3.json rename to src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore3.json index fb6521139a0..ee6123f51e0 100644 --- a/src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore3.json +++ b/src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore3.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore4.json b/src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore4.json similarity index 97% rename from src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore4.json rename to src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore4.json index 63c9fb3f3cd..47fc1fedbbb 100644 --- a/src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore4.json +++ b/src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore4.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore5.json b/src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore5.json similarity index 97% rename from src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore5.json rename to src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore5.json index 1577bb6e16b..a0d604f8c5b 100644 --- a/src/datagen/generated/minecolonies/data/minecolonies/loot_tables/loot_tables/miner/lucky_ore5.json +++ b/src/datagen/generated/minecolonies/data/minecolonies/loot_table/loot_tables/miner/lucky_ore5.json @@ -1,4 +1,5 @@ { + "type": "minecraft:block", "pools": [ { "bonus_rolls": 0.0, diff --git a/src/main/java/com/minecolonies/api/crafting/GenericRecipe.java b/src/main/java/com/minecolonies/api/crafting/GenericRecipe.java index 2b889d07dbd..fa2bed67af0 100644 --- a/src/main/java/com/minecolonies/api/crafting/GenericRecipe.java +++ b/src/main/java/com/minecolonies/api/crafting/GenericRecipe.java @@ -9,7 +9,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.CraftingContainer; @@ -97,8 +97,8 @@ public static IGenericRecipe of(@Nullable final IToken recipeToken) private final Block intermediate; private final @Nullable ResourceKey lootTable; private final EquipmentTypeEntry requiredTool; - private final LivingEntity requiredEntity; - private final List restrictions; + private final EntityType requiredEntity; + private final List restrictions; private final int levelSort; public GenericRecipe(@Nullable final ResourceLocation id, @@ -133,7 +133,7 @@ public GenericRecipe(@Nullable final ResourceLocation id, final int gridSize, @NotNull final Block intermediate, @Nullable final ResourceKey lootTable, @NotNull final EquipmentTypeEntry requiredTool, - @Nullable final LivingEntity requiredEntity, + @Nullable final EntityType requiredEntity, @NotNull final List restrictions, final int levelSort) { @@ -250,8 +250,9 @@ public EquipmentTypeEntry getRequiredTool() return this.requiredTool; } + @Nullable @Override - public @Nullable LivingEntity getRequiredEntity() + public EntityType getRequiredEntity() { return this.requiredEntity; } diff --git a/src/main/java/com/minecolonies/api/crafting/IGenericRecipe.java b/src/main/java/com/minecolonies/api/crafting/IGenericRecipe.java index f8d121047e2..eeacb6dce4b 100644 --- a/src/main/java/com/minecolonies/api/crafting/IGenericRecipe.java +++ b/src/main/java/com/minecolonies/api/crafting/IGenericRecipe.java @@ -5,7 +5,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.storage.loot.LootTable; @@ -136,7 +136,7 @@ public interface IGenericRecipe * @return The required creature. */ @Nullable - LivingEntity getRequiredEntity(); + EntityType getRequiredEntity(); /** * Gets some human-readable restrictions on when this recipe is valid. diff --git a/src/main/java/com/minecolonies/core/colony/buildings/modules/AnimalHerdingModule.java b/src/main/java/com/minecolonies/core/colony/buildings/modules/AnimalHerdingModule.java index 4e1581911ba..49ba0c2b06d 100644 --- a/src/main/java/com/minecolonies/core/colony/buildings/modules/AnimalHerdingModule.java +++ b/src/main/java/com/minecolonies/core/colony/buildings/modules/AnimalHerdingModule.java @@ -104,7 +104,7 @@ public List getRecipesForDisplayPurposesOnly(@NotNull final Anim Blocks.AIR, animal.getLootTable(), ModEquipmentTypes.axe.get(), - animal, + animal.getType(), Collections.emptyList(), 0)); } diff --git a/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingBeekeeper.java b/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingBeekeeper.java index ec5b8bbae41..abae96cfa8f 100644 --- a/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingBeekeeper.java +++ b/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingBeekeeper.java @@ -274,12 +274,12 @@ public List getRecipesForDisplayPurposesOnly(@NotNull Animal ani recipes.add(new GenericRecipe(null, new ItemStack(Items.HONEYCOMB), Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), - 0, Blocks.AIR, null, ModEquipmentTypes.shears.get(), animal, Collections.emptyList(), 0)); + 0, Blocks.AIR, null, ModEquipmentTypes.shears.get(), animal.getType(), Collections.emptyList(), 0)); recipes.add(new GenericRecipe(null, new ItemStack(Items.HONEY_BOTTLE), Collections.emptyList(), Collections.emptyList(), Collections.singletonList(Collections.singletonList(new ItemStack(Items.GLASS_BOTTLE))), - 0, Blocks.AIR, null, ModEquipmentTypes.none.get(), animal, Collections.emptyList(), 0)); + 0, Blocks.AIR, null, ModEquipmentTypes.none.get(), animal.getType(), Collections.emptyList(), 0)); return recipes; } diff --git a/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingChickenHerder.java b/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingChickenHerder.java index b42534e0643..60e6022d65c 100755 --- a/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingChickenHerder.java +++ b/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingChickenHerder.java @@ -74,7 +74,7 @@ public List getRecipesForDisplayPurposesOnly(@NotNull Animal ani final List recipes = new ArrayList<>(super.getRecipesForDisplayPurposesOnly(animal)); recipes.add(new GenericRecipe(null, new ItemStack(Items.EGG), Collections.emptyList(), Collections.emptyList(), - Collections.emptyList(), 0, Blocks.AIR, null, ModEquipmentTypes.none.get(), animal, Collections.emptyList(), 0)); + Collections.emptyList(), 0, Blocks.AIR, null, ModEquipmentTypes.none.get(), animal.getType(), Collections.emptyList(), 0)); return recipes; } diff --git a/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingCowboy.java b/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingCowboy.java index 1ce8e69d5ad..f84cd12e27e 100755 --- a/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingCowboy.java +++ b/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingCowboy.java @@ -190,7 +190,7 @@ public List getRecipesForDisplayPurposesOnly(@NotNull Animal ani Collections.singletonList(new ItemStack(Items.SUSPICIOUS_STEW)), // alt output Collections.emptyList(), // extra output Collections.singletonList(Collections.singletonList(new ItemStack(Items.BOWL))), // input - 1, Blocks.AIR, null, ModEquipmentTypes.none.get(), animal, Collections.emptyList(), 0)); + 1, Blocks.AIR, null, ModEquipmentTypes.none.get(), animal.getType(), Collections.emptyList(), 0)); } else if (animal instanceof Cow) { @@ -199,13 +199,13 @@ else if (animal instanceof Cow) Collections.emptyList(), // alt output Collections.emptyList(), // extra output Collections.singletonList(Collections.singletonList(new ItemStack(Items.BUCKET))), // input - 1, Blocks.AIR, null, ModEquipmentTypes.none.get(), animal, Collections.emptyList(), 0)); + 1, Blocks.AIR, null, ModEquipmentTypes.none.get(), animal.getType(), Collections.emptyList(), 0)); recipes.add(new GenericRecipe(null, new ItemStack(ModItems.large_milk_bottle), // output Collections.emptyList(), // alt output Collections.emptyList(), // extra output Collections.singletonList(Collections.singletonList(new ItemStack(ModItems.large_empty_bottle))), // input - 1, Blocks.AIR, null, ModEquipmentTypes.none.get(), animal, Collections.emptyList(), 0)); + 1, Blocks.AIR, null, ModEquipmentTypes.none.get(), animal.getType(), Collections.emptyList(), 0)); } return recipes; diff --git a/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingShepherd.java b/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingShepherd.java index ba555fabc00..2d6ab758d61 100755 --- a/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingShepherd.java +++ b/src/main/java/com/minecolonies/core/colony/buildings/workerbuildings/BuildingShepherd.java @@ -109,7 +109,7 @@ public List getRecipesForDisplayPurposesOnly(@NotNull Animal ani recipes.add(new GenericRecipe(null, ItemStack.EMPTY, StreamSupport.stream(BuiltInRegistries.ITEM.getTagOrEmpty(ItemTags.WOOL).spliterator(), false).map(ItemStack::new).toList(), Collections.emptyList(), Collections.emptyList(), - 0, Blocks.AIR, null, ModEquipmentTypes.shears.get(), animal, Collections.emptyList(), 0)); + 0, Blocks.AIR, null, ModEquipmentTypes.shears.get(), animal.getType(), Collections.emptyList(), 0)); return recipes; } diff --git a/src/main/java/com/minecolonies/core/compatibility/jei/GenericRecipeCategory.java b/src/main/java/com/minecolonies/core/compatibility/jei/GenericRecipeCategory.java index 25ae74945ae..45fda21239c 100644 --- a/src/main/java/com/minecolonies/core/compatibility/jei/GenericRecipeCategory.java +++ b/src/main/java/com/minecolonies/core/compatibility/jei/GenericRecipeCategory.java @@ -1,11 +1,14 @@ package com.minecolonies.core.compatibility.jei; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import com.ldtteam.blockui.UiRenderMacros; import com.minecolonies.api.colony.buildings.modules.ICraftingBuildingModule; import com.minecolonies.api.colony.buildings.registry.BuildingEntry; import com.minecolonies.api.colony.jobs.IJob; import com.minecolonies.api.crafting.IGenericRecipe; import com.minecolonies.api.crafting.registry.CraftingType; +import com.minecolonies.api.util.Log; import com.minecolonies.api.util.constant.TranslationConstants; import com.minecolonies.core.colony.buildings.modules.AnimalHerdingModule; import com.minecolonies.core.colony.crafting.CustomRecipeManager; @@ -22,13 +25,15 @@ import mezz.jei.api.helpers.IModIdHelper; import mezz.jei.api.recipe.IFocusGroup; import mezz.jei.api.recipe.RecipeType; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.Rect2i; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; @@ -39,6 +44,7 @@ import net.neoforged.api.distmarker.OnlyIn; import org.jetbrains.annotations.NotNull; +import java.time.Duration; import java.util.*; import java.util.stream.Collectors; @@ -69,6 +75,10 @@ public GenericRecipeCategory(@NotNull final BuildingEntry building, @NotNull private final IModIdHelper modIdHelper; @NotNull private final ITickTimer animalTimer; + private static final Cache, Entity> entityCache = CacheBuilder.newBuilder() + .expireAfterAccess(Duration.ofMinutes(2)) + .build(); + private static final int ANIMAL_W = (WIDTH - CITIZEN_W) / 2; private static final int ANIMAL_H = CITIZEN_H - 10; private static final int ANIMAL_X = CITIZEN_X + CITIZEN_W + (WIDTH - CITIZEN_X - CITIZEN_W - ANIMAL_W) / 2; @@ -281,20 +291,29 @@ public void draw(@NotNull final IGenericRecipe recipe, RenderHelper.renderBlock(stack, block, outputSlotX + 8, CITIZEN_Y + 6, 100, -30F, 30F, 16F); } - final LivingEntity animal = recipe.getRequiredEntity(); - if (animal != null) + final EntityType entityType = recipe.getRequiredEntity(); + if (entityType != null) { - final float scale = ANIMAL_H / 2.4f; - final int animal_cx = ANIMAL_X + (ANIMAL_W / 2); - final int animal_cy = ANIMAL_Y + (ANIMAL_H / 2); - final int animal_by = ANIMAL_Y + ANIMAL_H; - final int offsetY = 16; - final float yaw = animalTimer.getValue(); - final float headYaw = (float) Math.atan((animal_cx - mouseX) / 40.0F) * 40.0F + yaw; - final float pitch = (float) Math.atan((animal_cy - offsetY - mouseY) / 40.0F) * 20.0F; - Lighting.setupForFlatItems(); - UiRenderMacros.drawEntity(stack.pose(), animal_cx, animal_by - offsetY, scale, headYaw, yaw, pitch, animal); - Lighting.setupFor3DItems(); + try + { + final Entity entity = entityCache.get(entityType, () -> entityType.create(Minecraft.getInstance().level)); + + final float scale = ANIMAL_H / 2.4f; + final int animal_cx = ANIMAL_X + (ANIMAL_W / 2); + final int animal_cy = ANIMAL_Y + (ANIMAL_H / 2); + final int animal_by = ANIMAL_Y + ANIMAL_H; + final int offsetY = 16; + final float yaw = animalTimer.getValue(); + final float headYaw = (float) Math.atan((animal_cx - mouseX) / 40.0F) * 40.0F + yaw; + final float pitch = (float) Math.atan((animal_cy - offsetY - mouseY) / 40.0F) * 20.0F; + Lighting.setupForFlatItems(); + UiRenderMacros.drawEntity(stack.pose(), animal_cx, animal_by - offsetY, scale, headYaw, yaw, pitch, entity); + Lighting.setupFor3DItems(); + } + catch (final Throwable e) + { + Log.getLogger().error("Error drawing {}", entityType.getDescriptionId(), e); + } } } diff --git a/src/main/java/com/minecolonies/core/compatibility/jei/JeiFakeLevel.java b/src/main/java/com/minecolonies/core/compatibility/jei/JeiFakeLevel.java new file mode 100644 index 00000000000..ae2e0b93fbf --- /dev/null +++ b/src/main/java/com/minecolonies/core/compatibility/jei/JeiFakeLevel.java @@ -0,0 +1,25 @@ +package com.minecolonies.core.compatibility.jei; + +import com.ldtteam.common.fakelevel.SingleBlockFakeLevel; +import net.minecraft.client.Minecraft; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; + +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; + +@OnlyIn(Dist.CLIENT) +public class JeiFakeLevel extends SingleBlockFakeLevel +{ + public JeiFakeLevel() + { + super(null); + prepare(Blocks.AIR.defaultBlockState(), null, null); + } + + @Override + public Level realLevel() + { + return Minecraft.getInstance().level; + } +} diff --git a/src/main/java/com/minecolonies/core/compatibility/jei/JobBasedRecipeCategory.java b/src/main/java/com/minecolonies/core/compatibility/jei/JobBasedRecipeCategory.java index 9436646792b..34824496b77 100644 --- a/src/main/java/com/minecolonies/core/compatibility/jei/JobBasedRecipeCategory.java +++ b/src/main/java/com/minecolonies/core/compatibility/jei/JobBasedRecipeCategory.java @@ -50,7 +50,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.storage.loot.LootTable; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.stream.Collectors; @@ -61,7 +60,9 @@ */ public abstract class JobBasedRecipeCategory extends AbstractRecipeCategory { + protected static final JeiFakeLevel FAKE_LEVEL = new JeiFakeLevel(); private static final Map> TOOL_CACHE = new HashMap<>(); + protected static final ResourceLocation TEXTURE = new ResourceLocation(Constants.MOD_ID, "textures/gui/jei_recipe.png"); @NotNull protected final IJob job; @NotNull private final ItemStack catalyst; @@ -284,7 +285,7 @@ public InfoBlock(final String text, final String tip, final Rect2i bounds) @NotNull private static EntityCitizen createCitizenWithJob(@NotNull final IJob job) { - final EntityCitizen citizen = new EntityCitizen(ModEntities.CITIZEN, Minecraft.getInstance().level); + final EntityCitizen citizen = new EntityCitizen(ModEntities.CITIZEN, FAKE_LEVEL); citizen.setFemale(citizen.getRandom().nextBoolean()); citizen.setTextureId(citizen.getRandom().nextInt(255)); citizen.getEntityData().set(EntityCitizen.DATA_TEXTURE_SUFFIX, CitizenData.SUFFIXES.get(citizen.getRandom().nextInt(CitizenData.SUFFIXES.size()))); diff --git a/src/main/java/com/minecolonies/core/entity/ai/workers/crafting/EntityAIConcreteMixer.java b/src/main/java/com/minecolonies/core/entity/ai/workers/crafting/EntityAIConcreteMixer.java index 75c9a02c419..691e7980eed 100644 --- a/src/main/java/com/minecolonies/core/entity/ai/workers/crafting/EntityAIConcreteMixer.java +++ b/src/main/java/com/minecolonies/core/entity/ai/workers/crafting/EntityAIConcreteMixer.java @@ -71,7 +71,7 @@ private IAIState placePowder() final int slot = getSlotWithPowder(); if (slot == -1) { - if (InventoryUtils.hasItemInItemHandler(building.getCapability(ForgeCapabilities.ITEM_HANDLER).orElseGet(null), CONCRETE)) + if (InventoryUtils.hasItemInItemHandler(building.getItemHandlerCap(), CONCRETE)) { needsCurrently = new Tuple<>(CONCRETE, STACKSIZE); return GATHERING_REQUIRED_MATERIALS; diff --git a/src/main/java/com/minecolonies/core/entity/ai/workers/production/EntityAIStructureMiner.java b/src/main/java/com/minecolonies/core/entity/ai/workers/production/EntityAIStructureMiner.java index 11e1128d24e..12a7a7d34ba 100755 --- a/src/main/java/com/minecolonies/core/entity/ai/workers/production/EntityAIStructureMiner.java +++ b/src/main/java/com/minecolonies/core/entity/ai/workers/production/EntityAIStructureMiner.java @@ -1,6 +1,7 @@ package com.minecolonies.core.entity.ai.workers.production; import com.ldtteam.structurize.api.RotationMirror; +import com.minecolonies.api.MinecoloniesAPIProxy; import com.minecolonies.api.advancements.AdvancementTriggers; import com.minecolonies.api.colony.IColonyManager; import com.minecolonies.api.colony.interactionhandling.ChatPriority; @@ -24,7 +25,10 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; @@ -34,8 +38,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; +import net.minecraft.world.level.storage.loot.LootTable; import net.neoforged.neoforge.common.ItemAbilities; -import net.minecraft.world.level.storage.loot.LootDataManager; import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.LootParams.Builder; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; @@ -983,15 +987,16 @@ protected void triggerMinedBlock(@NotNull final BlockPos position, @NotNull fina if (canGetLuckyBlock) { - final LootDataManager manager = building.getColony().getWorld().getServer().getLootData(); - final ResourceLocation lootTableId = LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(building.getBuildingLevel())); + + final ResourceKey lootTableId = ResourceKey.create(Registries.LOOT_TABLE, LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(building.getBuildingLevel()))); final LootParams lootParams = new Builder((ServerLevel) this.world) .withParameter(LootContextParams.ORIGIN, position.getCenter()) .withParameter(LootContextParams.THIS_ENTITY, worker) .withParameter(LootContextParams.TOOL, worker.getMainHandItem()) .create(LUCKY_ORE_PARAM_SET); - final ObjectArrayList randomItems = manager.getLootTable(lootTableId).getRandomItems(lootParams); + + final ObjectArrayList randomItems = worker.level().getServer().reloadableRegistries().getLootTable(lootTableId).getRandomItems(lootParams); for (final ItemStack stack : randomItems) { InventoryUtils.transferItemStackIntoNextBestSlotInItemHandler(stack, worker.getInventoryCitizen()); diff --git a/src/main/java/com/minecolonies/core/event/GatherDataHandler.java b/src/main/java/com/minecolonies/core/event/GatherDataHandler.java index 1c7ccbcc5fb..8323652059a 100755 --- a/src/main/java/com/minecolonies/core/event/GatherDataHandler.java +++ b/src/main/java/com/minecolonies/core/event/GatherDataHandler.java @@ -58,7 +58,6 @@ public static void dataGeneratorSetup(final GatherDataEvent event) generator.addProvider(event.includeServer(), new DefaultRecipeProvider(generator.getPackOutput(), provider)); generator.addProvider(event.includeServer(), new DefaultBiomeTagsProvider(generator.getPackOutput(), provider, event.getExistingFileHelper())); generator.addProvider(event.includeServer(), new DefaultLootModifiersProvider(generator.getPackOutput(), provider)); - generator.addProvider(event.includeServer(), new DefaultLuckyOreLootProvider(generator.getPackOutput())); // workers generator.addProvider(event.includeServer(), new DefaultAlchemistCraftingProvider(generator.getPackOutput(), provider)); @@ -98,7 +97,8 @@ public LootTableProviders(final PackOutput packOutput, CompletableFuture, LootTable.Builder> generator) { final LootPool.Builder luckyOres1 = new Builder() .add(LootItem.lootTableItem(Items.COAL_ORE).setWeight(64)) .add(LootItem.lootTableItem(Items.COPPER_ORE).setWeight(48)); - registrar.register(LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(1)), LUCKY_ORE_PARAM_SET, LootTable.lootTable().withPool(luckyOres1)); + generator.accept(ResourceKey.create(Registries.LOOT_TABLE, LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(1))), LootTable.lootTable().withPool(luckyOres1).setParamSet(LUCKY_ORE_PARAM_SET)); final LootPool.Builder luckyOres2 = new Builder() .add(LootItem.lootTableItem(Items.COAL_ORE).setWeight(64)) .add(LootItem.lootTableItem(Items.COPPER_ORE).setWeight(48)) .add(LootItem.lootTableItem(Items.IRON_ORE).setWeight(32)) .add(LootItem.lootTableItem(Items.GOLD_ORE).setWeight(16)); - registrar.register(LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(2)), LUCKY_ORE_PARAM_SET, LootTable.lootTable().withPool(luckyOres2)); + generator.accept(ResourceKey.create(Registries.LOOT_TABLE, LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(2))), LootTable.lootTable().withPool(luckyOres2).setParamSet(LUCKY_ORE_PARAM_SET)); final LootPool.Builder luckyOres3 = new Builder() .add(LootItem.lootTableItem(Items.COAL_ORE).setWeight(64)) @@ -51,7 +50,7 @@ protected void registerTables(final @NotNull SimpleLootTableProvider.LootTableRe .add(LootItem.lootTableItem(Items.GOLD_ORE).setWeight(16)) .add(LootItem.lootTableItem(Items.REDSTONE_ORE).setWeight(8)) .add(LootItem.lootTableItem(Items.LAPIS_ORE).setWeight(4)); - registrar.register(LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(3)), LUCKY_ORE_PARAM_SET, LootTable.lootTable().withPool(luckyOres3)); + generator.accept(ResourceKey.create(Registries.LOOT_TABLE, LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(3))), LootTable.lootTable().withPool(luckyOres3).setParamSet(LUCKY_ORE_PARAM_SET)); final LootPool.Builder luckyOres4 = new Builder() .add(LootItem.lootTableItem(Items.COAL_ORE).setWeight(64)) @@ -62,7 +61,7 @@ protected void registerTables(final @NotNull SimpleLootTableProvider.LootTableRe .add(LootItem.lootTableItem(Items.LAPIS_ORE).setWeight(4)) .add(LootItem.lootTableItem(Items.DIAMOND_ORE).setWeight(2)) .add(LootItem.lootTableItem(Items.EMERALD_ORE).setWeight(1)); - registrar.register(LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(4)), LUCKY_ORE_PARAM_SET, LootTable.lootTable().withPool(luckyOres4)); - registrar.register(LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(5)), LUCKY_ORE_PARAM_SET, LootTable.lootTable().withPool(luckyOres4)); + generator.accept(ResourceKey.create(Registries.LOOT_TABLE, LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(4))), LootTable.lootTable().withPool(luckyOres4).setParamSet(LUCKY_ORE_PARAM_SET)); + generator.accept(ResourceKey.create(Registries.LOOT_TABLE, LUCKY_ORE_LOOT_TABLE.withSuffix(String.valueOf(5))), LootTable.lootTable().withPool(luckyOres4).setParamSet(LUCKY_ORE_PARAM_SET)); } }