One mechanical arm's trash is another mechanical arm's treasure

- Fix arms not being able to place more than one item into a composter
- Add COMPOSTABLE item attribute
- Tweak BLASTABLE attribute's descriptions
This commit is contained in:
PepperCode1 2022-09-07 18:34:43 -07:00
parent 3e89d9a878
commit dfe13d4ad7
21 changed files with 104 additions and 54 deletions

View file

@ -559,23 +559,23 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
f85edc574ee6de0de7693ffb031266643db6724a assets/create/lang/en_ud.json
b093292a09f18cce236ddb4ab0461891c5a70fe6 assets/create/lang/en_us.json
603af7f8a80b09da7ef5765f2aa863bbef1fc8ea assets/create/lang/unfinished/de_de.json
48858781b80b77a0d00b6fab733482ae4a9115fc assets/create/lang/unfinished/es_cl.json
ee47168049448ffa0959210d8f06b8f4b7219c85 assets/create/lang/unfinished/es_es.json
8fd4488ce0579f7b71a7cf20fe5556cdbb515834 assets/create/lang/unfinished/fr_fr.json
d4266c22c1265a2ef0784a13b223e4bb17ec11d0 assets/create/lang/unfinished/it_it.json
6578c40b206d61ac0aad1311d02c9bdbcd5f9d45 assets/create/lang/unfinished/ja_jp.json
f642160ce3c6ffe0ded12c7e05a15cb6536c4def assets/create/lang/unfinished/ko_kr.json
fdc3bda8618e963b6023af13caa0050f48ba0c26 assets/create/lang/unfinished/nl_nl.json
c498bb7eb6f030b7b4934882e8bfc418dd8f6174 assets/create/lang/unfinished/pl_pl.json
b9e51c59ae50ae274d0c56f60803d8a397524547 assets/create/lang/unfinished/pt_br.json
2b1ecada0e99852d604fd718e6ef87dbaff180e6 assets/create/lang/unfinished/pt_pt.json
71d01c97da2fd3c15576fb183871833b272174bf assets/create/lang/unfinished/ro_ro.json
6be78dc74952189c50f70df3182c3614cd49fdec assets/create/lang/unfinished/ru_ru.json
573a499be537300fb93d254b45923de80978d434 assets/create/lang/unfinished/uk_ua.json
2e6e637071b2ea70de178c77fe8b85544cc89a6b assets/create/lang/unfinished/zh_cn.json
5ec18f7aee828e35dcf76d491b26d76fc81b010e assets/create/lang/unfinished/zh_tw.json
11fd391ac3015f4dace8138ab1ec423ee822c7b4 assets/create/lang/en_us.json
34ab109f0935b7d0a7dd306188e0bd3056a77f93 assets/create/lang/unfinished/de_de.json
b5487949ee53302706c15051157316bb60dfa070 assets/create/lang/unfinished/es_cl.json
6df40ff1c18bfb83a33bc17e4458feeeee058bf1 assets/create/lang/unfinished/es_es.json
bca24c29adf91e0ee09db39783c59fac843acb46 assets/create/lang/unfinished/fr_fr.json
d7b53a16d03be2f854dfba1e90e2a149c2abecbd assets/create/lang/unfinished/it_it.json
42a6713a509ecd676e7eae6e6492da1e20e79102 assets/create/lang/unfinished/ja_jp.json
38e01a060e0e468a51b1ca4f0bcbec203837ce04 assets/create/lang/unfinished/ko_kr.json
83d812a1003fa3f25a3c28bbf54bf93f583c594a assets/create/lang/unfinished/nl_nl.json
c8c60fe2405f37cce7309326fb62cdb9aa1b49ff assets/create/lang/unfinished/pl_pl.json
11b3809e9c4c3c61687f7789979fdbf2332fd6a4 assets/create/lang/unfinished/pt_br.json
dd52b8df6ea92c1218e398197a1cedae066b4e0e assets/create/lang/unfinished/pt_pt.json
954a947034232204bd415e4bfb6c59a3a448b604 assets/create/lang/unfinished/ro_ro.json
54a92b2d667b55675c694904752760b594ab1424 assets/create/lang/unfinished/ru_ru.json
2f084cc7b66fe4ea82f5ac3338a1245caf67c54d assets/create/lang/unfinished/uk_ua.json
82490ac29a0c35c07cde11c340634bf8b416b6a3 assets/create/lang/unfinished/zh_cn.json
426b06805f08ef3fed15f404e9637b2d7082d660 assets/create/lang/unfinished/zh_tw.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json

View file

@ -1257,8 +1257,10 @@
"create.item_attributes.smeltable.inverted": "cannot be Smelted",
"create.item_attributes.smokable": "can be Smoked",
"create.item_attributes.smokable.inverted": "cannot be Smoked",
"create.item_attributes.blastable": "is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "is not smeltable in Blast Furnace",
"create.item_attributes.blastable": "can be Smelted in a Blast Furnace",
"create.item_attributes.blastable.inverted": "cannot be Smelted in a Blast Furnace",
"create.item_attributes.compostable": "can be composted",
"create.item_attributes.compostable.inverted": "cannot be composted",
"create.item_attributes.shulker_level": "is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "is shulker not %1$s",
"create.item_attributes.shulker_level.full": "full",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 838",
"_": "Missing Localizations: 840",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "kann nicht geräuchert werden",
"create.item_attributes.blastable": "ist im Schmelzofen schmelzbar",
"create.item_attributes.blastable.inverted": "ist nicht im Schmelzofen schmelzbar",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "ist Shulker %1$s",
"create.item_attributes.shulker_level.inverted": "ist Shulker nicht %1$s",
"create.item_attributes.shulker_level.full": "voll",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 984",
"_": "Missing Localizations: 986",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "no puede ser Ahumado",
"create.item_attributes.blastable": "puede ser cocinado en un Alto Horno",
"create.item_attributes.blastable.inverted": "no puede ser cocinado en un Alto Horno",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "es un shulker %1$s",
"create.item_attributes.shulker_level.inverted": "no es un shulker %1$s",
"create.item_attributes.shulker_level.full": "lleno",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 4",
"_": "Missing Localizations: 6",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "no puede ser ahumado",
"create.item_attributes.blastable": "es fundible en el alto horno",
"create.item_attributes.blastable.inverted": "no es fundible en el alto horno",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "es shulker %1$s",
"create.item_attributes.shulker_level.inverted": "no es shulker %1$s",
"create.item_attributes.shulker_level.full": "lleno",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2135",
"_": "Missing Localizations: 2137",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "ne peut pas être fumé",
"create.item_attributes.blastable": "est fondable dans un Haut fourneau",
"create.item_attributes.blastable.inverted": "n'est pas fondable dans un Haut fourneau",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 4",
"_": "Missing Localizations: 6",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "non può essere affumicato",
"create.item_attributes.blastable": "è fondibile in un forno fusorio",
"create.item_attributes.blastable.inverted": "non è fondibile in un forno fusorio",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "è uno shulker %1$s",
"create.item_attributes.shulker_level.inverted": "non è uno shulker %1$s",
"create.item_attributes.shulker_level.full": "pieno",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 0",
"_": "Missing Localizations: 2",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "燻製器で調理できないか",
"create.item_attributes.blastable": "溶鉱炉で精錬できるかか",
"create.item_attributes.blastable.inverted": "溶鉱炉で精錬できないか",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "%1$sシュルカーか",
"create.item_attributes.shulker_level.inverted": "%1$sシュルカーでないか",
"create.item_attributes.shulker_level.full": "満杯の",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 4",
"_": "Missing Localizations: 6",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "훈연될 수 없음",
"create.item_attributes.blastable": "용광로에 녹일 수 있음",
"create.item_attributes.blastable.inverted": "용광로에 녹일 수 없음",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "셜커가 %1$s있음",
"create.item_attributes.shulker_level.inverted": "셜커가 %1$s있지 않음",
"create.item_attributes.shulker_level.full": "가득 차",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2483",
"_": "Missing Localizations: 2485",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1258,8 +1258,10 @@
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.blastable": "UNLOCALIZED: can be Smelted in a Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: cannot be Smelted in a Blast Furnace",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 8",
"_": "Missing Localizations: 10",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "nie może być wędzony",
"create.item_attributes.blastable": "może być stopiony w piecu hutniczym",
"create.item_attributes.blastable.inverted": "nie może być stopiony w piecu hutniczym",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "jest %1$s",
"create.item_attributes.shulker_level.inverted": "nie jest %1$s",
"create.item_attributes.shulker_level.full": "pełna",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1327",
"_": "Missing Localizations: 1329",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "Não pode ser defumado",
"create.item_attributes.blastable": "È fundível no alto-forno",
"create.item_attributes.blastable.inverted": "Não é fundível no alto-forno",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "O shulker é %1$s",
"create.item_attributes.shulker_level.inverted": "O shulker não é %1$s",
"create.item_attributes.shulker_level.full": "Cheio",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2192",
"_": "Missing Localizations: 2194",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1258,8 +1258,10 @@
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.blastable": "UNLOCALIZED: can be Smelted in a Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: cannot be Smelted in a Blast Furnace",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 651",
"_": "Missing Localizations: 653",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "nu poate fi Afumat",
"create.item_attributes.blastable": "poate fi topit în Furnal",
"create.item_attributes.blastable.inverted": "nu poate fi topit în Furnal",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "este shulkerul %1$s",
"create.item_attributes.shulker_level.inverted": "nu este shulkerul %1$s",
"create.item_attributes.shulker_level.full": "plin",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 0",
"_": "Missing Localizations: 2",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "нельзя прокоптить",
"create.item_attributes.blastable": "плавится в доменной печи",
"create.item_attributes.blastable.inverted": "не плавится в доменной печи",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "шалкер %1$s",
"create.item_attributes.shulker_level.inverted": "шалкер не %1$s",
"create.item_attributes.shulker_level.full": "полный",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 982",
"_": "Missing Localizations: 984",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "не можна Коптити",
"create.item_attributes.blastable": "плавиться в Плавильній печі",
"create.item_attributes.blastable.inverted": "не плавиться в Плавильній печі",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "шалкер %1$s",
"create.item_attributes.shulker_level.inverted": "шалкер не %1$s",
"create.item_attributes.shulker_level.full": "повний",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 0",
"_": "Missing Localizations: 2",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "不可被烟熏",
"create.item_attributes.blastable": "可被高炉冶炼",
"create.item_attributes.blastable.inverted": "不可被高炉冶炼",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "潜影盒是%1$s的",
"create.item_attributes.shulker_level.inverted": "潜影盒不是%1$s的",
"create.item_attributes.shulker_level.full": "满",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 4",
"_": "Missing Localizations: 6",
"_": "->------------------------] Game Elements [------------------------<-",
@ -1260,6 +1260,8 @@
"create.item_attributes.smokable.inverted": "不可被煙熏",
"create.item_attributes.blastable": "可被高爐融煉",
"create.item_attributes.blastable.inverted": "不可被高爐融煉",
"create.item_attributes.compostable": "UNLOCALIZED: can be composted",
"create.item_attributes.compostable.inverted": "UNLOCALIZED: cannot be composted",
"create.item_attributes.shulker_level": "界伏盒是 %1$s",
"create.item_attributes.shulker_level.inverted": "界伏盒不是 %1$s",
"create.item_attributes.shulker_level.full": "滿的",

View file

@ -55,9 +55,8 @@ import net.minecraft.world.level.block.entity.JukeboxBlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.wrapper.SidedInvWrapper;
public class AllArmInteractionPointTypes {
@ -605,16 +604,29 @@ public class AllArmInteractionPointTypes {
@Nullable
@Override
protected IItemHandler getHandler() {
if (!cachedHandler.isPresent()) {
cachedHandler = LazyOptional.of(() -> {
ComposterBlock composterBlock = (ComposterBlock) Blocks.COMPOSTER;
WorldlyContainer container = composterBlock.getContainer(cachedState, level, pos);
SidedInvWrapper insertionHandler = new SidedInvWrapper(container, Direction.UP);
SidedInvWrapper extractionHandler = new SidedInvWrapper(container, Direction.DOWN);
return new CombinedInvWrapper(insertionHandler, extractionHandler);
});
}
return cachedHandler.orElse(null);
return null;
}
protected WorldlyContainer getContainer() {
ComposterBlock composterBlock = (ComposterBlock) Blocks.COMPOSTER;
return composterBlock.getContainer(cachedState, level, pos);
}
@Override
public ItemStack insert(ItemStack stack, boolean simulate) {
IItemHandler handler = new SidedInvWrapper(getContainer(), Direction.UP);
return ItemHandlerHelper.insertItem(handler, stack, simulate);
}
@Override
public ItemStack extract(int slot, int amount, boolean simulate) {
IItemHandler handler = new SidedInvWrapper(getContainer(), Direction.DOWN);
return handler.extractItem(slot, amount, simulate);
}
@Override
public int getSlotCount() {
return 2;
}
}

View file

@ -42,6 +42,7 @@ import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.ComposterBlock;
import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@ -148,7 +149,8 @@ public interface ItemAttribute {
|| testRecipe(s, w, AllRecipeTypes.MILLING.getType())),
SMELTABLE((s, w) -> testRecipe(s, w, RecipeType.SMELTING)),
SMOKABLE((s, w) -> testRecipe(s, w, RecipeType.SMOKING)),
BLASTABLE((s, w) -> testRecipe(s, w, RecipeType.BLASTING));
BLASTABLE((s, w) -> testRecipe(s, w, RecipeType.BLASTING)),
COMPOSTABLE(s -> ComposterBlock.COMPOSTABLES.containsKey(s.getItem()));
private static final RecipeWrapper RECIPE_WRAPPER = new RecipeWrapper(new ItemStackHandler(1));
private Predicate<ItemStack> test;

View file

@ -414,8 +414,10 @@
"create.item_attributes.smeltable.inverted": "cannot be Smelted",
"create.item_attributes.smokable": "can be Smoked",
"create.item_attributes.smokable.inverted": "cannot be Smoked",
"create.item_attributes.blastable": "is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "is not smeltable in Blast Furnace",
"create.item_attributes.blastable": "can be Smelted in a Blast Furnace",
"create.item_attributes.blastable.inverted": "cannot be Smelted in a Blast Furnace",
"create.item_attributes.compostable": "can be composted",
"create.item_attributes.compostable.inverted": "cannot be composted",
"create.item_attributes.shulker_level": "is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "is shulker not %1$s",