Compare commits

...

14 commits

Author SHA1 Message Date
Mrbysco 1207a27dbc More patchouli work 2024-03-14 01:53:37 +01:00
Mrbysco 90a923bd08 Merge branch '1.20.4' of https://github.com/Ellpeck/ActuallyAdditions into 1.20.4 2024-03-14 00:29:18 +01:00
Mrbysco ac4d53bde4 Update ItemGrowthRing.java 2024-03-14 00:29:10 +01:00
Flanks255 cad57217d4 Fixed recipe for player interface. 2024-03-13 18:06:38 -05:00
Flanks255 44202f9c46 Bump for FC 2024-03-13 17:55:33 -05:00
Flanks255 f0184f4d1a Added charged versions of all Energy items to JEI 2024-03-13 17:42:12 -05:00
Flanks255 99ea93ebad Added attachment copying to RecipeKeepDataShaped 2024-03-13 17:05:00 -05:00
Flanks255 911356adbc Fixed mekanism fluorite mining lens entry. 2024-03-13 16:59:01 -05:00
Flanks255 da7de46cdc Merge remote-tracking branch 'origin/1.20.4' into 1.20.4 2024-03-13 16:56:41 -05:00
Flanks255 e0a8eed365 Added RecipeKeepDataShapeless
Added drill coloring recipes.
2024-03-13 16:56:22 -05:00
Mrbysco d2d0afa6d7 Fix the contain checks on the Player Probe and Player Interface 2024-03-13 22:35:43 +01:00
Mrbysco 8385c5aea6 2nd client run for testing 2024-03-13 22:35:11 +01:00
Flanks255 e4e9108099 Merge remote-tracking branch 'origin/1.20.4' into 1.20.4
# Conflicts:
#	src/generated/resources/.cache/9cf54cdf67e16111ec482a2a3b607e8fd75a4246
2024-03-13 15:32:37 -05:00
Flanks255 cf80d1746e Readded rice paper recipe. 2024-03-13 15:32:15 -05:00
47 changed files with 825 additions and 67 deletions

View file

@ -37,6 +37,14 @@ runs {
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
systemProperty 'neoforge.enabledGameTestNamespaces', "actuallyadditions"
}
client2 {
configure ("client")
programArguments.addAll '--username', 'Dev2'
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
systemProperty 'neoforge.enabledGameTestNamespaces', "actuallyadditions"
}
server {
systemProperty 'neoforge.enabledGameTestNamespaces', "actuallyadditions"

View file

@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false
# Actually Additions
mod_version=1.2.6
mod_version=1.2.7
# Forge
game_version=1.20.4

View file

@ -1,4 +1,4 @@
// 1.20.4 2024-03-13T16:31:58.3504382 Item Recipes
// 1.20.4 2024-03-13T16:30:00.2078814 Item Recipes
d374edde9294d1a224b4b5610b50117a11328c00 data/actuallyadditions/recipes/advanced_coil.json
f67629e45d152c96f3467a90a67520f78ecf9f07 data/actuallyadditions/recipes/advanced_leaf_blower.json
d65e5a70232fa2f0e74d2a67c1cd4b0e87124242 data/actuallyadditions/recipes/basic_coil.json
@ -49,6 +49,22 @@ dd65310cce05d96449b6641f0c29982bd670d623 data/actuallyadditions/recipes/decompre
823c7188829eb50975d857f61e33bc5c2780bb12 data/actuallyadditions/recipes/decompress/void_crystal_shard.json
c3592647a1b6de17893a80eeb9ed214f719cc4eb data/actuallyadditions/recipes/diamond_aiot.json
035937b870792a57c0db0b512b41f965af4c8195 data/actuallyadditions/recipes/double_battery.json
ed2c70ef554ccdc2b64ec07966d42668a319d32b data/actuallyadditions/recipes/drill_coloring/dye_drill_black.json
881cee08ef4c9cae7ff0549c896bc9c030a8b0f7 data/actuallyadditions/recipes/drill_coloring/dye_drill_blue.json
cd5471712f938e4b494809e91dd5947cdbd15a6e data/actuallyadditions/recipes/drill_coloring/dye_drill_brown.json
60a3f8cd14f2eb24787929e063abfba3c20fb01d data/actuallyadditions/recipes/drill_coloring/dye_drill_cyan.json
618b10d9093db3ad2b33ccf53a56c89dee8a62d4 data/actuallyadditions/recipes/drill_coloring/dye_drill_gray.json
5de54c56552fd3f448d453133adcae5456b31587 data/actuallyadditions/recipes/drill_coloring/dye_drill_green.json
14ec8cc195f2f741464cb9f110f9eb287a546232 data/actuallyadditions/recipes/drill_coloring/dye_drill_light_blue.json
07b386e726536b8a7e48f1332497adb76e16885e data/actuallyadditions/recipes/drill_coloring/dye_drill_light_gray.json
80e71aca4867f58fb74f090fc37838dd114e124f data/actuallyadditions/recipes/drill_coloring/dye_drill_lime.json
83a7d3a234441da079f014cbbf64a8cd1fcb7ec6 data/actuallyadditions/recipes/drill_coloring/dye_drill_magenta.json
75b0919b05bae59afb8c0c852842dfd17c1d3a92 data/actuallyadditions/recipes/drill_coloring/dye_drill_orange.json
6000e5221d29e456658861e7b35f102606a77ce0 data/actuallyadditions/recipes/drill_coloring/dye_drill_pink.json
f24b883db19649b69dc45faf38621a91fd125f08 data/actuallyadditions/recipes/drill_coloring/dye_drill_purple.json
36312062f28665b65da73f3e735a48cabc0d186e data/actuallyadditions/recipes/drill_coloring/dye_drill_red.json
72a714b78e80f028771b887c6bc865c5850f2fe9 data/actuallyadditions/recipes/drill_coloring/dye_drill_white.json
afbd032dbb1278f1edf020af0e4d5d558f58ad77 data/actuallyadditions/recipes/drill_coloring/dye_drill_yellow.json
ac1da42089dad9779f7f8b4d143c35e910a43610 data/actuallyadditions/recipes/drill_core.json
33dc398564081b1ea8b619650b6e292231ef957d data/actuallyadditions/recipes/drill_light_blue.json
201358d5c3c6b02e02de6c35d0a6e62c6fe565eb data/actuallyadditions/recipes/drill_pattern.json
@ -86,6 +102,7 @@ bbda1becc270cf13e6b1d8e6d873aafa0951552d data/actuallyadditions/recipes/lens_of_
80a2e4f402acab5da96bdf3acd459fce0f930c08 data/actuallyadditions/recipes/quintuple_battery.json
c6ff81ba878c02651a9353e490b3a8f9897a5410 data/actuallyadditions/recipes/rice_dough.json
bc69015bae99ad4bb1a613a7367469d4401f83ae data/actuallyadditions/recipes/rice_dough_smelting.json
36eb3f29269e14cac10af27e6cd070209446a7b8 data/actuallyadditions/recipes/rice_paper.json
5958ff2fb37430660fb22012212336320ee83dd8 data/actuallyadditions/recipes/rice_seeds.json
f6c73cb2e41a8a21e2fda888b28bf52672b33d2e data/actuallyadditions/recipes/rice_slime.json
319b2d0423b79497837f5a3f940011b3bccf09f3 data/actuallyadditions/recipes/rice_slime_potion.json

View file

@ -1,4 +1,4 @@
// 1.20.4 2024-03-12T17:59:34.1573737 Recipes
// 1.20.4 2024-03-13T18:06:15.6143021 Recipes
4d3128b37a7153882a9324cda49b5069207561c5 data/actuallyadditions/recipes/atomic_reconstructor.json
b0367f5012651764931e8b8fd0c5bcca4e8614c0 data/actuallyadditions/recipes/battery_box.json
dba5d4a1a79489d5766fad32f912ab1a64618854 data/actuallyadditions/recipes/bio_reactor.json
@ -61,6 +61,7 @@ c7b65084e855bd7f083819ed9339320577510c6f data/actuallyadditions/recipes/phantom_
6d3aa070e0fccbb126c80323423c9482259dd6de data/actuallyadditions/recipes/phantom_liquiface.json
253e31ad471e2a8e20bfbe077826a8fac35fcc84 data/actuallyadditions/recipes/phantom_redstoneface.json
8c78ebb9351b98ffe368391a391b90385c0b8b7f data/actuallyadditions/recipes/placer.json
981e7e91216504b421d069f72920499df052e64f data/actuallyadditions/recipes/player_interface.json
184acfb5fd3799b3fbe35150c67b6530581f8bf1 data/actuallyadditions/recipes/powered_furnace.json
b81a706a5f635d8a63ffd3034c80838dc10699c9 data/actuallyadditions/recipes/ranged_collector.json
532a454741e8068941f1f3c44f3be257530db8c3 data/actuallyadditions/recipes/shock_suppressor.json

View file

@ -1,6 +1,8 @@
// 1.20.4 2024-03-06T00:00:49.130919 Patchouli Book Provider
// 1.20.4 2024-03-14T01:53:18.5540232 Patchouli Book Provider
25f9d206f1f0397918f65634d57f658516f3c952 assets/actuallyadditions/patchouli_books/booklet/en_us/categories/getting_started.json
7023c70c30600d465a96b315b2b7954eedad337d assets/actuallyadditions/patchouli_books/booklet/en_us/entries/crystals.json
cb103625b78fcc79697bdc00459a21cacf0c940a assets/actuallyadditions/patchouli_books/booklet/en_us/entries/engineer_house.json
88df6be8c958d5e89673e9eefcf73315d50bda9f assets/actuallyadditions/patchouli_books/booklet/en_us/entries/guide.json
49e2d21f416f97f2e952ceb8e003e8497e926e03 assets/actuallyadditions/patchouli_books/booklet/en_us/entries/intro.json
2709d2e5c13efa327c5ee6c18fe10e377d49abe3 assets/actuallyadditions/patchouli_books/booklet/en_us/entries/intro.json
78d1f1a0d393feaf903c84d11ac2749d17779217 assets/actuallyadditions/patchouli_books/booklet/en_us/entries/tutorial.json
10146f4dd5bab35ef00a724fab1f3762e5f7c2b9 data/actuallyadditions/patchouli_books/booklet/book.json

View file

@ -0,0 +1,101 @@
{
"category": "actuallyadditions:getting_started",
"icon": "actuallyadditions:booklet",
"name": "booklet.actuallyadditions.chapter.crystals",
"pages": [
{
"type": "patchouli:text",
"text": "booklet.actuallyadditions.chapter.crystals.text.1"
},
{
"type": "patchouli:text",
"text": "booklet.actuallyadditions.chapter.crystals.text.2"
},
{
"type": "patchouli:text",
"text": "booklet.actuallyadditions.chapter.crystals.text.3"
},
{
"type": "patchouli:image",
"border": false,
"images": [
"actuallyadditions:textures/gui/booklet/page_atomic_reconstructor.png"
]
},
{
"type": "patchouli:text",
"text": "booklet.actuallyadditions.chapter.crystals.text.5"
},
{
"type": "patchouli:crafting",
"recipe": "actuallyadditions:atomic_reconstructor",
"text": "booklet.actuallyadditions.chapter.crystals.text.6"
},
{
"type": "actuallyadditions:reconstructor",
"recipe": "actuallyadditions:laser/crystalize_restonia_crystal_block",
"recipe2": "actuallyadditions:laser/crystalize_restonia_crystal",
"text": "booklet.actuallyadditions.reconstructor_recipe"
},
{
"type": "actuallyadditions:reconstructor",
"recipe": "actuallyadditions:laser/crystalize_palis_crystal_block",
"recipe2": "actuallyadditions:laser/crystalize_palis_crystal",
"text": "booklet.actuallyadditions.reconstructor_recipe"
},
{
"type": "actuallyadditions:reconstructor",
"recipe": "actuallyadditions:laser/crystalize_diamatine_crystal_block",
"recipe2": "actuallyadditions:laser/crystalize_diamatine_crystal",
"text": "booklet.actuallyadditions.reconstructor_recipe"
},
{
"type": "actuallyadditions:reconstructor",
"recipe": "actuallyadditions:laser/crystalize_void_crystal_block",
"recipe2": "actuallyadditions:laser/crystalize_void_crystal",
"text": "booklet.actuallyadditions.reconstructor_recipe"
},
{
"type": "actuallyadditions:reconstructor",
"recipe": "actuallyadditions:laser/crystalize_emeradic_crystal_block",
"recipe2": "actuallyadditions:laser/crystalize_emeradic_crystal",
"text": "booklet.actuallyadditions.reconstructor_recipe"
},
{
"type": "actuallyadditions:reconstructor",
"recipe": "actuallyadditions:laser/crystalize_enori_crystal_block",
"recipe2": "actuallyadditions:laser/crystalize_enori_crystal",
"text": "booklet.actuallyadditions.reconstructor_recipe"
},
{
"type": "patchouli:crafting",
"recipe": "actuallyadditions:decompress/restonia_crystal",
"recipe2": "actuallyadditions:compress/restonia_crystal_block"
},
{
"type": "patchouli:crafting",
"recipe": "actuallyadditions:decompress/palis_crystal",
"recipe2": "actuallyadditions:compress/palis_crystal_block"
},
{
"type": "patchouli:crafting",
"recipe": "actuallyadditions:decompress/diamatine_crystal",
"recipe2": "actuallyadditions:compress/diamatine_crystal_block"
},
{
"type": "patchouli:crafting",
"recipe": "actuallyadditions:decompress/void_crystal",
"recipe2": "actuallyadditions:compress/void_crystal_block"
},
{
"type": "patchouli:crafting",
"recipe": "actuallyadditions:decompress/emeradic_crystal",
"recipe2": "actuallyadditions:compress/emeradic_crystal_block"
},
{
"type": "patchouli:crafting",
"recipe": "actuallyadditions:decompress/enori_crystal",
"recipe2": "actuallyadditions:compress/enori_crystal_block"
}
]
}

View file

@ -0,0 +1,18 @@
{
"category": "actuallyadditions:getting_started",
"icon": "actuallyadditions:booklet",
"name": "booklet.actuallyadditions.chapter.engineer_house",
"pages": [
{
"type": "patchouli:text",
"text": "booklet.actuallyadditions.chapter.engineer_house.text.1"
},
{
"type": "patchouli:image",
"images": [
"actuallyadditions:textures/gui/booklet/page_engineer_house.png"
],
"text": "booklet.actuallyadditions.chapter.engineer_house.text.2"
}
]
}

View file

@ -14,6 +14,10 @@
{
"type": "patchouli:text",
"text": "booklet.actuallyadditions.chapter.intro.text.3"
},
{
"type": "patchouli:text",
"text": "booklet.actuallyadditions.chapter.intro.text.4"
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/black"
}
],
"result": {
"item": "actuallyadditions:drill_black"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/blue"
}
],
"result": {
"item": "actuallyadditions:drill_blue"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/brown"
}
],
"result": {
"item": "actuallyadditions:drill_brown"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/cyan"
}
],
"result": {
"item": "actuallyadditions:drill_cyan"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/gray"
}
],
"result": {
"item": "actuallyadditions:drill_gray"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/green"
}
],
"result": {
"item": "actuallyadditions:drill_green"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/light_blue"
}
],
"result": {
"item": "actuallyadditions:drill_light_blue"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/light_gray"
}
],
"result": {
"item": "actuallyadditions:drill_light_gray"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/lime"
}
],
"result": {
"item": "actuallyadditions:drill_lime"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/magenta"
}
],
"result": {
"item": "actuallyadditions:drill_magenta"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/orange"
}
],
"result": {
"item": "actuallyadditions:drill_orange"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/pink"
}
],
"result": {
"item": "actuallyadditions:drill_pink"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/purple"
}
],
"result": {
"item": "actuallyadditions:drill_purple"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/red"
}
],
"result": {
"item": "actuallyadditions:drill_red"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/white"
}
],
"result": {
"item": "actuallyadditions:drill_white"
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "actuallyadditions:copy_nbt_shapeless",
"value": {
"category": "misc",
"ingredients": [
{
"type": "actuallyadditions:target_nbt",
"value": {
"tag": "actuallyadditions:drills"
}
},
{
"tag": "forge:dyes/yellow"
}
],
"result": {
"item": "actuallyadditions:drill_yellow"
}
}
}

View file

@ -0,0 +1,26 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"A": {
"item": "actuallyadditions:advanced_coil"
},
"C": {
"item": "actuallyadditions:ender_casing"
},
"E": {
"item": "actuallyadditions:empowered_diamatine_crystal"
},
"W": {
"item": "minecraft:wither_skeleton_skull"
}
},
"pattern": [
"CWC",
"ECE",
"CAC"
],
"result": {
"item": "actuallyadditions:player_interface"
}
}

View file

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"R": {
"item": "actuallyadditions:rice"
}
},
"pattern": [
"R ",
" R ",
" R"
],
"result": {
"count": 3,
"item": "minecraft:paper"
}
}

View file

@ -89,6 +89,15 @@ public class BlockRecipeGenerator extends RecipeProvider {
.define('D', ActuallyTags.Items.DRILLS)
.save(recipeOutput);
// Player Interface
Recipe.shaped(ActuallyBlocks.PLAYER_INTERFACE.getItem())
.pattern("CWC", "ECE", "CAC")
.define('C', ActuallyBlocks.ENDER_CASING.getItem())
.define('W', Items.WITHER_SKELETON_SKULL)
.define('E', ActuallyItems.EMPOWERED_DIAMATINE_CRYSTAL)
.define('A', ActuallyItems.ADVANCED_COIL)
.save(recipeOutput);
//Black Quartz Wall
Recipe.wall(ActuallyBlocks.BLACK_QUARTZ_WALL.getItem(), ActuallyBlocks.BLACK_QUARTZ_PILLAR.get(), recipeOutput);

View file

@ -1,9 +1,11 @@
package de.ellpeck.actuallyadditions.data;
import de.ellpeck.actuallyadditions.api.ActuallyTags;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks;
import de.ellpeck.actuallyadditions.mod.config.conditions.BoolConfigCondition;
import de.ellpeck.actuallyadditions.mod.crafting.RecipeKeepDataShaped;
import de.ellpeck.actuallyadditions.mod.crafting.RecipeKeepDataShapeless;
import de.ellpeck.actuallyadditions.mod.crafting.TargetNBTIngredient;
import de.ellpeck.actuallyadditions.mod.items.ActuallyItems;
import de.ellpeck.actuallyadditions.mod.util.NoAdvRecipeOutput;
@ -18,11 +20,13 @@ import net.minecraft.data.recipes.ShapelessRecipeBuilder;
import net.minecraft.data.recipes.SimpleCookingRecipeBuilder;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.ItemTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.ShapedRecipe;
import net.minecraft.world.item.crafting.ShapelessRecipe;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.ItemLike;
import net.neoforged.neoforge.common.Tags;
@ -185,12 +189,12 @@ public class ItemRecipeGenerator extends RecipeProvider {
.define('S', ActuallyItems.ENORI_CRYSTAL.get()).save(recipeOutput);
/* //Rice Recipes
//Rice Recipes
Recipe.shaped(Items.PAPER, 3)
.pattern("R ")
.pattern(" R ")
.pattern(" R")
.define('R', TheFoods.RICE).save(consumer); //TODO foods need worked on still.*/
.define('R', ActuallyItems.RICE).save(recipeOutput, new ResourceLocation(ActuallyAdditions.MODID, "rice_paper"));
Recipe.shaped(ActuallyItems.RICE_SLIMEBALL.get())
.requiresBook()
@ -238,6 +242,25 @@ public class ItemRecipeGenerator extends RecipeProvider {
.define('R', ActuallyItems.DRILL_CORE.get())
.define('I', ActuallyItems.ENORI_CRYSTAL.get()).save(recipeOutput);
// Drill Colors
dyeDrill(ActuallyItems.DRILL_BLACK, Tags.Items.DYES_BLACK, recipeOutput);
dyeDrill(ActuallyItems.DRILL_RED, Tags.Items.DYES_RED, recipeOutput);
dyeDrill(ActuallyItems.DRILL_GREEN, Tags.Items.DYES_GREEN, recipeOutput);
dyeDrill(ActuallyItems.DRILL_BROWN, Tags.Items.DYES_BROWN, recipeOutput);
dyeDrill(ActuallyItems.DRILL_BLUE, Tags.Items.DYES_BLUE, recipeOutput);
dyeDrill(ActuallyItems.DRILL_PURPLE, Tags.Items.DYES_PURPLE, recipeOutput);
dyeDrill(ActuallyItems.DRILL_CYAN, Tags.Items.DYES_CYAN, recipeOutput);
dyeDrill(ActuallyItems.DRILL_LIGHT_GRAY, Tags.Items.DYES_LIGHT_GRAY, recipeOutput);
dyeDrill(ActuallyItems.DRILL_GRAY, Tags.Items.DYES_GRAY, recipeOutput);
dyeDrill(ActuallyItems.DRILL_PINK, Tags.Items.DYES_PINK, recipeOutput);
dyeDrill(ActuallyItems.DRILL_LIME, Tags.Items.DYES_LIME, recipeOutput);
dyeDrill(ActuallyItems.DRILL_YELLOW, Tags.Items.DYES_YELLOW, recipeOutput);
dyeDrill(ActuallyItems.DRILL_MAIN, Tags.Items.DYES_LIGHT_BLUE, recipeOutput);
dyeDrill(ActuallyItems.DRILL_ORANGE, Tags.Items.DYES_ORANGE, recipeOutput);
dyeDrill(ActuallyItems.DRILL_WHITE, Tags.Items.DYES_WHITE, recipeOutput);
dyeDrill(ActuallyItems.DRILL_MAGENTA, Tags.Items.DYES_MAGENTA, recipeOutput);
//Drill Core
Recipe.shaped(ActuallyItems.DRILL_CORE.get())
.pattern("ICI")
@ -583,7 +606,14 @@ public class ItemRecipeGenerator extends RecipeProvider {
addPaxel(consumer, ActuallyItems.GOLD_AIOT, Items.GOLDEN_AXE, Items.GOLDEN_PICKAXE, Items.GOLDEN_SWORD, Items.GOLDEN_SHOVEL, Items.GOLDEN_HOE);
addPaxel(consumer, ActuallyItems.DIAMOND_AIOT, Items.DIAMOND_AXE, Items.DIAMOND_PICKAXE, Items.DIAMOND_SWORD, Items.DIAMOND_SHOVEL, Items.DIAMOND_HOE);
addPaxel(consumer, ActuallyItems.NETHERITE_AIOT, Items.NETHERITE_AXE, Items.NETHERITE_PICKAXE, Items.NETHERITE_SWORD, Items.NETHERITE_SHOVEL, Items.NETHERITE_HOE);
}
}
private static void dyeDrill(DeferredItem<? extends Item> result, TagKey<Item> dyeItem, RecipeOutput recipeOutput) {
Recipe.shapeless(result.get())
.requires(TargetNBTIngredient.of(ActuallyTags.Items.DRILLS))
.requires(dyeItem)
.save(new RecipeInjector<ShapelessRecipe>(recipeOutput, RecipeKeepDataShapeless::new), new ResourceLocation(ActuallyAdditions.MODID, "drill_coloring/dye_" + BuiltInRegistries.ITEM.getKey(result.get()).getPath()));
}
public static void addPaxel(RecipeOutput consumer, DeferredItem<? extends Item> output, Item axe, Item pickaxe, Item sword, Item shovel, Item hoe) {
Recipe.shapeless(output.get())

View file

@ -1,5 +1,6 @@
package de.ellpeck.actuallyadditions.data.patchouli;
import de.ellpeck.actuallyadditions.data.patchouli.builder.ReconstructorPageBuilder;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.items.ActuallyItems;
import net.minecraft.data.PackOutput;
@ -7,6 +8,7 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import xyz.brassgoggledcoders.patchouliprovider.BookBuilder;
import xyz.brassgoggledcoders.patchouliprovider.CategoryBuilder;
import xyz.brassgoggledcoders.patchouliprovider.EntryBuilder;
import xyz.brassgoggledcoders.patchouliprovider.PatchouliBookProvider;
import java.util.function.Consumer;
@ -48,8 +50,9 @@ public class PachouliGenerator extends PatchouliBookProvider {
.addTextPage(prefix("chapter.book_tutorial.text.1")).build()
.addTextPage(prefix("chapter.book_tutorial.text.2")).build()
.addTextPage(prefix("chapter.book_tutorial.text.3")).build()
.addCraftingPage(new ResourceLocation(ActuallyAdditions.MODID, "booklet"))
.setTitle("").setText("booklet.actuallyadditions.shapeless_recipe").build();
.addCraftingPage(new ResourceLocation(ActuallyAdditions.MODID, "booklet")).setTitle("").setText("booklet.actuallyadditions.shapeless_recipe").build();
gettingStarted.addEntry("guide", prefix("chapter.video_guide"), "actuallyadditions:textures/item/youtube.png")
.addLinkPage("https://www.youtube.com/watch?v=fhjz0Ew56pM", prefix("chapter.video_guide.booty.button"))
.setText(prefix("chapter.video_guide.booty.text.1")).build()
@ -61,7 +64,53 @@ public class PachouliGenerator extends PatchouliBookProvider {
gettingStarted.addEntry("intro", prefix("chapter.intro"), bookStack)
.addTextPage(prefix("chapter.intro.text.1")).build()
.addTextPage(prefix("chapter.intro.text.2")).build()
.addTextPage(prefix("chapter.intro.text.3")).build();
.addTextPage(prefix("chapter.intro.text.3")).build()
.addTextPage(prefix("chapter.intro.text.4")).build();
gettingStarted.addEntry("engineer_house", prefix("chapter.engineer_house"), bookStack)
.addTextPage(prefix("chapter.engineer_house.text.1")).build()
.addImagePage(new ResourceLocation(ActuallyAdditions.MODID, "textures/gui/booklet/page_engineer_house.png"))
.setText("booklet.actuallyadditions.chapter.engineer_house.text.2").build();
EntryBuilder crystalsBuilder = gettingStarted.addEntry("crystals", prefix("chapter.crystals"), bookStack)
.addTextPage(prefix("chapter.crystals.text.1")).build()
.addTextPage(prefix("chapter.crystals.text.2")).build()
.addTextPage(prefix("chapter.crystals.text.3")).build()
.addImagePage(new ResourceLocation(ActuallyAdditions.MODID, "textures/gui/booklet/page_atomic_reconstructor.png")).setBorder(false).build()
.addTextPage(prefix("chapter.crystals.text.5")).build()
.addCraftingPage(new ResourceLocation(ActuallyAdditions.MODID, "atomic_reconstructor"))
.setText(prefix("chapter.crystals.text.6")).build();
crystalsBuilder.addPage(new ReconstructorPageBuilder(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_restonia_crystal_block"), crystalsBuilder))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_restonia_crystal"))
.setText("booklet.actuallyadditions.reconstructor_recipe").build();
crystalsBuilder.addPage(new ReconstructorPageBuilder(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_palis_crystal_block"), crystalsBuilder))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_palis_crystal"))
.setText("booklet.actuallyadditions.reconstructor_recipe").build();
crystalsBuilder.addPage(new ReconstructorPageBuilder(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_diamatine_crystal_block"), crystalsBuilder))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_diamatine_crystal"))
.setText("booklet.actuallyadditions.reconstructor_recipe").build();
crystalsBuilder.addPage(new ReconstructorPageBuilder(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_void_crystal_block"), crystalsBuilder))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_void_crystal"))
.setText("booklet.actuallyadditions.reconstructor_recipe").build();
crystalsBuilder.addPage(new ReconstructorPageBuilder(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_emeradic_crystal_block"), crystalsBuilder))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_emeradic_crystal"))
.setText("booklet.actuallyadditions.reconstructor_recipe").build();
crystalsBuilder.addPage(new ReconstructorPageBuilder(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_enori_crystal_block"), crystalsBuilder))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "laser/crystalize_enori_crystal"))
.setText("booklet.actuallyadditions.reconstructor_recipe").build();
crystalsBuilder.addCraftingPage(new ResourceLocation(ActuallyAdditions.MODID, "decompress/restonia_crystal"))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "compress/restonia_crystal_block")).build()
.addCraftingPage(new ResourceLocation(ActuallyAdditions.MODID, "decompress/palis_crystal"))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "compress/palis_crystal_block")).build()
.addCraftingPage(new ResourceLocation(ActuallyAdditions.MODID, "decompress/diamatine_crystal"))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "compress/diamatine_crystal_block")).build()
.addCraftingPage(new ResourceLocation(ActuallyAdditions.MODID, "decompress/void_crystal"))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "compress/void_crystal_block")).build()
.addCraftingPage(new ResourceLocation(ActuallyAdditions.MODID, "decompress/emeradic_crystal"))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "compress/emeradic_crystal_block")).build()
.addCraftingPage(new ResourceLocation(ActuallyAdditions.MODID, "decompress/enori_crystal"))
.setRecipe2(new ResourceLocation(ActuallyAdditions.MODID, "compress/enori_crystal_block")).build();
crystalsBuilder.build();
//End of Getting Started

View file

@ -0,0 +1,11 @@
package de.ellpeck.actuallyadditions.data.patchouli.builder;
import net.minecraft.resources.ResourceLocation;
import xyz.brassgoggledcoders.patchouliprovider.EntryBuilder;
import xyz.brassgoggledcoders.patchouliprovider.page.RecipePageBuilder;
public class ReconstructorPageBuilder extends RecipePageBuilder<ReconstructorPageBuilder> {
public ReconstructorPageBuilder(ResourceLocation recipe, EntryBuilder entryBuilder) {
super("actuallyadditions:reconstructor", recipe, entryBuilder);
}
}

View file

@ -68,8 +68,8 @@ import net.neoforged.neoforge.event.server.ServerStoppedEvent;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.registries.NeoForgeRegistries;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.function.Supplier;
@ -86,7 +86,7 @@ public class ActuallyAdditions {
public static final String GUIFACTORY = "de.ellpeck.actuallyadditions.mod.config.GuiFactory";
public static final String DEPS = "required:forge@[14.23.5.2836,);before:craftingtweaks;after:fastbench@[1.3.2,)";
public static final Logger LOGGER = LogManager.getLogger(NAME);
public static final Logger LOGGER = LoggerFactory.getLogger(MODID);
private static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(BuiltInRegistries.ENTITY_TYPE, MODID);
public static final Supplier<EntityType<EntityWorm>> ENTITY_WORM = ENTITIES.register("worm", () -> EntityType.Builder.of(EntityWorm::new, MobCategory.MISC).build(MODID + ":worm"));
@ -163,10 +163,8 @@ public class ActuallyAdditions {
new UpdateChecker();
InitEntities.init(); // todo: [port] replace
//AAWorldGen gen = new AAWorldGen();
ItemCoffee.initIngredients();
CrusherCrafting.init();
//LensMining.init();
}
private void onConfigReload(ModConfigEvent event) {

View file

@ -50,6 +50,7 @@ import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit;
import de.ellpeck.actuallyadditions.mod.particle.ActuallyParticles;
import de.ellpeck.actuallyadditions.mod.particle.ParticleBeam;
import de.ellpeck.actuallyadditions.mod.particle.ParticleLaserItem;
import de.ellpeck.actuallyadditions.mod.patchouli.PatchouliPages;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.client.multiplayer.ClientPacketListener;
@ -102,6 +103,8 @@ public class ActuallyAdditionsClient {
(stack, level, entity, tintIndex) -> "snail mail".equalsIgnoreCase(stack.getHoverName().getString()) ? 1F : 0F));
setupRenderLayers();
PatchouliPages.init();
}
private static void setupRenderLayers() {

View file

@ -19,7 +19,7 @@ import java.util.stream.Collectors;
public class ActuallyTabs {
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, ActuallyAdditions.MODID);
public static final Supplier<CreativeModeTab> GROUP = CREATIVE_MODE_TABS.register("tab", () -> CreativeModeTab.builder()
public static final Supplier<CreativeModeTab> GROUP = CREATIVE_MODE_TABS.register("tab", () -> CreativeModeTab.builder() // TODO coherently order them :P
.icon(() -> ActuallyItems.ITEM_BOOKLET.get().getDefaultInstance())
.withTabsBefore(CreativeModeTabs.SPAWN_EGGS)
.title(Component.translatable("itemGroup.actuallyadditions"))
@ -34,6 +34,7 @@ public class ActuallyTabs {
CustomEnergyStorage storage = new CustomEnergyStorage(itemEnergy.maxPower, itemEnergy.transfer, itemEnergy.transfer);
storage.setEnergyStored(itemEnergy.maxPower);
stack.setData(ActuallyAttachments.ENERGY_STORAGE.get(), storage);
stack.getOrCreateTag().putBoolean("Charged", true);
}
});
stacks.addAll(charged);

View file

@ -21,6 +21,7 @@ public class ActuallyRecipes {
}
public static final Supplier<RecipeSerializer<?>> KEEP_DATA_SHAPED_RECIPE = SERIALIZERS.register(RecipeKeepDataShaped.NAME, RecipeKeepDataShaped.Serializer::new);
public static final Supplier<RecipeSerializer<?>> KEEP_DATA_SHAPELESS_RECIPE = SERIALIZERS.register(RecipeKeepDataShapeless.NAME, RecipeKeepDataShapeless.Serializer::new);
public static final Supplier<RecipeSerializer<?>> LASER_RECIPE = SERIALIZERS.register(LaserRecipe.NAME, LaserRecipe.Serializer::new);
public static final Supplier<RecipeSerializer<?>> EMPOWERING_RECIPE = SERIALIZERS.register(EmpowererRecipe.NAME, EmpowererRecipe.Serializer::new);
public static final Supplier<RecipeSerializer<?>> CRUSHING_RECIPE = SERIALIZERS.register(CrushingRecipe.NAME, CrushingRecipe.Serializer::new);

View file

@ -3,6 +3,7 @@ package de.ellpeck.actuallyadditions.mod.crafting;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks;
import net.minecraft.core.RegistryAccess;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.Container;
@ -47,6 +48,11 @@ public class LaserRecipe implements Recipe<Container> {
return itemIngredient;
}
@Override
public ItemStack getToastSymbol() {
return new ItemStack(ActuallyBlocks.ATOMIC_RECONSTRUCTOR.get());
}
//nah
@Override
public boolean matches(Container pInv, Level pLevel) {

View file

@ -10,6 +10,7 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.ShapedRecipe;
import net.neoforged.neoforge.attachment.AttachmentInternals;
import javax.annotation.Nullable;
@ -44,6 +45,9 @@ public class RecipeKeepDataShaped extends ShapedRecipe {
if (!datasource.isEmpty() && datasource.hasTag())
craftingResult.setTag(datasource.getTag().copy());
if (!datasource.isEmpty())
AttachmentInternals.copyStackAttachments(datasource, craftingResult);
return craftingResult;
}

View file

@ -10,31 +10,91 @@
package de.ellpeck.actuallyadditions.mod.crafting;
// TODO: [port] MOVE TO DATA_GENERATOR
@Deprecated
public class RecipeKeepDataShapeless {// extends ShapelessOreRecipe {
//
// private final ItemStack nbtCopyStack;
//
// public RecipeKeepDataShapeless(ResourceLocation group, ItemStack result, ItemStack nbtCopyStack, Object... recipe) {
// super(group, result, recipe);
// this.nbtCopyStack = nbtCopyStack;
//
// RecipeHelper.addRecipe(group.getPath(), this);
// }
//
// @Override
// public ItemStack getCraftingResult(InventoryCrafting inventory) {
// ItemStack stack = super.getCraftingResult(inventory);
// if (StackUtil.isValid(stack)) {
// for (int i = 0; i < inventory.getSizeInventory(); i++) {
// ItemStack input = inventory.getStackInSlot(i);
// if (ItemUtil.areItemsEqual(this.nbtCopyStack, input, true)) {
// stack.setTagCompound(input.getTagCompound());
// break;
// }
// }
// }
// return stack;
// }
import com.mojang.serialization.Codec;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import net.minecraft.core.NonNullList;
import net.minecraft.core.RegistryAccess;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.inventory.CraftingContainer;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.CraftingBookCategory;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.ShapelessRecipe;
import net.neoforged.neoforge.attachment.AttachmentInternals;
public class RecipeKeepDataShapeless extends ShapelessRecipe {
public static String NAME = "copy_nbt_shapeless";
public RecipeKeepDataShapeless(String pGroup, CraftingBookCategory pCategory, ItemStack pResult, NonNullList<Ingredient> pIngredients) {
super(pGroup, pCategory, pResult, pIngredients);
}
public RecipeKeepDataShapeless(ShapelessRecipe recipe) {
super(recipe.getGroup(), recipe.category(), recipe.getResultItem(RegistryAccess.EMPTY), recipe.getIngredients());
}
@Override
public RecipeSerializer<?> getSerializer() {
return ActuallyRecipes.KEEP_DATA_SHAPELESS_RECIPE.get();
}
@Override
public ItemStack assemble(CraftingContainer pContainer, RegistryAccess pRegistryAccess) {
ItemStack result = super.assemble(pContainer, pRegistryAccess);
TargetNBTIngredient donorIngredient = null;
ItemStack datasource = ItemStack.EMPTY;
NonNullList<Ingredient> ingredients = getIngredients();
for (Ingredient ingredient : ingredients) {
if (ingredient instanceof TargetNBTIngredient) {
donorIngredient = (TargetNBTIngredient) ingredient;
break;
}
}
if (donorIngredient != null && !pContainer.isEmpty()) {
for (int i = 0; i < pContainer.getContainerSize(); i++) {
final ItemStack item = pContainer.getItem(i);
if (!item.isEmpty() && donorIngredient.test(item)) {
datasource = item;
break;
}
}
}
if (!datasource.isEmpty() && datasource.hasTag())
result.setTag(datasource.getTag().copy());
else {
ActuallyAdditions.LOGGER.info("AA.KeepDataShapeless missing TargetNBTIngredient");
return ItemStack.EMPTY;
}
if (!datasource.isEmpty())
AttachmentInternals.copyStackAttachments(datasource, result);
return result;
}
public static class Serializer implements RecipeSerializer<RecipeKeepDataShapeless> {
public static final Codec<RecipeKeepDataShapeless> CODEC = ShapelessRecipe.Serializer.CODEC.xmap(RecipeKeepDataShapeless::new, $ -> $);
@Override
public Codec<RecipeKeepDataShapeless> codec() {
return CODEC;
}
@Override
public RecipeKeepDataShapeless fromNetwork(FriendlyByteBuf pBuffer) {
return new RecipeKeepDataShapeless(RecipeSerializer.SHAPELESS_RECIPE.fromNetwork(pBuffer));
}
@Override
public void toNetwork(net.minecraft.network.FriendlyByteBuf pBuffer, RecipeKeepDataShapeless pRecipe) {
try {
RecipeSerializer.SHAPELESS_RECIPE.toNetwork(pBuffer, pRecipe);
}
catch (Exception e) {
ActuallyAdditions.LOGGER.info("Failed to serialize " + NAME + " Recipe to packet: " + e.getMessage());
throw e;
}
}
}
}

View file

@ -2,11 +2,13 @@ package de.ellpeck.actuallyadditions.mod.crafting;
import com.mojang.serialization.Codec;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.ItemLike;
import org.jetbrains.annotations.Nullable;
import javax.annotation.Nonnull;
import java.util.Arrays;
import java.util.stream.Stream;
@ -34,7 +36,7 @@ public class TargetNBTIngredient extends Ingredient {
public static TargetNBTIngredient of(ItemStack itemStack) {
return new TargetNBTIngredient(Stream.of(new ItemValue(itemStack)));
}
public static TargetNBTIngredient of(TagKey tag) {
public static TargetNBTIngredient of(@Nonnull TagKey<Item> tag) {
return new TargetNBTIngredient(Stream.of(new TagValue(tag)));
}
}

View file

@ -43,7 +43,7 @@ public class ItemGrowthRing extends ItemEnergy {
ItemStack equipped = player.getMainHandItem();
int energyUse = 300;
if (StackUtil.isValid(equipped) && equipped == stack && this.getEnergyStored(stack) >= energyUse) {
if (!equipped.isEmpty() && equipped == stack && this.getEnergyStored(stack) >= energyUse) {
List<BlockPos> blocks = new ArrayList<>();
//Adding all possible Blocks

View file

@ -44,18 +44,18 @@ public class ItemPlayerProbe extends ItemBase {
public void inventoryTick(ItemStack stack, Level world, Entity entity, int itemSlot, boolean isSelected) {
if (!world.isClientSide) {
CompoundTag compound = stack.getOrCreateTag();
if (compound.contains("UUIDMost")) {
if (compound.contains("UUID")) {
UUID id = compound.getUUID("UUID");
Player player = world.getPlayerByUUID(id);
if (player != null) {
if (player.isShiftKeyDown()) {
ItemPhantomConnector.clearStorage(stack, "UUIDLeast", "UUIDMost", "Name");
ItemPhantomConnector.clearStorage(stack, "UUID", "Name");
((Player) entity).displayClientMessage(Component.translatable("tooltip." + ActuallyAdditions.MODID + ".playerProbe.disconnect.1"), false);
player.displayClientMessage(Component.translatable("tooltip." + ActuallyAdditions.MODID + ".playerProbe.notice"), false);
//TheAchievements.GET_UNPROBED.get(player);
}
} else {
ItemPhantomConnector.clearStorage(stack, "UUIDLeast", "UUIDMost", "Name");
ItemPhantomConnector.clearStorage(stack, "UUID", "Name");
((Player) entity).displayClientMessage(Component.translatable("tooltip." + ActuallyAdditions.MODID + ".playerProbe.disconnect.2"), false);
}
}
@ -71,17 +71,16 @@ public class ItemPlayerProbe extends ItemBase {
ItemStack stack = player.getItemInHand(context.getHand());
BlockEntity tile = context.getLevel().getBlockEntity(context.getClickedPos());
if (tile instanceof TileEntityPlayerInterface) {
if (tile instanceof TileEntityPlayerInterface face) {
CompoundTag compound = stack.getOrCreateTag();
if (compound.contains("UUIDMost")) {
if (compound.contains("UUID")) {
if (!context.getLevel().isClientSide) {
TileEntityPlayerInterface face = (TileEntityPlayerInterface) tile;
face.connectedPlayer = compound.getUUID("UUID");
face.playerName = compound.getString("Name");
face.setChanged();
face.sendUpdate();
ItemPhantomConnector.clearStorage(stack, "UUIDLeast", "UUIDMost", "Name");
ItemPhantomConnector.clearStorage(stack, "UUID", "Name");
}
return InteractionResult.SUCCESS;
}

View file

@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.gui.CrusherScreen;
import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiCoffeeMachine;
import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiFurnaceDouble;
import de.ellpeck.actuallyadditions.mod.items.ActuallyItems;
import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy;
import de.ellpeck.actuallyadditions.mod.jei.coffee.CoffeeMachineCategory;
import de.ellpeck.actuallyadditions.mod.jei.crusher.CrusherCategory;
import de.ellpeck.actuallyadditions.mod.jei.empowerer.EmpowererRecipeCategory;
@ -29,16 +30,15 @@ import mezz.jei.api.JeiPlugin;
import mezz.jei.api.constants.RecipeTypes;
import mezz.jei.api.helpers.IJeiHelpers;
import mezz.jei.api.recipe.RecipeType;
import mezz.jei.api.registration.IGuiHandlerRegistration;
import mezz.jei.api.registration.IRecipeCatalystRegistration;
import mezz.jei.api.registration.IRecipeCategoryRegistration;
import mezz.jei.api.registration.IRecipeRegistration;
import mezz.jei.api.registration.*;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeHolder;
import net.minecraft.world.level.Level;
import javax.annotation.Nonnull;
@JeiPlugin
public class JEIActuallyAdditionsPlugin implements IModPlugin {
public static final ResourceLocation ID = new ResourceLocation(ActuallyAdditions.MODID, "jei_plugin");
@ -55,6 +55,14 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin {
public static final RecipeType<CrushingRecipe> CRUSHING = RecipeType.create(ActuallyAdditions.MODID, "crushing", CrushingRecipe.class);
public static final RecipeType<MiningLensRecipe> MINING_LENS = RecipeType.create(ActuallyAdditions.MODID, "mining_lens", MiningLensRecipe.class);
@Override
public void registerItemSubtypes(@Nonnull ISubtypeRegistration reg) {
ActuallyItems.ITEMS.getEntries().forEach(entry -> {
if (entry.get() instanceof ItemEnergy)
reg.useNbtForSubtypes(entry.get());
});
}
@Override
public void registerCategories(IRecipeCategoryRegistration registry) {
IJeiHelpers helpers = registry.getJeiHelpers();

View file

@ -0,0 +1,49 @@
package de.ellpeck.actuallyadditions.mod.patchouli;
import com.mojang.blaze3d.systems.RenderSystem;
import de.ellpeck.actuallyadditions.mod.crafting.ActuallyRecipes;
import de.ellpeck.actuallyadditions.mod.crafting.LaserRecipe;
import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.world.level.Level;
import vazkii.patchouli.client.book.gui.GuiBook;
import vazkii.patchouli.client.book.page.abstr.PageSimpleProcessingRecipe;
public class PageReconstructor extends PageSimpleProcessingRecipe<LaserRecipe> {
public PageReconstructor() {
super(ActuallyRecipes.Types.LASER.get());
}
@Override
protected void drawRecipe(GuiGraphics graphics, LaserRecipe recipe, int recipeX, int recipeY, int mouseX, int mouseY, boolean second) {
Level level = Minecraft.getInstance().level;
if (level == null) {
return;
}
RenderSystem.enableBlend();
graphics.blit(AssetUtil.getBookletGuiLocation("gui_booklet_gadgets"), recipeX + 10, recipeY + 2, 80, 146, 68, 48, 256, 256);
parent.drawCenteredStringNoShadow(graphics, getTitle(second).getVisualOrderText(), GuiBook.PAGE_WIDTH / 2, recipeY - 10, book.headerColor);
parent.renderIngredient(graphics, recipeX + 11, recipeY + 15, mouseX, mouseY, recipe.getInput());
parent.renderItemStack(graphics, recipeX + 33, recipeY + 15, mouseX, mouseY, recipe.getToastSymbol());
parent.renderItemStack(graphics, recipeX + 57, recipeY + 15, mouseX, mouseY, recipe.getResultItem(level.registryAccess()));
}
@Override
public int getTextHeight() {
return 60;
}
@Override
public boolean shouldRenderText() {
return true;
}
@Override
protected int getRecipeHeight() {
return 90;
}
}

View file

@ -0,0 +1,11 @@
package de.ellpeck.actuallyadditions.mod.patchouli;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import net.minecraft.resources.ResourceLocation;
import vazkii.patchouli.client.book.ClientBookRegistry;
public class PatchouliPages {
public static void init() {
ClientBookRegistry.INSTANCE.pageTypes.put(new ResourceLocation(ActuallyAdditions.MODID, "reconstructor"), PageReconstructor.class);
}
}

View file

@ -131,7 +131,7 @@ public class TileEntityPlayerInterface extends TileEntityBase implements IEnergy
super.readSyncableNBT(compound, type);
this.storage.readFromNBT(compound);
if (compound.contains("PlayerLeast") && type != NBTType.SAVE_BLOCK) {
if (compound.contains("Player") && type != NBTType.SAVE_BLOCK) {
this.connectedPlayer = compound.getUUID("Player");
this.playerName = compound.getString("PlayerName");
}

View file

@ -3,6 +3,7 @@ public net.minecraft.world.damagesource.DamageSources damageTypes
public-f net.minecraft.data.recipes.RecipeProvider getName()Ljava/lang/String;
public-f net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList list
public net.minecraft.world.item.crafting.ShapedRecipe pattern
public net.minecraft.world.item.crafting.ShapelessRecipe$Serializer CODEC # Codec
public net.minecraft.world.inventory.InventoryMenu TEXTURE_EMPTY_SLOTS
public net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool templates
public-f net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool rawTemplates

View file

@ -714,9 +714,10 @@
"booklet.actuallyadditions.trials.empowererAutomation.text.1": "The <item>Empowerer<r> requires a lot of resources to <imp>convert crystals<r>. There should be a pretty easy way to create a system that does this <imp>automatically<r>. Using some <item>Item Laser Relays<r> should provide an easy way to make the right items go onto the right display stands.",
"_comment": "Booklet Chapters",
"booklet.actuallyadditions.chapter.intro": "A story about ActAdd",
"booklet.actuallyadditions.chapter.intro.text.1": "<i>For too long have the people of Minecraftia toiled under a relentless whip. A whip more hurtful and more injurious than that of any slave-master: inconvenience. Aye, the thousand million inconveniences that make up the grind, that force players to waste hours- nay, days!- chopping wood and farming wheat and other such mundane tasks, just to momentarily escape the remorseless tedium and experience the true joys of Minecraftia, building, caving and adventuring into the beautiful uncharted abundance",
"booklet.actuallyadditions.chapter.intro.text.2": "<i>of the world. Yet no sooner has one immersed oneself in this creative enterprise than the inconveniences return, like millions of furious bees pestering, stinging, swarming all over you until the game ceases to be enjoyable, and you are driven away from it forever. To that end, a certain Ellpeck has created this Actual Addition to the world of Minecraft, that will allow the player to better engage with the core experiences of the game- building and adventuring- by automating and streamlining the monotony that",
"booklet.actuallyadditions.chapter.intro.text.3": "<i>is grinding in Minecraft. Therefore, Ellpeck humbly presents to you this Actually Additions Manual, that shall teach you the ways of this modification and, ultimately, allow you to transcend inconvenience and attain enlightenment. <r><n><n> ~by <imp>Tulkas<r>",
"booklet.actuallyadditions.chapter.intro.text.1": "<i>For too long have the people of Minecraftia toiled under a relentless whip. A whip more hurtful and more injurious than that of any slave-master: inconvenience. Aye, the thousand million inconveniences that make up the grind, that force players to waste hours- nay, days!- chopping wood and farming wheat and other such mundane tasks,",
"booklet.actuallyadditions.chapter.intro.text.2": "<i>just to momentarily escape the remorseless tedium and experience the true joys of Minecraftia, building, caving and adventuring into the beautiful uncharted abundance of the world. Yet no sooner has one immersed oneself in this creative enterprise than the inconveniences return, like millions of furious bees pestering, stinging, swarming all over you until the game ceases to be enjoyable, and you are driven away from it forever.",
"booklet.actuallyadditions.chapter.intro.text.3": "<i>To that end, a certain Ellpeck has created this Actual Addition to the world of Minecraft, that will allow the player to better engage with the core experiences of the game- building and adventuring- by automating and streamlining the monotony that is grinding in Minecraft. Therefore, Ellpeck humbly presents to you this Actually Additions Manual, that shall teach you the ways of this modification and, ultimately,",
"booklet.actuallyadditions.chapter.intro.text.4": "<i>allow you to transcend inconvenience and attain enlightenment. <r><n><n> ~by <imp>Tulkas<r>",
"booklet.actuallyadditions.chapter.craftingIngs": "Crafting Ingredients",
"booklet.actuallyadditions.chapter.craftingIngs.text.1": "<imp>Actually Additions<r> has lots of items that use certain <imp>basic crafting items<r> to be crafted. This chapter has all of these basic items <imp>grouped up<r> so that you can see all of them at once.",
"booklet.actuallyadditions.chapter.quartz": "Black Quartz",
@ -846,9 +847,9 @@
"booklet.actuallyadditions.chapter.blackLotus.text.1": "Think of this: <n>You need to craft <imp>black wool<r>, <imp>black clay<r> or anything else that <imp>needs black dye<r> but you are just guilty about killing so many <imp>innocent squids<r>? <n>Well, the <item>Black Lotus<r> is exactly the thing you need! <n>Just look around <imp>in the wild<r> a bit, and you will find one, then being able to craft some <item>Black Dye<r> that can be used <imp>instead of Ink Sacs<r> so that you don't need to kill poor squids and L any longer.",
"booklet.actuallyadditions.chapter.blackLotus.text.2": "<i>Do the lotus pose",
"booklet.actuallyadditions.chapter.crystals": "Crystals and Reconstructor",
"booklet.actuallyadditions.chapter.crystals.text.1": "The <item>Atomic Reconstructor<r> is used to craft <item>Crystals<r>, which are the main crafting ingredient in most items from <imp>Actually Additions<r>. <n>Upon being supplied with power, it shoots out a Laser. <tifisgrin>When the Laser hits a block<r>, it will convert all surrounding items and blocks, provided they can be converted. <n>When shooting a laser, it uses <imp><rf> CF<r>, but additional rates vary depending on the conversion.",
"booklet.actuallyadditions.chapter.crystals.text.2": "There are various <item>Lenses<r> that can be attached to the Reconstructor that don't all follow the default behavior of the Reconstructor and are able to do some neat things. <n>See the <imp>Reconstruction section<r> in the booklet <imp>for more information<r>. <n><n>When right-clicking the Reconstructor with a <item>Redstone Torch<r> in hand, it will change between a mode where it <imp>gets deactivated by Redstone<r> and a mode where it <imp>responds to pulses<r>.",
"booklet.actuallyadditions.chapter.crystals.text.3": "It should be noted that any recipes listed without information about Lenses <imp>don't use one<r>. <n><i>I thought that was obvious.",
"booklet.actuallyadditions.chapter.crystals.text.1": "The <item>Atomic Reconstructor<r> is used to craft <item>Crystals<r>, which are the main crafting ingredient in most items from <imp>Actually Additions<r>. <n>Upon being supplied with power, it shoots out a Laser. <tifisgrin>When the Laser hits a block<r>, it will convert all surrounding items and blocks, provided they can be converted.",
"booklet.actuallyadditions.chapter.crystals.text.2": "When shooting a laser, it uses <imp>1000 CF<r>, but additional rates vary depending on the conversion. <n>There are various <item>Lenses<r> that can be attached to the Reconstructor that don't all follow the default behavior of the Reconstructor and are able to do some neat things. <n>See the <imp>Reconstruction section<r> in the booklet <imp>for more information<r>.",
"booklet.actuallyadditions.chapter.crystals.text.3": "When right-clicking the Reconstructor with a <item>Redstone Torch<r> in hand, it will change between a mode where it <imp>gets deactivated by Redstone<r> and a mode where it <imp>responds to pulses<r>. It should be noted that any recipes listed without information about Lenses <imp>don't use one<r>. <n><i>I thought that was obvious.",
"booklet.actuallyadditions.chapter.crystals.text.5": "When you have crafted a couple of items, you might want to find a way to <imp>automate this<r>. <n>There is a very simple way to do accomplish this: <n>Place the <item>Atomic Reconstructor<r> down facing into a <item>Precision Dropper<r> (to find it, look it up in the <imp>All Items<r> Entry!). <n>Next, place a <item>Ranged Collector<r> in the area that has the converted items set as a whitelist. <n>Now you can just chuck your raw materials into the Dropper to convert them!",
"booklet.actuallyadditions.chapter.crystals.text.6": "<n><n><n><i>Molecular Transformilator",
"booklet.actuallyadditions.chapter.book_tutorial": "Intro to the Manual",
@ -969,9 +970,9 @@
"booklet.actuallyadditions.chapter.website": "The Author's Website",
"booklet.actuallyadditions.chapter.website.text.1": "On the topic of self-advertisement, if you're interested in <imp>any of the other stuff<r> I, <item>Ellpeck<r>, the author of this mod, do, you can go check out my <imp>website<r> by clicking the button below. <n>On there, you will find links to all of the social medias I use, an FAQ, and information about Minecraft Mods and other stuff I make!",
"booklet.actuallyadditions.chapter.website.button.1": "View the Website",
"booklet.actuallyadditions.chapter.engineerHouse": "A visit to the Engineers",
"booklet.actuallyadditions.chapter.engineerHouse.text.1": "If you want to know how to start, you can check out what the <imp>Engineers<r> are up to. <n>They are two friendly <imp>villagers<r> that sell you various goods: One is the <item>Crystallizer<r>, who will exchange <imp>Emeralds and Crystals<r> with you, and the <item>Engineer<r> will trade <imp>various machines<r> with you! <n>On the next page, you can see the <imp>house<r> they live in - which is also worth checking out! But be careful, the <imp>machines inside the house<r> are a little more <imp>fragile<r>, meaning they will shatter once you try to break them.",
"booklet.actuallyadditions.chapter.engineerHouse.text.2": "<i> Machines Primus",
"booklet.actuallyadditions.chapter.engineer_house": "A visit to the Engineers",
"booklet.actuallyadditions.chapter.engineer_house.text.1": "If you want to know how to start, you can check out what the <imp>Engineers<r> are up to. <n>They are two friendly <imp>villagers<r> that sell you various goods: One is the <item>Crystallizer<r>, who will exchange <imp>Emeralds and Crystals<r> with you, and the <item>Engineer<r> will trade <imp>various machines<r> with you! <n>On the next page, you can see the <imp>house<r> they live in - which is also worth checking out! But be careful, the <imp>machines inside the house<r> are a little more <imp>fragile<r>, meaning they will shatter once you try to break them.",
"booklet.actuallyadditions.chapter.engineer_house.text.2": "<i> Machines Primus",
"booklet.actuallyadditions.chapter.batteryBox": "Battery Box",
"booklet.actuallyadditions.chapter.batteryBox.text.1": "The <item>Battery Box<r> is a great way to <imp>store your power<r>. However, for it to be able to <imp>use power<r>, you have to <imp>right-click<r> a <item>Battery<r> onto it. It will then be able to store energy on the battery itself. <n><n>If you set the battery to <imp>discharge mode<r> via <imp>sneak-right-clicking it<r> or by applying a <imp>redstone pulse<r> to the <item>Battery Box<r>, it will try to spread the power it receives equally to <imp>up to 15 adjacent<r> <item>Battery Boxes<r>.",
"booklet.actuallyadditions.chapter.laserUpgradeInvisibility": "Modifier: Invisibility",

View file

@ -10,7 +10,7 @@
"tag": "forge:stone"
},
"result": {
"item": "mekanism:florite_ore"
"item": "mekanism:fluorite_ore"
},
"weight": 1000
}