Update to 1.20.4 and big refactoring

- Added new dishes and categories
- Switched from Patchouli to the Lavender library for the cooking guide
This commit is contained in:
Martin Prokoph
2024-07-06 19:05:54 +02:00
parent 5417b8976c
commit d7b7f483b8
288 changed files with 2290 additions and 1834 deletions

View File

@@ -1,5 +1,5 @@
plugins {
id 'fabric-loom' version '1.0-SNAPSHOT'
id 'fabric-loom' version '1.5-SNAPSHOT'
id 'maven-publish'
}
@@ -12,10 +12,26 @@ group = project.maven_group
repositories {
maven { url "https://jitpack.io" }
maven { url 'https://maven.blamejared.com' }
maven { url 'https://maven.wispforest.io' }
maven { url "https://api.modrinth.com/maven" }
flatDir { dirs 'localMaven'}
}
loom {
runs {
//
// This adds a new gradle task that runs the datagen API: "gradlew runDatagenClient"
//
datagenClient {
inherit client
name "Data Generation"
vmArg "-Dfabric-api.datagen"
vmArg "-Dfabric-api.datagen.output-dir=${file("src/main/generated")}"
vmArg "-Dfabric-api.datagen.modid=dishes"
runDir "build/datagen"
}
}
}
dependencies {
//to change the versions see the gradle.properties file
@@ -24,16 +40,18 @@ dependencies {
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
modImplementation "vazkii.patchouli:Patchouli:${patchouli_version}"
modImplementation "com.github.Draylar:maybe-data:${maybedata_version}"
include "com.github.Draylar:maybe-data:${maybedata_version}"
//modImplementation "com.github.Draylar:maybe-data:${maybedata_version}"
//include "com.github.Draylar:maybe-data:${maybedata_version}"
modImplementation "maven.modrinth:midnightlib:${midnightlib_version}"
include "maven.modrinth:midnightlib:${midnightlib_version}"
modImplementation "io.wispforest:lavender:${project.lavender_version}"
//include "io.wispforest:owo-sentinel:${project.owo_version}"
}
processResources {
inputs.property "version", project.version
@@ -52,17 +70,27 @@ tasks.withType(JavaCompile).configureEach {
// Minecraft 1.17 (21w19a) upwards uses Java 16.
it.options.release = 17
}
sourceSets {
main {
resources {
srcDirs += [
'src/main/generated'
]
}
}
}
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this task, sources will not be generated.
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = "sources"
from sourceSets.main.allSource
java {
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this line, sources will not be generated.
withSourcesJar()
}
jar {
from "LICENSE"
from("LICENSE") {
rename { "${it}_${project.archivesBaseName}"}
}
}
// configure the maven publication
@@ -79,9 +107,11 @@ publishing {
}
}
// select the repositories you want to publish to
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
repositories {
// uncomment to publish to the local maven
// mavenLocal()
// Add repositories to publish to here.
// Notice: This block does NOT have the same function as the block in the top level.
// The repositories here will be used for publishing your artifact, not for
// retrieving dependencies.
}
}

View File

@@ -3,9 +3,9 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://fabricmc.net/use
minecraft_version=1.19.2
yarn_mappings=1.19.2+build.18
loader_version=0.14.9
minecraft_version=1.20.4
yarn_mappings=1.20.4+build.3
loader_version=0.15.6
# Mod Properties
mod_version = 2.1.0
@@ -14,7 +14,7 @@ org.gradle.jvmargs=-Xmx1G
# Dependencies
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
fabric_version=0.62.0+1.19.2
patchouli_version=1.19.2-76-FABRIC
maybedata_version=1.3.2-fixed-1.19
midnightlib_version=0.6.1
fabric_version=0.95.0+1.20.4
lavender_version=0.1.1+1.20.3
maybedata_version=1.3.3-1.20.1
midnightlib_version=1.5.3-fabric

Binary file not shown.

View File

@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

35
gradlew vendored
View File

@@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +80,11 @@ do
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -133,22 +131,29 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \

1
gradlew.bat vendored
View File

@@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

Binary file not shown.

View File

@@ -0,0 +1,3 @@
// 1.20.4 2024-01-21T21:20:57.049164582 Delicious Dishes/dishes
1f65a30409d1c2c6430719120b006a65359dbfec data/dishes/worldgen/placed_feature/salt_ore.json
b923b2c0e59f586cd53f11c367965f748807ede8 data/dishes/worldgen/configured_feature/salt_ore.json

View File

@@ -0,0 +1,18 @@
{
"type": "minecraft:ore",
"config": {
"discard_chance_on_air_exposure": 0.0,
"size": 9,
"targets": [
{
"state": {
"Name": "dishes:salt_ore"
},
"target": {
"predicate_type": "minecraft:tag_match",
"tag": "minecraft:stone_ore_replaceables"
}
}
]
}
}

View File

@@ -0,0 +1,44 @@
{
"feature": {
"type": "minecraft:ore",
"config": {
"discard_chance_on_air_exposure": 0.0,
"size": 9,
"targets": [
{
"state": {
"Name": "dishes:salt_ore"
},
"target": {
"predicate_type": "minecraft:tag_match",
"tag": "minecraft:stone_ore_replaceables"
}
}
]
}
},
"placement": [
{
"type": "minecraft:count",
"count": 20
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:height_range",
"height": {
"type": "minecraft:uniform",
"max_inclusive": {
"absolute": 120
},
"min_inclusive": {
"above_bottom": 0
}
}
},
{
"type": "minecraft:biome"
}
]
}

View File

@@ -0,0 +1,50 @@
package eu.midnightdust.motschen.dishes;
import eu.midnightdust.motschen.dishes.world.OreFeatures;
import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricDynamicRegistryProvider;
import net.minecraft.registry.RegistryBuilder;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.RegistryWrapper;
import java.util.concurrent.CompletableFuture;
public class DishesDataGen implements DataGeneratorEntrypoint {
@Override
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
FabricDataGenerator.Pack pack = fabricDataGenerator.createPack();
pack.addProvider(WorldGenData::new);
System.out.println("out");
}
@Override
public String getEffectiveModId() {
return "dishes";
}
@Override
public void buildRegistry(RegistryBuilder registryBuilder) {
System.out.println("building registry");
registryBuilder.addRegistry(RegistryKeys.CONFIGURED_FEATURE, OreFeatures::initConfigured);
registryBuilder.addRegistry(RegistryKeys.PLACED_FEATURE, OreFeatures::initPlaced);
}
public static class WorldGenData extends FabricDynamicRegistryProvider {
public WorldGenData(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) {
super(output, registriesFuture);
}
@Override
protected void configure(RegistryWrapper.WrapperLookup registries, Entries entries) {
System.out.println("configure");
entries.addAll(registries.getWrapperOrThrow(RegistryKeys.CONFIGURED_FEATURE));
entries.addAll(registries.getWrapperOrThrow(RegistryKeys.PLACED_FEATURE));
}
@Override
public String getName() {
return DishesMain.MOD_ID;
}
}
}

View File

@@ -2,32 +2,40 @@ package eu.midnightdust.motschen.dishes;
import eu.midnightdust.motschen.dishes.block.*;
import eu.midnightdust.motschen.dishes.blockstates.DishBites;
import eu.midnightdust.motschen.dishes.compat.CookingGuideItem;
import eu.midnightdust.motschen.dishes.compat.Flags;
import eu.midnightdust.motschen.dishes.config.DishesConfig;
import eu.midnightdust.motschen.dishes.init.CropInit;
import eu.midnightdust.motschen.dishes.init.IceCreamTraderInit;
import eu.midnightdust.motschen.dishes.init.WorldGenInit;
import eu.midnightdust.motschen.dishes.item.DishItem;
import eu.midnightdust.motschen.dishes.item.IceCreamItem;
import eu.midnightdust.motschen.dishes.utils.DishGroup;
import io.wispforest.lavender.book.LavenderBookItem;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.item.*;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import java.util.*;
import static eu.midnightdust.motschen.dishes.utils.RegistryUtils.registerItem;
import static eu.midnightdust.motschen.dishes.utils.RegistryUtils.registerBlockWithItem;
import static eu.midnightdust.motschen.dishes.utils.RegistryUtils.registerDishWithItem;
public class DishesMain implements ModInitializer {
public static final String MOD_ID = "dishes";
public static final ItemGroup MainGroup = FabricItemGroupBuilder.build(new Identifier(MOD_ID, "main"), () -> new ItemStack(DishesMain.CheeseRoll));
public static final ItemGroup DishesGroup = FabricItemGroupBuilder.build(new Identifier(MOD_ID, "dishes"), () -> new ItemStack(DishesMain.FishAndChips));
public static final ItemGroup PizzaGroup = FabricItemGroupBuilder.build(new Identifier(MOD_ID, "pizza"), () -> new ItemStack(DishesMain.PizzaSalami));
public static final ItemGroup SweetsGroup = FabricItemGroupBuilder.build(new Identifier(MOD_ID, "sweets"), () -> new ItemStack(DishesMain.IceCreamVanilla));
public static final Item CookingGuide = new CookingGuideItem(new Item.Settings().maxCount(1));
public static final Map<DishGroup, List<ItemStack>> itemGroupMap = new HashMap<>();
public static ItemGroup MainGroup;
public static ItemGroup DishesGroup;
public static ItemGroup PizzaGroup;
public static ItemGroup SweetsGroup;
public static Item CookingGuide;// = new CookingGuideItem(new Item.Settings().maxCount(1));
public static final Block Plate = new Plate();
public static final Block Bowl = new Bowl();
public static final Block PizzaBox = new Plate();
@@ -35,6 +43,7 @@ public class DishesMain implements ModInitializer {
public static final Block TinyPotatoesWithCurdCheese = new Dish();
public static final Block Schnitzel = new Dish();
public static final Block PizzaMargherita = new Pizza();
public static final Block PizzaFungi = new Pizza();
public static final Block PizzaSalami = new Pizza();
public static final Block PizzaHam = new Pizza();
public static final Block PizzaTuna = new Pizza();
@@ -45,33 +54,35 @@ public class DishesMain implements ModInitializer {
public static final Block Chickenburger = new Dish();
public static final Block Cheeseburger = new Dish();
public static final Block Spaceburger = new Dish();
public static final Block Potatoburger = new Dish();
public static final Block Beetrootburger = new Dish();
public static final Block FishAndChips = new Dish();
public static final Block Borscht = new Soup();
public static final Item Knife = new Item(new Item.Settings().group(DishesMain.MainGroup).recipeRemainder(DishesMain.Knife).maxCount(1));
public static final Item PotatoSlice = new Item(new Item.Settings().group(DishesMain.MainGroup).food(new FoodComponent.Builder().hunger(1).saturationModifier(0.5f).snack().build()));
public static final Item RawFries = new Item(new Item.Settings().group(DishesMain.MainGroup).food(new FoodComponent.Builder().hunger(2).saturationModifier(0.75f).snack().build()));
public static final Item Fries = new Item(new Item.Settings().group(DishesMain.MainGroup).food(new FoodComponent.Builder().hunger(4).saturationModifier(1f).snack().build()));
public static final Item Knife = new Item(new Item.Settings().recipeRemainder(DishesMain.Knife).maxCount(1));
public static final Item PotatoSlice = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(1).saturationModifier(0.5f).snack().build()));
public static final Item RawFries = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(2).saturationModifier(0.75f).snack().build()));
public static final Item Fries = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(4).saturationModifier(1f).snack().build()));
public static final Block SaltOre = new Block(FabricBlockSettings.copyOf(Blocks.COAL_ORE));
public static final Item Salt = new Item(new Item.Settings().group(DishesMain.MainGroup));
public static final Item Flour = new Item(new Item.Settings().group(DishesMain.MainGroup));
public static final Item RawSpaghetti = new Item(new Item.Settings().group(DishesMain.MainGroup).food(new FoodComponent.Builder().hunger(1).saturationModifier(0.5f).build()));
public static final Item Spaghetti = new Item(new Item.Settings().group(DishesMain.MainGroup).food(new FoodComponent.Builder().hunger(2).saturationModifier(0.75f).snack().build()));
public static final Item Salami = new Item(new Item.Settings().group(DishesMain.MainGroup).food(new FoodComponent.Builder().hunger(3).saturationModifier(1f).snack().build()));
public static final Item RawBacon = new Item(new Item.Settings().group(DishesMain.MainGroup).food(new FoodComponent.Builder().hunger(1).saturationModifier(0.5f).build()));
public static final Item Bacon = new Item(new Item.Settings().group(DishesMain.MainGroup).food(new FoodComponent.Builder().hunger(2).saturationModifier(0.75f).build()));
public static final Item CheeseRoll = new Item(new Item.Settings().group(DishesMain.MainGroup).food(new FoodComponent.Builder().hunger(4).saturationModifier(1f).build()));
public static final Item CheeseSlice = new Item(new Item.Settings().group(DishesMain.MainGroup).food(new FoodComponent.Builder().hunger(2).saturationModifier(0.5f).snack().build()));
public static final Item Salt = new Item(new Item.Settings());
public static final Item Flour = new Item(new Item.Settings());
public static final Item RawSpaghetti = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(1).saturationModifier(0.5f).build()));
public static final Item Spaghetti = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(2).saturationModifier(0.75f).snack().build()));
public static final Item Salami = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(3).saturationModifier(1f).snack().build()));
public static final Item RawBacon = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(1).saturationModifier(0.5f).build()));
public static final Item Bacon = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(2).saturationModifier(0.75f).build()));
public static final Item CheeseRoll = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(4).saturationModifier(1f).build()));
public static final Item CheeseSlice = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(2).saturationModifier(0.5f).snack().build()));
public static final Item IceCreamVanilla = new IceCreamItem(new Item.Settings().group(DishesMain.SweetsGroup).food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamChocolate = new IceCreamItem(new Item.Settings().group(DishesMain.SweetsGroup).food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamWhiteChocolate = new IceCreamItem(new Item.Settings().group(DishesMain.SweetsGroup).food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamStrawberry = new IceCreamItem(new Item.Settings().group(DishesMain.SweetsGroup).food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamBanana = new IceCreamItem(new Item.Settings().group(DishesMain.SweetsGroup).food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamPear = new IceCreamItem(new Item.Settings().group(DishesMain.SweetsGroup).food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamSweetberry = new IceCreamItem(new Item.Settings().group(DishesMain.SweetsGroup).food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamBlueberry = new IceCreamItem(new Item.Settings().group(DishesMain.SweetsGroup).food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamBubblegum = new IceCreamItem(new Item.Settings().group(DishesMain.SweetsGroup).food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamGlowberry = new IceCreamItem(new Item.Settings().group(DishesMain.SweetsGroup).food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamVanilla = new IceCreamItem(new Item.Settings().food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamChocolate = new IceCreamItem(new Item.Settings().food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamWhiteChocolate = new IceCreamItem(new Item.Settings().food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamStrawberry = new IceCreamItem(new Item.Settings().food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamBanana = new IceCreamItem(new Item.Settings().food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamPear = new IceCreamItem(new Item.Settings().food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamSweetberry = new IceCreamItem(new Item.Settings().food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamBlueberry = new IceCreamItem(new Item.Settings().food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamBubblegum = new IceCreamItem(new Item.Settings().food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
public static final Item IceCreamGlowberry = new IceCreamItem(new Item.Settings().food(new FoodComponent.Builder().hunger(6).saturationModifier(1f).build()));
@Override
public void onInitialize() {
@@ -80,95 +91,90 @@ public class DishesMain implements ModInitializer {
new DishBites();
// General //
Registry.register(Registry.ITEM, new Identifier("dishes","salt_ore"), new BlockItem(SaltOre, new Item.Settings().group(DishesMain.MainGroup)));
Registry.register(Registry.BLOCK, new Identifier("dishes","salt_ore"), SaltOre);
Registry.register(Registry.ITEM, new Identifier("dishes","salt"), Salt);
Registry.register(Registry.ITEM, new Identifier("dishes","flour"), Flour);
Registry.register(Registry.ITEM, new Identifier("dishes","knife"), Knife);
Registry.register(Registry.ITEM, new Identifier("dishes","potato_slice"), PotatoSlice);
Registry.register(Registry.ITEM, new Identifier("dishes","raw_fries"), RawFries);
Registry.register(Registry.ITEM, new Identifier("dishes","fries"), Fries);
Registry.register(Registry.ITEM, new Identifier("dishes","raw_spaghetti"), RawSpaghetti);
Registry.register(Registry.ITEM, new Identifier("dishes","spaghetti"), Spaghetti);
Registry.register(Registry.ITEM, new Identifier("dishes","salami"), Salami);
Registry.register(Registry.ITEM, new Identifier("dishes","raw_bacon"), RawBacon);
Registry.register(Registry.ITEM, new Identifier("dishes","bacon"), Bacon);
Registry.register(Registry.ITEM, new Identifier("dishes","cheese_roll"), CheeseRoll);
Registry.register(Registry.ITEM, new Identifier("dishes","cheese_slice"), CheeseSlice);
registerBlockWithItem(new Identifier(MOD_ID,"salt_ore"), SaltOre, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"salt"), Salt, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"flour"), Flour, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"knife"), Knife, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"potato_slice"), PotatoSlice, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"raw_fries"), RawFries, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"fries"), Fries, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"raw_spaghetti"), RawSpaghetti, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"spaghetti"), Spaghetti, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"salami"), Salami, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"raw_bacon"), RawBacon, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"bacon"), Bacon, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"cheese_roll"), CheeseRoll, DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"cheese_slice"), CheeseSlice, DishGroup.MAIN);
CropInit.init();
// Dishes //
Registry.register(Registry.ITEM, new Identifier("dishes","plate"), new DishItem(Plate, new Item.Settings().group(DishesMain.DishesGroup)));
Registry.register(Registry.BLOCK, new Identifier("dishes","plate"), Plate);
Registry.register(Registry.ITEM, new Identifier("dishes","bowl"), new DishItem(Bowl, new Item.Settings().group(DishesMain.DishesGroup)));
Registry.register(Registry.BLOCK, new Identifier("dishes","bowl"), Bowl);
Registry.register(Registry.ITEM, new Identifier("dishes","potatoeswithcurdcheese"), new DishItem(PotatoesWithCurdCheese, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","potatoeswithcurdcheese"), PotatoesWithCurdCheese);
registerBlockWithItem(new Identifier(MOD_ID,"plate"), Plate, DishGroup.DISHES);
registerBlockWithItem(new Identifier(MOD_ID,"bowl"), Bowl, DishGroup.DISHES);
registerDishWithItem(new Identifier(MOD_ID,"potatoeswithcurdcheese"), PotatoesWithCurdCheese, DishGroup.DISHES, 10, 1f);
if (FabricLoader.getInstance().isModLoaded("lil_tater") | FabricLoader.getInstance().isModLoaded("liltater") | FabricLoader.getInstance().isModLoaded("ltr"))
Registry.register(Registry.ITEM, new Identifier("dishes","tinypotatoeswithcurdcheese"), new DishItem(TinyPotatoesWithCurdCheese, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
registerDishWithItem(new Identifier(MOD_ID,"tinypotatoeswithcurdcheese"), TinyPotatoesWithCurdCheese, DishGroup.DISHES, 10, 1f);
else
Registry.register(Registry.ITEM, new Identifier("dishes","tinypotatoeswithcurdcheese"), new DishItem(TinyPotatoesWithCurdCheese, new Item.Settings().food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
registerDishWithItem(new Identifier(MOD_ID,"tinypotatoeswithcurdcheese"), TinyPotatoesWithCurdCheese, DishGroup.NONE, 10, 1f);
Registry.register(Registry.BLOCK, new Identifier("dishes","tinypotatoeswithcurdcheese"), TinyPotatoesWithCurdCheese);
if (DishesConfig.enableMeatDishes) {
registerDishWithItem(new Identifier(MOD_ID, "schnitzel"), Schnitzel, DishGroup.DISHES, 10, 1f);
registerDishWithItem(new Identifier(MOD_ID, "spaghetti_bolognese"), SpaghettiBolognese, DishGroup.DISHES, 10, 1f);
registerDishWithItem(new Identifier(MOD_ID, "steak"), Steak, DishGroup.DISHES, 10, 1f);
registerDishWithItem(new Identifier(MOD_ID, "hamburger"), Hamburger, DishGroup.DISHES, 10, 1f);
registerDishWithItem(new Identifier(MOD_ID, "chickenburger"), Chickenburger, DishGroup.DISHES, 10, 1f);
registerDishWithItem(new Identifier(MOD_ID, "cheeseburger"), Cheeseburger, DishGroup.DISHES, 10, 1f);
Registry.register(Registry.ITEM, new Identifier("dishes","schnitzel"), new DishItem(Schnitzel, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","schnitzel"), Schnitzel);
Registry.register(Registry.ITEM, new Identifier("dishes","spaghetti_bolognese"), new DishItem(SpaghettiBolognese, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","spaghetti_bolognese"), SpaghettiBolognese);
Registry.register(Registry.ITEM, new Identifier("dishes","steak"), new DishItem(Steak, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","steak"), Steak);
Registry.register(Registry.ITEM, new Identifier("dishes","hamburger"), new DishItem(Hamburger, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","hamburger"), Hamburger);
Registry.register(Registry.ITEM, new Identifier("dishes","chickenburger"), new DishItem(Chickenburger, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","chickenburger"), Chickenburger);
Registry.register(Registry.ITEM, new Identifier("dishes","cheeseburger"), new DishItem(Cheeseburger, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","cheeseburger"), Cheeseburger);
if (FabricLoader.getInstance().isModLoaded("ad_astra"))
registerDishWithItem(new Identifier(MOD_ID, "spaceburger"), Spaceburger, DishGroup.DISHES, 10, 1f);
else
registerDishWithItem(new Identifier(MOD_ID, "spaceburger"), Spaceburger, DishGroup.NONE, 10, 1f);
if (FabricLoader.getInstance().isModLoaded("ad_astra"))
Registry.register(Registry.ITEM, new Identifier("dishes", "spaceburger"), new DishItem(Spaceburger, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
else
Registry.register(Registry.ITEM, new Identifier("dishes", "spaceburger"), new DishItem(Spaceburger, new Item.Settings().food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes", "spaceburger"), Spaceburger);
Registry.register(Registry.ITEM, new Identifier("dishes","fishandchips"), new DishItem(FishAndChips, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","fishandchips"), FishAndChips);
Registry.register(Registry.ITEM, new Identifier("dishes","borscht"), new DishItem(Borscht, new Item.Settings().group(DishesMain.DishesGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","borscht"), Borscht);
}
registerDishWithItem(new Identifier(MOD_ID, "potatoburger"), Potatoburger, DishGroup.DISHES, 10, 1f);
registerDishWithItem(new Identifier(MOD_ID, "beetrootburger"), Beetrootburger, DishGroup.DISHES, 10, 1f);
if (DishesConfig.enableMeatDishes) {
registerDishWithItem(new Identifier(MOD_ID, "fishandchips"), FishAndChips, DishGroup.DISHES, 10, 1f);
}
registerDishWithItem(new Identifier(MOD_ID,"borscht"), Borscht, DishGroup.DISHES, 10, 1f);
// Pizza //
Registry.register(Registry.ITEM, new Identifier("dishes","pizzabox"), new DishItem(PizzaBox, new Item.Settings().group(DishesMain.PizzaGroup)));
Registry.register(Registry.BLOCK, new Identifier("dishes","pizzabox"), PizzaBox);
Registry.register(Registry.ITEM, new Identifier("dishes","pizzamargherita"), new DishItem(PizzaMargherita, new Item.Settings().group(DishesMain.PizzaGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","pizzamargherita"), PizzaMargherita);
Registry.register(Registry.ITEM, new Identifier("dishes","pizzasalami"), new DishItem(PizzaSalami, new Item.Settings().group(DishesMain.PizzaGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","pizzasalami"), PizzaSalami);
Registry.register(Registry.ITEM, new Identifier("dishes","pizzaham"), new DishItem(PizzaHam, new Item.Settings().group(DishesMain.PizzaGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","pizzaham"), PizzaHam);
Registry.register(Registry.ITEM, new Identifier("dishes","pizzatuna"), new DishItem(PizzaTuna, new Item.Settings().group(DishesMain.PizzaGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","pizzatuna"), PizzaTuna);
Registry.register(Registry.ITEM, new Identifier("dishes","pizzabacon"), new DishItem(PizzaBacon, new Item.Settings().group(DishesMain.PizzaGroup).food(new FoodComponent.Builder().hunger(10).saturationModifier(1f).build())));
Registry.register(Registry.BLOCK, new Identifier("dishes","pizzabacon"), PizzaBacon);
registerBlockWithItem(new Identifier(MOD_ID,"pizzabox"), PizzaBox, DishGroup.PIZZA);
registerDishWithItem(new Identifier(MOD_ID,"pizzamargherita"), PizzaMargherita, DishGroup.PIZZA, 10, 1f);
registerDishWithItem(new Identifier(MOD_ID,"pizzafungi"), PizzaFungi, DishGroup.PIZZA, 10, 1f);
if (DishesConfig.enableMeatDishes) {
registerDishWithItem(new Identifier(MOD_ID, "pizzasalami"), PizzaSalami, DishGroup.PIZZA, 10, 1f);
registerDishWithItem(new Identifier(MOD_ID, "pizzaham"), PizzaHam, DishGroup.PIZZA, 10, 1f);
registerDishWithItem(new Identifier(MOD_ID, "pizzatuna"), PizzaTuna, DishGroup.PIZZA, 10, 1f);
registerDishWithItem(new Identifier(MOD_ID, "pizzabacon"), PizzaBacon, DishGroup.PIZZA, 10, 1f);
}
// Ice Cream //
Registry.register(Registry.ITEM, new Identifier("dishes","ice_cream_vanilla"), IceCreamVanilla);
Registry.register(Registry.ITEM, new Identifier("dishes","ice_cream_chocolate"), IceCreamChocolate);
Registry.register(Registry.ITEM, new Identifier("dishes","ice_cream_white_chocolate"), IceCreamWhiteChocolate);
Registry.register(Registry.ITEM, new Identifier("dishes","ice_cream_strawberry"), IceCreamStrawberry);
Registry.register(Registry.ITEM, new Identifier("dishes","ice_cream_banana"), IceCreamBanana);
Registry.register(Registry.ITEM, new Identifier("dishes","ice_cream_pear"), IceCreamPear);
Registry.register(Registry.ITEM, new Identifier("dishes","ice_cream_sweetberry"), IceCreamSweetberry);
Registry.register(Registry.ITEM, new Identifier("dishes","ice_cream_blueberry"), IceCreamBlueberry);
Registry.register(Registry.ITEM, new Identifier("dishes","ice_cream_bubblegum"), IceCreamBubblegum);
Registry.register(Registry.ITEM, new Identifier("dishes","ice_cream_glowberry"), IceCreamGlowberry);
registerItem(new Identifier(MOD_ID,"ice_cream_vanilla"), IceCreamVanilla, DishGroup.SWEETS);
registerItem(new Identifier(MOD_ID,"ice_cream_chocolate"), IceCreamChocolate, DishGroup.SWEETS);
registerItem(new Identifier(MOD_ID,"ice_cream_white_chocolate"), IceCreamWhiteChocolate, DishGroup.SWEETS);
registerItem(new Identifier(MOD_ID,"ice_cream_strawberry"), IceCreamStrawberry, DishGroup.SWEETS);
registerItem(new Identifier(MOD_ID,"ice_cream_banana"), IceCreamBanana, DishGroup.SWEETS);
registerItem(new Identifier(MOD_ID,"ice_cream_pear"), IceCreamPear, DishGroup.SWEETS);
registerItem(new Identifier(MOD_ID,"ice_cream_sweetberry"), IceCreamSweetberry, DishGroup.SWEETS);
registerItem(new Identifier(MOD_ID,"ice_cream_blueberry"), IceCreamBlueberry, DishGroup.SWEETS);
registerItem(new Identifier(MOD_ID,"ice_cream_bubblegum"), IceCreamBubblegum, DishGroup.SWEETS);
registerItem(new Identifier(MOD_ID,"ice_cream_glowberry"), IceCreamGlowberry, DishGroup.SWEETS);
Registry.register(Registry.ITEM, new Identifier("dishes","cooking_guide"), CookingGuide);
// Compat //
if (FabricLoader.getInstance().isModLoaded("patchouli")) {
if (FabricLoader.getInstance().isModLoaded("lavender")) {
Flags.init();
}
IceCreamTraderInit.init();
WorldGenInit.init();
MainGroup = FabricItemGroup.builder().displayName(Text.translatable("itemGroup.dishes.main")).icon(() -> new ItemStack(DishesMain.CheeseRoll)).entries(((displayContext, entries) -> entries.addAll((itemGroupMap.get(DishGroup.MAIN))))).build();
DishesGroup = FabricItemGroup.builder().displayName(Text.translatable("itemGroup.dishes.dishes")).icon(() -> new ItemStack(DishesMain.PotatoesWithCurdCheese)).entries(((displayContext, entries) -> entries.addAll((itemGroupMap.get(DishGroup.DISHES))))).build();
PizzaGroup = FabricItemGroup.builder().displayName(Text.translatable("itemGroup.dishes.pizza")).icon(() -> new ItemStack(DishesMain.PizzaSalami)).entries(((displayContext, entries) -> entries.addAll((itemGroupMap.get(DishGroup.PIZZA))))).build();
SweetsGroup = FabricItemGroup.builder().displayName(Text.translatable("itemGroup.dishes.sweets")).icon(() -> new ItemStack(DishesMain.IceCreamVanilla)).entries(((displayContext, entries) -> entries.addAll((itemGroupMap.get(DishGroup.SWEETS))))).build();
Registry.register(Registries.ITEM_GROUP, new Identifier(MOD_ID, "main"), MainGroup);
Registry.register(Registries.ITEM_GROUP, new Identifier(MOD_ID, "dishes"), DishesGroup);
Registry.register(Registries.ITEM_GROUP, new Identifier(MOD_ID, "pizza"), PizzaGroup);
Registry.register(Registries.ITEM_GROUP, new Identifier(MOD_ID, "sweets"), SweetsGroup);
CookingGuide = LavenderBookItem.registerForBook(new Identifier(MOD_ID, "cooking_guide"), new Item.Settings());
}
}

View File

@@ -1,8 +1,10 @@
package eu.midnightdust.motschen.dishes.block;
import com.mojang.serialization.MapCodec;
import eu.midnightdust.motschen.dishes.DishesMain;
import eu.midnightdust.motschen.dishes.blockstates.DishBites;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.renderer.v1.material.MaterialFinder;
import net.minecraft.block.*;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemPlacementContext;
@@ -25,7 +27,7 @@ public class Dish extends HorizontalFacingBlock {
private static final VoxelShape SHAPE;
public Dish() {
super(FabricBlockSettings.of(Material.STONE).nonOpaque().sounds(BlockSoundGroup.STONE));
super(FabricBlockSettings.copyOf(Blocks.STONE).nonOpaque().sounds(BlockSoundGroup.STONE));
this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH).with(DISH_BITES, 0));
}
@@ -48,7 +50,7 @@ public class Dish extends HorizontalFacingBlock {
@Override
public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) {
return super.getPlacementState(itemPlacementContext)
.with(FACING, itemPlacementContext.getPlayerFacing().getOpposite())
.with(FACING, itemPlacementContext.getHorizontalPlayerFacing().getOpposite())
.with(DISH_BITES, 0);
}
@@ -67,4 +69,8 @@ public class Dish extends HorizontalFacingBlock {
return !worldView.isAir(pos.down());
}
@Override
protected MapCodec<? extends HorizontalFacingBlock> getCodec() {
return null;
}
}

View File

@@ -1,5 +1,6 @@
package eu.midnightdust.motschen.dishes.block;
import com.mojang.serialization.MapCodec;
import eu.midnightdust.motschen.dishes.DishesMain;
import eu.midnightdust.motschen.dishes.blockstates.DishBites;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
@@ -25,7 +26,7 @@ public class Pizza extends HorizontalFacingBlock {
private static final VoxelShape SHAPE;
public Pizza() {
super(FabricBlockSettings.of(Material.STONE).nonOpaque().sounds(BlockSoundGroup.STONE));
super(FabricBlockSettings.copyOf(Blocks.STONE).nonOpaque().sounds(BlockSoundGroup.STONE));
this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH).with(DISH_BITES, 0));
}
@@ -48,7 +49,7 @@ public class Pizza extends HorizontalFacingBlock {
@Override
public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) {
return super.getPlacementState(itemPlacementContext)
.with(FACING, itemPlacementContext.getPlayerFacing().getOpposite())
.with(FACING, itemPlacementContext.getHorizontalPlayerFacing().getOpposite())
.with(DISH_BITES, 0);
}
@@ -70,4 +71,8 @@ public class Pizza extends HorizontalFacingBlock {
return !worldView.isAir(pos.down());
}
@Override
protected MapCodec<? extends HorizontalFacingBlock> getCodec() {
return null;
}
}

View File

@@ -1,5 +1,6 @@
package eu.midnightdust.motschen.dishes.block;
import com.mojang.serialization.MapCodec;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.*;
import net.minecraft.item.ItemPlacementContext;
@@ -15,14 +16,14 @@ public class Plate extends HorizontalFacingBlock {
private static final VoxelShape SHAPE;
public Plate() {
super(FabricBlockSettings.of(Material.STONE).nonOpaque().sounds(BlockSoundGroup.STONE));
super(FabricBlockSettings.copyOf(Blocks.STONE).nonOpaque().sounds(BlockSoundGroup.STONE));
this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH));
}
@Override
public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) {
return super.getPlacementState(itemPlacementContext)
.with(FACING, itemPlacementContext.getPlayerFacing().getOpposite());
.with(FACING, itemPlacementContext.getHorizontalPlayerFacing().getOpposite());
}
@Override
@@ -40,4 +41,8 @@ public class Plate extends HorizontalFacingBlock {
return !worldView.isAir(pos.down());
}
@Override
protected MapCodec<? extends HorizontalFacingBlock> getCodec() {
return null;
}
}

View File

@@ -1,5 +1,6 @@
package eu.midnightdust.motschen.dishes.block;
import com.mojang.serialization.MapCodec;
import eu.midnightdust.motschen.dishes.DishesMain;
import eu.midnightdust.motschen.dishes.blockstates.SoupSips;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
@@ -25,7 +26,7 @@ public class Soup extends HorizontalFacingBlock {
private static final VoxelShape SHAPE;
public Soup() {
super(FabricBlockSettings.of(Material.STONE).nonOpaque().sounds(BlockSoundGroup.STONE));
super(FabricBlockSettings.copyOf(Blocks.STONE).nonOpaque().sounds(BlockSoundGroup.STONE));
this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH).with(SOUP_SIPS, 0));
}
@@ -48,7 +49,7 @@ public class Soup extends HorizontalFacingBlock {
@Override
public BlockState getPlacementState(ItemPlacementContext itemPlacementContext) {
return super.getPlacementState(itemPlacementContext)
.with(FACING, itemPlacementContext.getPlayerFacing().getOpposite())
.with(FACING, itemPlacementContext.getHorizontalPlayerFacing().getOpposite())
.with(SOUP_SIPS, 0);
}
@@ -67,4 +68,8 @@ public class Soup extends HorizontalFacingBlock {
return !worldView.isAir(pos.down());
}
@Override
protected MapCodec<? extends HorizontalFacingBlock> getCodec() {
return null;
}
}

View File

@@ -3,10 +3,10 @@ package eu.midnightdust.motschen.dishes.compat;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries;
import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;
import net.minecraft.util.TypedActionResult;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.World;
import java.util.Optional;
@@ -18,7 +18,7 @@ public class CookingGuideItem extends Item {
public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand hand) {
ItemStack itemStack = user.getStackInHand(hand);
Optional<Item> item = Registry.ITEM.getOrEmpty(new Identifier("patchouli", "guide_book"));
Optional<Item> item = Registries.ITEM.getOrEmpty(new Identifier("patchouli", "guide_book"));
ItemStack stack = new ItemStack(item.get());
stack.getOrCreateNbt().putString("patchouli:book", "dishes:cooking_guide");

View File

@@ -1,8 +1,11 @@
package eu.midnightdust.motschen.dishes.compat;
import eu.midnightdust.motschen.dishes.utils.DishGroup;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import static eu.midnightdust.motschen.dishes.DishesMain.MOD_ID;
import static eu.midnightdust.motschen.dishes.utils.RegistryUtils.registerItem;
public class Flags {
public static Item FlagGermany = new Item(new Item.Settings());
@@ -10,11 +13,15 @@ public class Flags {
public static Item FlagUK = new Item(new Item.Settings());
public static Item FlagUkraine = new Item(new Item.Settings());
public static Item FlagUSA = new Item(new Item.Settings());
public static Item LabelVeggie = new Item(new Item.Settings());
public static Item LabelVegan = new Item(new Item.Settings());
public static void init() {
Registry.register(Registry.ITEM, new Identifier("dishes","flag_germany"), FlagGermany);
Registry.register(Registry.ITEM, new Identifier("dishes","flag_italy"), FlagItaly);
Registry.register(Registry.ITEM, new Identifier("dishes","flag_uk"), FlagUK);
Registry.register(Registry.ITEM, new Identifier("dishes","flag_ukraine"), FlagUkraine);
Registry.register(Registry.ITEM, new Identifier("dishes","flag_usa"), FlagUSA);
registerItem(new Identifier(MOD_ID,"flag_germany"), FlagGermany, DishGroup.NONE);
registerItem(new Identifier(MOD_ID,"flag_italy"), FlagItaly, DishGroup.NONE);
registerItem(new Identifier(MOD_ID,"flag_uk"), FlagUK, DishGroup.NONE);
registerItem(new Identifier(MOD_ID,"flag_ukraine"), FlagUkraine, DishGroup.NONE);
registerItem(new Identifier(MOD_ID,"flag_usa"), FlagUSA, DishGroup.NONE);
registerItem(new Identifier(MOD_ID,"label_veggie"), LabelVeggie, DishGroup.NONE);
registerItem(new Identifier(MOD_ID,"label_vegan"), LabelVegan, DishGroup.NONE);
}
}

View File

@@ -3,9 +3,11 @@ package eu.midnightdust.motschen.dishes.config;
import eu.midnightdust.lib.config.MidnightConfig;
public class DishesConfig extends MidnightConfig {
@Entry public static boolean spawnTrader = true;
@Entry public static boolean tomatoes = true;
@Entry public static boolean lettuce = true;
@Entry public static boolean saltOre = true;
@Entry public static boolean customLoot = true;
public static final String FEATURES = "features";
@Entry(category = FEATURES) public static boolean spawnTrader = true;
@Entry(category = FEATURES) public static boolean tomatoes = true;
@Entry(category = FEATURES) public static boolean lettuce = true;
@Entry(category = FEATURES) public static boolean saltOre = true;
@Entry(category = FEATURES) public static boolean customLoot = true;
@Entry(category = FEATURES) public static boolean enableMeatDishes = true;
}

View File

@@ -5,9 +5,9 @@ import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.SpawnRestriction;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.registry.RegistryEntry;
import net.minecraft.world.*;
import net.minecraft.world.level.ServerWorldProperties;
import net.minecraft.world.poi.PointOfInterestStorage;
@@ -37,7 +37,7 @@ public class IceCreamTraderSpawn {
BlockPos blockPos2 = optional.orElse(blockPos);
BlockPos blockPos3 = getLlamaSpawnPosition(serverWorld, blockPos2, 48);
if (blockPos3 != null && wontSuffocateAt(serverWorld, blockPos3)) {
IceCreamTraderEntity traderEntity = IceCreamTraderInit.ICE_CREAM_TRADER.spawn(serverWorld, null,null,null, blockPos3, SpawnReason.EVENT, false, false);
IceCreamTraderEntity traderEntity = IceCreamTraderInit.ICE_CREAM_TRADER.spawn(serverWorld, blockPos3, SpawnReason.EVENT);
if (traderEntity != null) {
serverWorldProperties.setWanderingTraderId(traderEntity.getUuid());
traderEntity.setDespawnDelay(32000);

View File

@@ -1,7 +1,7 @@
package eu.midnightdust.motschen.dishes.init;
import eu.midnightdust.motschen.dishes.DishesMain;
import eu.midnightdust.motschen.dishes.entities.IceCreamTraderEntity;
import eu.midnightdust.motschen.dishes.utils.DishGroup;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
import net.minecraft.entity.EntityDimensions;
@@ -10,17 +10,20 @@ import net.minecraft.entity.SpawnGroup;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.mob.MobEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.SpawnEggItem;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import static eu.midnightdust.motschen.dishes.DishesMain.MOD_ID;
import static eu.midnightdust.motschen.dishes.utils.RegistryUtils.registerItem;
public class IceCreamTraderInit {
public static final EntityType<IceCreamTraderEntity> ICE_CREAM_TRADER =
Registry.register(Registry.ENTITY_TYPE,new Identifier(DishesMain.MOD_ID,"ice_cream_trader"), FabricEntityTypeBuilder.create(SpawnGroup.CREATURE, IceCreamTraderEntity::new).dimensions(EntityDimensions.fixed(1f,2f)).trackRangeBlocks(100).trackedUpdateRate(4).build());
Registry.register(Registries.ENTITY_TYPE,new Identifier(MOD_ID,"ice_cream_trader"), FabricEntityTypeBuilder.create(SpawnGroup.CREATURE, IceCreamTraderEntity::new).dimensions(EntityDimensions.fixed(1f,2f)).trackRangeBlocks(100).trackedUpdateRate(4).build());
public static void init() {
Registry.register(Registry.ITEM, new Identifier(DishesMain.MOD_ID,"ice_cream_trader_spawn_egg"), new SpawnEggItem(ICE_CREAM_TRADER,5349438,15377456, new Item.Settings().group(ItemGroup.MISC)));
registerItem(new Identifier(MOD_ID,"ice_cream_trader_spawn_egg"), new SpawnEggItem(ICE_CREAM_TRADER,5349438,15377456, new Item.Settings()), DishGroup.MAIN);
FabricDefaultAttributeRegistry.register(ICE_CREAM_TRADER, MobEntity.createMobAttributes().add(EntityAttributes.GENERIC_MAX_HEALTH, 20.0D));
}
}

View File

@@ -1,20 +1,25 @@
package eu.midnightdust.motschen.dishes.init;
import eu.midnightdust.motschen.dishes.block.Lettuce;
import eu.midnightdust.motschen.dishes.utils.DishGroup;
import net.minecraft.block.Block;
import net.minecraft.item.AliasedBlockItem;
import net.minecraft.item.FoodComponent;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import static eu.midnightdust.motschen.dishes.DishesMain.MOD_ID;
import static eu.midnightdust.motschen.dishes.utils.RegistryUtils.registerItem;
public class LettuceInit {
public static final Item Lettuce = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(1).saturationModifier(0.75f).snack().build()));
public static final Block LettuceBush = new Lettuce();
public static void init() {
Registry.register(Registry.ITEM, new Identifier("dishes","lettuceseed"), new AliasedBlockItem(LettuceBush, new Item.Settings()));
Registry.register(Registry.ITEM, new Identifier("dishes","lettuce"), Lettuce);
Registry.register(Registry.BLOCK, new Identifier("dishes","lettucebush"), LettuceBush);
registerItem(new Identifier(MOD_ID,"lettuceseed"), new AliasedBlockItem(LettuceBush, new Item.Settings()), DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"lettuce"), Lettuce, DishGroup.MAIN);
Registry.register(Registries.BLOCK, new Identifier(MOD_ID,"lettucebush"), LettuceBush);
}
}

View File

@@ -1,20 +1,25 @@
package eu.midnightdust.motschen.dishes.init;
import eu.midnightdust.motschen.dishes.block.Tomato;
import eu.midnightdust.motschen.dishes.utils.DishGroup;
import net.minecraft.block.Block;
import net.minecraft.item.AliasedBlockItem;
import net.minecraft.item.FoodComponent;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import static eu.midnightdust.motschen.dishes.DishesMain.MOD_ID;
import static eu.midnightdust.motschen.dishes.utils.RegistryUtils.registerItem;
public class TomatoInit {
public static final Item Tomato = new Item(new Item.Settings().food(new FoodComponent.Builder().hunger(2).saturationModifier(1f).snack().build()));
public static final Block TomatoBush = new Tomato();
public static void init() {
Registry.register(Registry.ITEM, new Identifier("dishes","tomatoseed"), new AliasedBlockItem(TomatoBush, new Item.Settings()));
Registry.register(Registry.ITEM, new Identifier("dishes","tomato"), Tomato);
Registry.register(Registry.BLOCK, new Identifier("dishes","tomatobush"), TomatoBush);
registerItem(new Identifier(MOD_ID,"tomatoseed"), new AliasedBlockItem(TomatoBush, new Item.Settings()), DishGroup.MAIN);
registerItem(new Identifier(MOD_ID,"tomato"), Tomato, DishGroup.MAIN);
Registry.register(Registries.BLOCK, new Identifier(MOD_ID,"tomatobush"), TomatoBush);
}
}

View File

@@ -0,0 +1,5 @@
package eu.midnightdust.motschen.dishes.utils;
public enum DishGroup {
NONE, MAIN, DISHES, PIZZA, SWEETS;
}

View File

@@ -0,0 +1,36 @@
package eu.midnightdust.motschen.dishes.utils;
import eu.midnightdust.motschen.dishes.DishesMain;
import eu.midnightdust.motschen.dishes.item.DishItem;
import net.minecraft.block.Block;
import net.minecraft.item.*;
import net.minecraft.registry.*;
import net.minecraft.util.Identifier;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.PlacedFeature;
import org.apache.commons.compress.utils.Lists;
import java.util.List;
public class RegistryUtils {
public static void registerBlockWithItem(Identifier id, Block block, DishGroup group) {
Registry.register(Registries.BLOCK, id, block);
registerItem(id, new BlockItem(block, new Item.Settings()), group);
}
public static void registerDishWithItem(Identifier id, Block block, DishGroup group, int hunger, float saturation) {
Registry.register(Registries.BLOCK, id, block);
registerItem(id, new DishItem(block, new Item.Settings().food(new FoodComponent.Builder().hunger(hunger).saturationModifier(saturation).build())), group);
}
public static void registerItem(Identifier id, Item item, DishGroup group) {
Registry.register(Registries.ITEM, id, item);
List<ItemStack> groupItems = DishesMain.itemGroupMap.containsKey(group) ? DishesMain.itemGroupMap.get(group) : Lists.newArrayList();
groupItems.add(new ItemStack(item));
DishesMain.itemGroupMap.put(group, groupItems);
}
public static void register(Registerable<ConfiguredFeature<?, ?>> context, String name, ConfiguredFeature<?, ?> feature) {
context.register(RegistryKey.of(RegistryKeys.CONFIGURED_FEATURE, new Identifier(DishesMain.MOD_ID, name)), feature);
}
public static void register(Registerable<PlacedFeature> context, String name, PlacedFeature feature) {
context.register(RegistryKey.of(RegistryKeys.PLACED_FEATURE, new Identifier(DishesMain.MOD_ID, name)), feature);
}
}

View File

@@ -1,35 +1,33 @@
package eu.midnightdust.motschen.dishes.world;
import eu.midnightdust.motschen.dishes.DishesMain;
import eu.midnightdust.motschen.dishes.utils.RegistryUtils;
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import net.minecraft.tag.BiomeTags;
import net.minecraft.registry.*;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.registry.tag.BiomeTags;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.structure.rule.TagMatchRuleTest;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.BuiltinRegistries;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryEntry;
import net.minecraft.world.gen.GenerationStep;
import net.minecraft.world.gen.YOffset;
import net.minecraft.world.gen.feature.*;
import net.minecraft.world.gen.placementmodifier.CountPlacementModifier;
import net.minecraft.world.gen.placementmodifier.HeightRangePlacementModifier;
import net.minecraft.world.gen.placementmodifier.SquarePlacementModifier;
import net.minecraft.world.gen.placementmodifier.*;
import java.util.List;
public class OreFeatures {
private static final ConfiguredFeature<?, ?> SALT_ORE_FEATURE = new ConfiguredFeature<>(Feature.ORE, new OreFeatureConfig(
OreConfiguredFeatures.STONE_ORE_REPLACEABLES, DishesMain.SaltOre.getDefaultState(),4));
public static PlacedFeature SALT_ORE_PLACED_FEATURE = new PlacedFeature(
RegistryEntry.of(SALT_ORE_FEATURE),
List.of(
CountPlacementModifier.of(20),
SquarePlacementModifier.of(),
HeightRangePlacementModifier.uniform(YOffset.BOTTOM, YOffset.fixed(120))
));
public static ConfiguredFeature<?, ?> SALT_ORE_FEATURE = new ConfiguredFeature<>(Feature.ORE, new OreFeatureConfig(new TagMatchRuleTest(BlockTags.STONE_ORE_REPLACEABLES), DishesMain.SaltOre.getDefaultState(), 9));
public static PlacedFeature SALT_ORE_PLACED_FEATURE = new PlacedFeature(RegistryEntry.of(SALT_ORE_FEATURE), List.of(CountPlacementModifier.of(20), SquarePlacementModifier.of(), HeightRangePlacementModifier.uniform(YOffset.BOTTOM, YOffset.fixed(120)), BiomePlacementModifier.of()));
public static void initConfigured(Registerable<ConfiguredFeature<?, ?>> context) {
RegistryUtils.register(context, "salt_ore", SALT_ORE_FEATURE);
}
public static void initPlaced(Registerable<PlacedFeature> context) {
RegistryUtils.register(context, "salt_ore", SALT_ORE_PLACED_FEATURE);
}
public static void init() {
Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, new Identifier(DishesMain.MOD_ID, "salt_ore"), SALT_ORE_FEATURE);
Registry.register(BuiltinRegistries.PLACED_FEATURE, new Identifier(DishesMain.MOD_ID, "placed_salt_ore"), SALT_ORE_PLACED_FEATURE);
BiomeModifications.addFeature(biome -> (!biome.hasTag(BiomeTags.IS_NETHER) && !biome.hasTag(BiomeTags.END_CITY_HAS_STRUCTURE)),
GenerationStep.Feature.UNDERGROUND_ORES, BuiltinRegistries.PLACED_FEATURE.getKey(OreFeatures.SALT_ORE_PLACED_FEATURE).get());
GenerationStep.Feature.UNDERGROUND_ORES, RegistryKey.of(RegistryKeys.PLACED_FEATURE, new Identifier(DishesMain.MOD_ID, "salt_ore")));
}
}

View File

@@ -0,0 +1,24 @@
{
"variants": {
"facing=north,bites=0": { "model": "dishes:block/beetrootburger" },
"facing=east,bites=0": { "model": "dishes:block/beetrootburger", "y": 90 },
"facing=south,bites=0": { "model": "dishes:block/beetrootburger", "y": 180 },
"facing=west,bites=0": { "model": "dishes:block/beetrootburger", "y": 270 },
"facing=north,bites=1": { "model": "dishes:block/beetrootburger1" },
"facing=east,bites=1": { "model": "dishes:block/beetrootburger1", "y": 90 },
"facing=south,bites=1": { "model": "dishes:block/beetrootburger1", "y": 180 },
"facing=west,bites=1": { "model": "dishes:block/beetrootburger1", "y": 270 },
"facing=north,bites=2": { "model": "dishes:block/beetrootburger2" },
"facing=east,bites=2": { "model": "dishes:block/beetrootburger2", "y": 90 },
"facing=south,bites=2": { "model": "dishes:block/beetrootburger2", "y": 180 },
"facing=west,bites=2": { "model": "dishes:block/beetrootburger2", "y": 270 },
"facing=north,bites=3": { "model": "dishes:block/beetrootburger3" },
"facing=east,bites=3": { "model": "dishes:block/beetrootburger3", "y": 90 },
"facing=south,bites=3": { "model": "dishes:block/beetrootburger3", "y": 180 },
"facing=west,bites=3": { "model": "dishes:block/beetrootburger3", "y": 270 },
"facing=north,bites=4": { "model": "dishes:block/beetrootburger4" },
"facing=east,bites=4": { "model": "dishes:block/beetrootburger4", "y": 90 },
"facing=south,bites=4": { "model": "dishes:block/beetrootburger4", "y": 180 },
"facing=west,bites=4": { "model": "dishes:block/beetrootburger4", "y": 270 }
}
}

View File

@@ -0,0 +1,24 @@
{
"variants": {
"facing=north,bites=0": { "model": "dishes:block/pizzafungi" },
"facing=east,bites=0": { "model": "dishes:block/pizzafungi", "y": 90 },
"facing=south,bites=0": { "model": "dishes:block/pizzafungi", "y": 180 },
"facing=west,bites=0": { "model": "dishes:block/pizzafungi", "y": 270 },
"facing=north,bites=1": { "model": "dishes:block/pizzafungi1" },
"facing=east,bites=1": { "model": "dishes:block/pizzafungi1", "y": 90 },
"facing=south,bites=1": { "model": "dishes:block/pizzafungi1", "y": 180 },
"facing=west,bites=1": { "model": "dishes:block/pizzafungi1", "y": 270 },
"facing=north,bites=2": { "model": "dishes:block/pizzafungi2" },
"facing=east,bites=2": { "model": "dishes:block/pizzafungi2", "y": 90 },
"facing=south,bites=2": { "model": "dishes:block/pizzafungi2", "y": 180 },
"facing=west,bites=2": { "model": "dishes:block/pizzafungi2", "y": 270 },
"facing=north,bites=3": { "model": "dishes:block/pizzafungi3" },
"facing=east,bites=3": { "model": "dishes:block/pizzafungi3", "y": 90 },
"facing=south,bites=3": { "model": "dishes:block/pizzafungi3", "y": 180 },
"facing=west,bites=3": { "model": "dishes:block/pizzafungi3", "y": 270 },
"facing=north,bites=4": { "model": "dishes:block/pizzafungi4" },
"facing=east,bites=4": { "model": "dishes:block/pizzafungi4", "y": 90 },
"facing=south,bites=4": { "model": "dishes:block/pizzafungi4", "y": 180 },
"facing=west,bites=4": { "model": "dishes:block/pizzafungi4", "y": 270 }
}
}

View File

@@ -0,0 +1,24 @@
{
"variants": {
"facing=north,bites=0": { "model": "dishes:block/potatoburger" },
"facing=east,bites=0": { "model": "dishes:block/potatoburger", "y": 90 },
"facing=south,bites=0": { "model": "dishes:block/potatoburger", "y": 180 },
"facing=west,bites=0": { "model": "dishes:block/potatoburger", "y": 270 },
"facing=north,bites=1": { "model": "dishes:block/potatoburger1" },
"facing=east,bites=1": { "model": "dishes:block/potatoburger1", "y": 90 },
"facing=south,bites=1": { "model": "dishes:block/potatoburger1", "y": 180 },
"facing=west,bites=1": { "model": "dishes:block/potatoburger1", "y": 270 },
"facing=north,bites=2": { "model": "dishes:block/potatoburger2" },
"facing=east,bites=2": { "model": "dishes:block/potatoburger2", "y": 90 },
"facing=south,bites=2": { "model": "dishes:block/potatoburger2", "y": 180 },
"facing=west,bites=2": { "model": "dishes:block/potatoburger2", "y": 270 },
"facing=north,bites=3": { "model": "dishes:block/potatoburger3" },
"facing=east,bites=3": { "model": "dishes:block/potatoburger3", "y": 90 },
"facing=south,bites=3": { "model": "dishes:block/potatoburger3", "y": 180 },
"facing=west,bites=3": { "model": "dishes:block/potatoburger3", "y": 270 },
"facing=north,bites=4": { "model": "dishes:block/potatoburger4" },
"facing=east,bites=4": { "model": "dishes:block/potatoburger4", "y": 90 },
"facing=south,bites=4": { "model": "dishes:block/potatoburger4", "y": 180 },
"facing=west,bites=4": { "model": "dishes:block/potatoburger4", "y": 270 }
}
}

View File

@@ -28,14 +28,16 @@
"block.dishes.plate":"Plate",
"block.dishes.bowl":"Bowl",
"block.dishes.pizzabox":"Empty Pizzabox",
"block.dishes.potatoeswithcurdcheese":"Potatoes with Curd Cheese",
"block.dishes.tinypotatoeswithcurdcheese":"Tiny Potatoes with Curd Cheese",
"block.dishes.potatoeswithcurdcheese":"Potatoes with Curd",
"block.dishes.tinypotatoeswithcurdcheese":"Tiny Potatoes with Curd",
"block.dishes.schnitzel":"Schnitzel",
"block.dishes.pizzamargherita":"Pizza Margherita",
"block.dishes.pizzasalami":"Pizza Salami",
"block.dishes.pizzaham":"Pizza Ham",
"block.dishes.pizzatuna":"Pizza Tuna",
"block.dishes.pizzabacon":"Pizza Bacon",
"block.dishes.pizzafungi":"Pizza Fungi",
"block.dishes.pizzafungi.tooltip":"§aVegetarian",
"block.dishes.spaghetti_bolognese":"Spaghetti Bolognese",
"block.dishes.steak":"Steak",
"block.dishes.hamburger":"Hamburger",
@@ -43,6 +45,10 @@
"block.dishes.cheeseburger":"Cheeseburger",
"block.dishes.spaceburger":"Spaceburger",
"block.dishes.spaceburger.tooltip":"§bTastes... suspicious.",
"block.dishes.potatoburger":"Potatoburger",
"block.dishes.potatoburger.tooltip":"§7Vegan",
"block.dishes.beetrootburger":"Beetrootburger",
"block.dishes.beetrootburger.tooltip":"§6Vegan.",
"block.dishes.fishandchips":"Fish and Chips",
"block.dishes.borscht":"Borscht",

View File

@@ -0,0 +1,4 @@
{
"texture": "lavender:textures/gui/brown_book.png",
"display_completion": true
}

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:flag_usa",
"title": "American Dishes"
}
```
Food from the USA

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:flag_uk",
"title": "British Dishes"
}
```
Food from the United Kingdom

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:plate",
"title": "General"
}
```
Ingredients and plates for the dishes

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:flag_germany",
"title": "German Dishes"
}
```
Food from Germany

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:flag_italy",
"title": "Italian Dishes"
}
```
Food from Italy

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:ice_cream_vanilla",
"title": "Sweets"
}
```
Sweets and Cake

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:flag_ukraine",
"title": "Ukrainian Dishes"
}
```
Food from Ukraine

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:label_vegan",
"title": "Vegan Dishes"
}
```
Tasty food without any cruelty involved!

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:label_veggie",
"title": "Vegetarian Dishes"
}
```
Great dishes without any meat!

View File

@@ -0,0 +1,5 @@
{
"texture": "patchouli:textures/gui/book_gray.png",
"dynamic_book_model": "patchouli:book_gray",
"display_completion": true
}

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:flag_usa",
"title": "Amerikanische Gerichte"
}
```
Essen aus den USA

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:flag_uk",
"title": "Britische Gerichte"
}
```
Essen aus dem Vereinigten Königreich

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:plate",
"title": "Generell"
}
```
Zutaten und Untersetzer für Gerichte

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:flag_germany",
"title": "Deutsche Gerichte"
}
```
Essen aus Deutschland

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:flag_italy",
"title": "Italienische Gerichte"
}
```
Essen aus Italien

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:ice_cream_vanilla",
"title": "Süßes"
}
```
Süßigkeiten und Kuchen

View File

@@ -0,0 +1,8 @@
```json
{
"icon": "dishes:flag_ukraine",
"title": "Ukrainische Gerichte"
}
```
Essen aus der Ukraine

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:bacon",
"title": "Speck",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:bacon|>
<|page-title@lavender:book_components|title=Speck|>
Speck kann man für die Herstellung von Pizza Bacon verwenden.
;;;;;
<recipe;dishes:bacon_smelting>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:borscht",
"title": "Borschtsch",
"category": "dishes:ukrainian"
}
```
<|item-spotlight@lavender:book_components|item=dishes:borscht|>
<|page-title@lavender:book_components|title=Borschtsch|>
Traditionelle ukrainische Rote-Beete-Suppe, die meist mit Sour Cream serviert wird.
;;;;;
<recipe;dishes:borscht>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:bowl",
"title": "Schüssel",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:bowl|>
<|page-title@lavender:book_components|title=Schüssel|>
Eine Schüssel.
;;;;;
<recipe;dishes:bowl>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:cheese_roll",
"title": "Käserolle",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:cheese_roll|>
<|page-title@lavender:book_components|title=Käserolle|>
Eine rohes Stück Käse
;;;;;
<recipe;dishes:cheese_roll>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:cheese_slice",
"title": "Käsescheibe",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:cheese_slice|>
<|page-title@lavender:book_components|title=Käsescheibe|>
Eine Scheibe Käse, aus einer Käserolle geschnitten
;;;;;
<recipe;dishes:cheese_slice>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:cheeseburger",
"title": "Cheeseburger",
"category": "dishes:american"
}
```
<|item-spotlight@lavender:book_components|item=dishes:cheeseburger|>
<|page-title@lavender:book_components|title=Cheeseburger|>
Ein Hamburger mit Käse.
;;;;;
<recipe;dishes:cheeseburger>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:chickenburger",
"title": "Chickenburger",
"category": "dishes:american"
}
```
<|item-spotlight@lavender:book_components|item=dishes:chickenburger|>
<|page-title@lavender:book_components|title=Chickenburger|>
Ein Hamburger, bloß mit Hühnchen statt Rindfleisch.
;;;;;
<recipe;dishes:chickenburger>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:fishandchips",
"title": "Fish and Chips",
"category": "dishes:british"
}
```
<|item-spotlight@lavender:book_components|item=dishes:fishandchips|>
<|page-title@lavender:book_components|title=Fish and Chips|>
Briten lieben dieses Gericht!
;;;;;
<recipe;dishes:fishandchips>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:flour",
"title": "Mehl",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:flour|>
<|page-title@lavender:book_components|title=Mehl|>
Mehl kann zur herstellung von Teigwaren und Pizza verwendet werden.
;;;;;
<recipe;dishes:flour>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:fries",
"title": "Pommes",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:fries|>
<|page-title@lavender:book_components|title=Pommes|>
Gekochte Kartoffelscheiben mit Salz.
;;;;;
<recipe;dishes:fries_smelting>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:hamburger",
"title": "Hamburger",
"category": "dishes:american"
}
```
<|item-spotlight@lavender:book_components|item=dishes:hamburger|>
<|page-title@lavender:book_components|title=Hamburger|>
Ein klassischer Hamburger
;;;;;
<recipe;dishes:hamburger>

View File

@@ -0,0 +1,11 @@
```json
{
"icon": "dishes:ice_cream_banana",
"title": "Bananeneis",
"category": "dishes:sweets"
}
```
<|item-spotlight@lavender:book_components|item=dishes:ice_cream_banana|>
<|page-title@lavender:book_components|title=Bananeneis|>
Wer mag Eiscreme bitte nicht? Erhältlich beim Eiscreme-Händler.

View File

@@ -0,0 +1,11 @@
```json
{
"icon": "dishes:ice_cream_blueberry",
"title": "Blaubeereis",
"category": "dishes:sweets"
}
```
<|item-spotlight@lavender:book_components|item=dishes:ice_cream_blueberry|>
<|page-title@lavender:book_components|title=Blaubeereis|>
Wer mag Eiscreme bitte nicht? Erhältlich beim Eiscreme-Händler.

View File

@@ -0,0 +1,11 @@
```json
{
"icon": "dishes:ice_cream_bubblegum",
"title": "Kaugummieis",
"category": "dishes:sweets"
}
```
<|item-spotlight@lavender:book_components|item=dishes:ice_cream_bubblegum|>
<|page-title@lavender:book_components|title=Kaugummieis|>
Wer mag Eiscreme bitte nicht? Erhältlich beim Eiscreme-Händler.

View File

@@ -0,0 +1,11 @@
```json
{
"icon": "dishes:ice_cream_chocolate",
"title": "Schokoeis",
"category": "dishes:sweets"
}
```
<|item-spotlight@lavender:book_components|item=dishes:ice_cream_chocolate|>
<|page-title@lavender:book_components|title=Schokoeis|>
Wer mag Eiscreme bitte nicht? Erhältlich beim Eiscreme-Händler.

View File

@@ -0,0 +1,11 @@
```json
{
"icon": "dishes:ice_cream_sweetberry",
"title": "Süßbeereis",
"category": "dishes:sweets"
}
```
<|item-spotlight@lavender:book_components|item=dishes:ice_cream_sweetberry|>
<|page-title@lavender:book_components|title=Süßbeereis|>
Wer mag Eiscreme bitte nicht? Erhältlich beim Eiscreme-Händler.

View File

@@ -0,0 +1,11 @@
```json
{
"icon": "dishes:ice_cream_pear",
"title": "Birneneis",
"category": "dishes:sweets"
}
```
<|item-spotlight@lavender:book_components|item=dishes:ice_cream_pear|>
<|page-title@lavender:book_components|title=Birneneis|>
Wer mag Eiscreme bitte nicht? Erhältlich beim Eiscreme-Händler.

View File

@@ -0,0 +1,11 @@
```json
{
"icon": "dishes:ice_cream_strawberry",
"title": "Erdbeereis",
"category": "dishes:sweets"
}
```
<|item-spotlight@lavender:book_components|item=dishes:ice_cream_strawberry|>
<|page-title@lavender:book_components|title=Erdbeereis|>
Wer mag Eiscreme bitte nicht? Erhältlich beim Eiscreme-Händler.

View File

@@ -0,0 +1,11 @@
```json
{
"icon": "dishes:ice_cream_glowberry",
"title": "Leuchtbeereis",
"category": "dishes:sweets"
}
```
<|item-spotlight@lavender:book_components|item=dishes:ice_cream_glowberry|>
<|page-title@lavender:book_components|title=Leuchtbeereis|>
Wer mag Eiscreme bitte nicht? Erhältlich beim Eiscreme-Händler.

View File

@@ -0,0 +1,11 @@
```json
{
"icon": "dishes:ice_cream_vanilla",
"title": "Vanilleeis",
"category": "dishes:sweets"
}
```
<|item-spotlight@lavender:book_components|item=dishes:ice_cream_vanilla|>
<|page-title@lavender:book_components|title=Vanilleeis|>
Wer mag Eiscreme bitte nicht? Erhältlich beim Eiscreme-Händler.

View File

@@ -0,0 +1,11 @@
```json
{
"icon": "dishes:ice_cream_white_chocolate",
"title": "Weißes Schokoeis",
"category": "dishes:sweets"
}
```
<|item-spotlight@lavender:book_components|item=dishes:ice_cream_white_chocolate|>
<|page-title@lavender:book_components|title=Weißes Schokoeis|>
Wer mag Eiscreme bitte nicht? Erhältlich beim Eiscreme-Händler.

View File

@@ -0,0 +1,22 @@
```json
{
"icon": "dishes:knife",
"title": "Messer",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:knife|>
<|page-title@lavender:book_components|title=Messer|>
Erlaubt es dir, Essen in kleinere Stücke zu schneiden.
;;;;;
<recipe;dishes:knife>
;;;;;
<recipe;dishes:potato_slice>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:lettuce",
"title": "Salat",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:lettuce|>
<|page-title@lavender:book_components|title=Salat|>
Salat wird zur Herstellung von vielen Gerichten verwendet. Du kannst ihn in Dörfern finden.
;;;;;
<recipe;dishes:lettuceseed>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:lettuceseed",
"title": "Salatsamen",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:lettuceseed|>
<|page-title@lavender:book_components|title=Salatsamen|>
Mit Salatsamen kannst du eine Salatfarm anlegen.
;;;;;
<recipe;dishes:lettuceseed>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:pizzabacon",
"title": "Pizza Bacon",
"category": "dishes:italian"
}
```
<|item-spotlight@lavender:book_components|item=dishes:pizzabacon|>
<|page-title@lavender:book_components|title=Pizza Bacon|>
Eine Pizza mit Bacon.
;;;;;
<recipe;dishes:pizzabacon>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:pizzabox",
"title": "Pizzabox",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:pizzabox|>
<|page-title@lavender:book_components|title=Pizzabox|>
An empty pizzabox :(
;;;;;
<recipe;dishes:pizzabox>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:pizzaham",
"title": "Pizza Schinken",
"category": "dishes:italian"
}
```
<|item-spotlight@lavender:book_components|item=dishes:pizzaham|>
<|page-title@lavender:book_components|title=Pizza Schinken|>
Eine Pizza mit Schinken, yummy!
;;;;;
<recipe;dishes:pizzaham>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:pizzamargherita",
"title": "Pizza Margherita",
"category": "dishes:italian"
}
```
<|item-spotlight@lavender:book_components|item=dishes:pizzamargherita|>
<|page-title@lavender:book_components|title=Pizza Margherita|>
Benannt nach Margherita von Savoy (Königin Italiens von 1878 bis 1900)
;;;;;
<recipe;dishes:pizzamargherita>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:pizzasalami",
"title": "Pizza Salami",
"category": "dishes:italian"
}
```
<|item-spotlight@lavender:book_components|item=dishes:pizzasalami|>
<|page-title@lavender:book_components|title=Pizza Salami|>
Die klassische Pizza.
;;;;;
<recipe;dishes:pizzasalami>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:pizzatuna",
"title": "Pizza Tuhnfisch",
"category": "dishes:italian"
}
```
<|item-spotlight@lavender:book_components|item=dishes:pizzatuna|>
<|page-title@lavender:book_components|title=Pizza Tuhnfisch|>
Eine Pizza mit Tuhnfisch lol
;;;;;
<recipe;dishes:pizzatuna>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:plate",
"title": "Teller",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:plate|>
<|page-title@lavender:book_components|title=Teller|>
Ein Teller.
;;;;;
<recipe;dishes:plate>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:potato_slice",
"title": "Kartoffelscheibe",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:potato_slice|>
<|page-title@lavender:book_components|title=Kartoffelscheibe|>
Ein Stück einer Kartoffel.
;;;;;
<recipe;dishes:potato_slice>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:potatoeswithcurdcheese",
"title": "Kartoffeln mit Quark",
"category": "dishes:german"
}
```
<|item-spotlight@lavender:book_components|item=dishes:potatoeswithcurdcheese|>
<|page-title@lavender:book_components|title=Kartoffeln mit Quark|>
Sehr leckeres deutsches Essen.
;;;;;
<recipe;dishes:potatoeswithcurdcheese>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:raw_bacon",
"title": "Roher Speck",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:raw_bacon|>
<|page-title@lavender:book_components|title=Roher Speck|>
Rohen Speck kann man kochen, worauf Speck entsteht.
;;;;;
<recipe;dishes:raw_bacon>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:raw_fries",
"title": "Rohe Pommes",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:raw_fries|>
<|page-title@lavender:book_components|title=Rohe Pommes|>
Ein Kartoffelstück mit Salz. Man kann daraus im Ofen Pommes herstellen.
;;;;;
<recipe;dishes:raw_fries>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:raw_spaghetti",
"title": "Rohe Spaghetti",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:raw_spaghetti|>
<|page-title@lavender:book_components|title=Rohe Spaghetti|>
Rohe Variante der Spaghetti.
;;;;;
<recipe;dishes:raw_spaghetti>

View File

@@ -0,0 +1,22 @@
```json
{
"icon": "dishes:salami",
"title": "Salami",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:salami|>
<|page-title@lavender:book_components|title=Salami|>
Salami ist eine Art Wurst, die auch als Salzwurst bezeichnet wird. Man kann sie aus Schweine- und Rindfleisch herstellen.
;;;;;
<recipe;dishes:salami_pig>
;;;;;
<recipe;dishes:salami_cow>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:salt",
"title": "Salz",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:salt|>
<|page-title@lavender:book_components|title=Sals|>
Mit Salz kann viele Gerichte herstellen.
;;;;;
<recipe;dishes:salt_smelting>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:salt_ore",
"title": "Salzerz",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:salt_ore|>
<|page-title@lavender:book_components|title=Salzerz|>
Die Quelle von Salz.
;;;;;
<recipe;dishes:salt_smelting>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:schnitzel",
"title": "Schnitzel",
"category": "dishes:german"
}
```
<|item-spotlight@lavender:book_components|item=dishes:schnitzel|>
<|page-title@lavender:book_components|title=Schnitzel|>
Lecker, lecker...
;;;;;
<recipe;dishes:schnitzel>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:salt",
"title": "Spaghetti",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:spaghetti|>
<|page-title@lavender:book_components|title=Spaghetti|>
Spaghetti sind Nudeln und können zur Herstellung von Spaghetti Bolognese verwendet werden.
;;;;;
<recipe;dishes:spaghetti_smelting>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:spaghetti_bolognese",
"title": "Spaghetti Bolognese",
"category": "dishes:italian"
}
```
<|item-spotlight@lavender:book_components|item=dishes:spaghetti_bolognese|>
<|page-title@lavender:book_components|title=Spaghetti Bolognese|>
Wer liebt Spaghetti nicht?
;;;;;
<recipe;dishes:spaghetti_bolognese>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:steak",
"title": "Steak",
"category": "dishes:american"
}
```
<|item-spotlight@lavender:book_components|item=dishes:steak|>
<|page-title@lavender:book_components|title=Steak|>
Ein sehr berühmtes Gericht.
;;;;;
<recipe;dishes:steak>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:tomato",
"title": "Tomate",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:tomato|>
<|page-title@lavender:book_components|title=Tomate|>
Eine Tomate ist eine rote Frucht, die für viele Rezepte verwendet wird. Sie ist in Dörfern zu finden.
;;;;;
<recipe;dishes:tomatoseed>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:tomatoseed",
"title": "Tomatensamen",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:tomatoseed|>
<|page-title@lavender:book_components|title=Tomatensamen|>
Mit Tomatensamen kannst du eine Tomatenfarm anlegen.
;;;;;
<recipe;dishes:tomatoseed>

View File

@@ -0,0 +1,7 @@
```json
{
"title": "book.dishes.cooking_guide"
}
```
text.dishes.landing_text

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:bacon",
"title": "Bacon",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:bacon|>
<|page-title@lavender:book_components|title=Bacon|>
Bacon can be used to create bacon pizza.
;;;;;
<recipe;dishes:bacon_smelting>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:beetrootburger",
"title": "Beetrootburger",
"category": "dishes:vegan"
}
```
<|item-spotlight@lavender:book_components|item=dishes:beetrootburger|>
<|page-title@lavender:book_components|title=Beetrootburger|>
Healthy vegan burger involving beetroot
;;;;;
<recipe;dishes:beetrootburger>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:borscht",
"title": "Borscht",
"category": "dishes:ukrainian"
}
```
<|item-spotlight@lavender:book_components|item=dishes:borscht|>
<|page-title@lavender:book_components|title=Borscht|>
Traditional Ukrainian beetroot soup usually served with sour cream.
;;;;;
<recipe;dishes:borscht>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:bowl",
"title": "Bowl",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:bowl|>
<|page-title@lavender:book_components|title=Bowl|>
A bowl.
;;;;;
<recipe;dishes:bowl>

View File

@@ -0,0 +1,16 @@
```json
{
"icon": "dishes:cheese_roll",
"title": "Cheese Roll",
"category": "dishes:general"
}
```
<|item-spotlight@lavender:book_components|item=dishes:cheese_roll|>
<|page-title@lavender:book_components|title=Cheese Roll|>
A roll of cheese
;;;;;
<recipe;dishes:cheese_roll>

Some files were not shown because too many files have changed in this diff Show More