pala M-palaforge: recyclage usure + gate mineur 14 (wiki Palaforge)
This commit is contained in:
@@ -591,6 +591,11 @@ avant M4 (TODO:crafts-machines).
|
|||||||
vert = +50 000 XP fermier, rainbow = +50 000 aux 4 metiers (wiki VERIFIE). Autres couleurs
|
vert = +50 000 XP fermier, rainbow = +50 000 aux 4 metiers (wiki VERIFIE). Autres couleurs
|
||||||
= mapping non publie (TODO:mapping-bonbons, sans effet). VERIFIE : build SUCCESSFUL, boot
|
= mapping non publie (TODO:mapping-bonbons, sans effet). VERIFIE : build SUCCESSFUL, boot
|
||||||
Done, 0 erreur, lang 228 cles. UNVERIFIED en jeu.
|
Done, 0 erreur, lang 228 cles. UNVERIFIED en jeu.
|
||||||
|
- M-palaforge LIVRE 2026-10-19 ~03:55 : bloc + BE partagee (3e mode) + gate mineur 14 +
|
||||||
|
table fonte wiki §3.2 (31 items, ratio floor usure) + fuels bois (+buche/planches/baton,
|
||||||
|
lave exclue : seau non rendu) + craft (1 findium + 4 furnaces + 4 briques, positions
|
||||||
|
UNVERIFIED) + assets/lang 231. ECART : green non fondu (pas de colonne wiki). VERIFIE :
|
||||||
|
build SUCCESSFUL, boot Done, 0 erreur. UNVERIFIED en jeu.
|
||||||
- M-afk LIVRE 2026-10-19 ~03:50 : kick AFK (wiki reglement/grades) : inactivite pos+rot
|
- M-afk LIVRE 2026-10-19 ~03:50 : kick AFK (wiki reglement/grades) : inactivite pos+rot
|
||||||
controlee chaque seconde, limite afkKickMinutes (defaut 10), bypass pala.afk.bypass.
|
controlee chaque seconde, limite afkKickMinutes (defaut 10), bypass pala.afk.bypass.
|
||||||
Lecon : authlib absent du compileClasspath (getGameProfile inutilisable) -> PermissionSet
|
Lecon : authlib absent du compileClasspath (getGameProfile inutilisable) -> PermissionSet
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ public final class PalaBlockEntities {
|
|||||||
MACHINE = Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE,
|
MACHINE = Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE,
|
||||||
Identifier.fromNamespaceAndPath("pala", "machine"),
|
Identifier.fromNamespaceAndPath("pala", "machine"),
|
||||||
new BlockEntityType<>(PalaMachineBlockEntity::new,
|
new BlockEntityType<>(PalaMachineBlockEntity::new,
|
||||||
Set.of(PalaBlocks.PALADIUM_CRUSHER, PalaBlocks.PALADIUM_FURNACE)));
|
Set.of(PalaBlocks.PALADIUM_CRUSHER, PalaBlocks.PALADIUM_FURNACE,
|
||||||
|
PalaBlocks.PALAFORGE)));
|
||||||
GRINDER = Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE,
|
GRINDER = Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE,
|
||||||
Identifier.fromNamespaceAndPath("pala", "grinder"),
|
Identifier.fromNamespaceAndPath("pala", "grinder"),
|
||||||
new BlockEntityType<>(PalaGrinderBlockEntity::new,
|
new BlockEntityType<>(PalaGrinderBlockEntity::new,
|
||||||
|
|||||||
@@ -65,6 +65,9 @@ public final class PalaBlocks {
|
|||||||
public static final Block ORANGE_BLUE_STAGE4 = register("orange_blue_stage4", new Block(BlockBehaviour.Properties.of().setId(blockId("orange_blue_stage4")).strength(0.0F, 0.0F).sound(SoundType.CROP).noCollision().instabreak()));
|
public static final Block ORANGE_BLUE_STAGE4 = register("orange_blue_stage4", new Block(BlockBehaviour.Properties.of().setId(blockId("orange_blue_stage4")).strength(0.0F, 0.0F).sound(SoundType.CROP).noCollision().instabreak()));
|
||||||
public static final Block PALADIUM_CRUSHER = register("paladium_crusher", new PalaMachineBlock(BlockBehaviour.Properties.of().setId(blockId("paladium_crusher"))));
|
public static final Block PALADIUM_CRUSHER = register("paladium_crusher", new PalaMachineBlock(BlockBehaviour.Properties.of().setId(blockId("paladium_crusher"))));
|
||||||
public static final Block PALADIUM_FURNACE = register("paladium_furnace", new PalaMachineBlock(BlockBehaviour.Properties.of().setId(blockId("paladium_furnace"))));
|
public static final Block PALADIUM_FURNACE = register("paladium_furnace", new PalaMachineBlock(BlockBehaviour.Properties.of().setId(blockId("paladium_furnace"))));
|
||||||
|
// M-palaforge (wiki Palaforge) : recyclage outils/armures -> lingots selon usure.
|
||||||
|
// Gate mineur 14, table wiki §3.2, tick dans la BE partagee.
|
||||||
|
public static final Block PALAFORGE = register("palaforge", new PalaMachineBlock(BlockBehaviour.Properties.of().setId(blockId("palaforge"))));
|
||||||
public static final Block PALADIUM_GREEN_ORE = register("paladium_green_ore", new Block(BlockBehaviour.Properties.of().setId(blockId("paladium_green_ore")).strength(5.5F, 9.0F).sound(SoundType.STONE).requiresCorrectToolForDrops()));
|
public static final Block PALADIUM_GREEN_ORE = register("paladium_green_ore", new Block(BlockBehaviour.Properties.of().setId(blockId("paladium_green_ore")).strength(5.5F, 9.0F).sound(SoundType.STONE).requiresCorrectToolForDrops()));
|
||||||
public static final Block PALADIUM_GREEN_ORE_BLOCK = register("paladium_green_ore_block", new Block(BlockBehaviour.Properties.of().setId(blockId("paladium_green_ore_block")).strength(5.0F, 10.0F).sound(SoundType.METAL).requiresCorrectToolForDrops()));
|
public static final Block PALADIUM_GREEN_ORE_BLOCK = register("paladium_green_ore_block", new Block(BlockBehaviour.Properties.of().setId(blockId("paladium_green_ore_block")).strength(5.0F, 10.0F).sound(SoundType.METAL).requiresCorrectToolForDrops()));
|
||||||
public static final Block PALADIUM_ORE = register("paladium_ore", new Block(BlockBehaviour.Properties.of().setId(blockId("paladium_ore")).strength(5.0F, 8.0F).sound(SoundType.STONE).requiresCorrectToolForDrops()));
|
public static final Block PALADIUM_ORE = register("paladium_ore", new Block(BlockBehaviour.Properties.of().setId(blockId("paladium_ore")).strength(5.0F, 8.0F).sound(SoundType.STONE).requiresCorrectToolForDrops()));
|
||||||
|
|||||||
@@ -177,6 +177,7 @@ public final class PalaTabs {
|
|||||||
output.accept(PalaBlocks.FIKUTSI_STAGE3);
|
output.accept(PalaBlocks.FIKUTSI_STAGE3);
|
||||||
output.accept(PalaBlocks.FINDIUM_ORE);
|
output.accept(PalaBlocks.FINDIUM_ORE);
|
||||||
output.accept(PalaBlocks.FINDIUM_ORE_BLOCK);
|
output.accept(PalaBlocks.FINDIUM_ORE_BLOCK);
|
||||||
|
output.accept(PalaBlocks.PALAFORGE);
|
||||||
output.accept(PalaBlocks.GRINDER_BLOCK);
|
output.accept(PalaBlocks.GRINDER_BLOCK);
|
||||||
output.accept(PalaBlocks.GRINDER_CASING);
|
output.accept(PalaBlocks.GRINDER_CASING);
|
||||||
output.accept(PalaBlocks.GRINDER_FRAME);
|
output.accept(PalaBlocks.GRINDER_FRAME);
|
||||||
|
|||||||
@@ -133,7 +133,10 @@ public final class PalaConfig {
|
|||||||
"pala:trixium_ore", "pala:trixium_gem",
|
"pala:trixium_ore", "pala:trixium_gem",
|
||||||
"pala:findium_ore", "pala:findium_gem"));
|
"pala:findium_ore", "pala:findium_gem"));
|
||||||
public java.util.List<String> furnaceFuels = new java.util.ArrayList<>(java.util.List.of(
|
public java.util.List<String> furnaceFuels = new java.util.ArrayList<>(java.util.List.of(
|
||||||
"minecraft:coal", "minecraft:charcoal"));
|
"minecraft:coal", "minecraft:charcoal",
|
||||||
|
// M-palaforge (wiki : "charbon, lave, bois, etc."). Lave exclue : le seau ne serait
|
||||||
|
// pas rendu (ECART documente). Bois = buche + planches + baton.
|
||||||
|
"minecraft:oak_log", "minecraft:oak_planks", "minecraft:stick"));
|
||||||
|
|
||||||
private static PalaConfig instance = new PalaConfig();
|
private static PalaConfig instance = new PalaConfig();
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,14 @@ public class PalaMachineBlock extends Block implements EntityBlock {
|
|||||||
+ PalaJobs.levelOf(sp, "fermier") + ")."));
|
+ PalaJobs.levelOf(sp, "fermier") + ")."));
|
||||||
return InteractionResult.FAIL;
|
return InteractionResult.FAIL;
|
||||||
}
|
}
|
||||||
|
// M-palaforge (wiki : "disponible qu'a partir du niveau 14 mineur").
|
||||||
|
if (!level.isClientSide() && state.is(PalaBlocks.PALAFORGE)
|
||||||
|
&& player instanceof ServerPlayer sp2 && PalaJobs.levelOf(sp2, "mineur") < 14) {
|
||||||
|
sp2.sendSystemMessage(Component.literal(
|
||||||
|
"§cPalaforge verrouillee : mineur niveau 14 requis (actuel : "
|
||||||
|
+ PalaJobs.levelOf(sp2, "mineur") + ")."));
|
||||||
|
return InteractionResult.FAIL;
|
||||||
|
}
|
||||||
if (!level.isClientSide() && level.getBlockEntity(pos) instanceof MenuProvider provider) {
|
if (!level.isClientSide() && level.getBlockEntity(pos) instanceof MenuProvider provider) {
|
||||||
player.openMenu(provider);
|
player.openMenu(provider);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,9 +58,15 @@ public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider
|
|||||||
return getBlockState().is(PalaBlocks.PALADIUM_CRUSHER);
|
return getBlockState().is(PalaBlocks.PALADIUM_CRUSHER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isPalaforge() {
|
||||||
|
return getBlockState().is(PalaBlocks.PALAFORGE);
|
||||||
|
}
|
||||||
|
|
||||||
public void serverTick() {
|
public void serverTick() {
|
||||||
if (isCrusher()) {
|
if (isCrusher()) {
|
||||||
crusherTick();
|
crusherTick();
|
||||||
|
} else if (isPalaforge()) {
|
||||||
|
palaforgeTick();
|
||||||
} else {
|
} else {
|
||||||
furnaceTick();
|
furnaceTick();
|
||||||
}
|
}
|
||||||
@@ -128,6 +134,130 @@ public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider
|
|||||||
return result == null ? ItemStack.EMPTY : new ItemStack(result);
|
return result == null ? ItemStack.EMPTY : new ItemStack(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// M-palaforge (wiki §3.2, table VERIFIEE) : outil/armure -> [lingot, max].
|
||||||
|
// Hammers/fastswords/broadswords exclus (wiki), green exclu (pas de colonne wiki),
|
||||||
|
// pelle endium = Ø (exclue). Ratio usure : floor(max * restant/max), ex. 8 x 2/3 = 5.
|
||||||
|
// UNVERIFIED : le cas limite 0 (item presque casse) donne 0 (rien).
|
||||||
|
private static final java.util.Map<Item, Item> MELT_LINGOT = new java.util.HashMap<>();
|
||||||
|
private static final java.util.Map<Item, Integer> MELT_MAX = new java.util.HashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.AMETHYST_HELMET,
|
||||||
|
fr.surviepote.pala.PalaItems.AMETHYST_INGOT, 4);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.AMETHYST_CHESTPLATE,
|
||||||
|
fr.surviepote.pala.PalaItems.AMETHYST_INGOT, 7);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.AMETHYST_LEGGINGS,
|
||||||
|
fr.surviepote.pala.PalaItems.AMETHYST_INGOT, 6);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.AMETHYST_BOOTS,
|
||||||
|
fr.surviepote.pala.PalaItems.AMETHYST_INGOT, 3);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.AMETHYST_SWORD,
|
||||||
|
fr.surviepote.pala.PalaItems.AMETHYST_INGOT, 2);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.AMETHYST_AXE,
|
||||||
|
fr.surviepote.pala.PalaItems.AMETHYST_INGOT, 2);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.AMETHYST_SHOVEL,
|
||||||
|
fr.surviepote.pala.PalaItems.AMETHYST_INGOT, 1);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.AMETHYST_PICKAXE,
|
||||||
|
fr.surviepote.pala.PalaItems.AMETHYST_INGOT, 2);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.TITANE_HELMET,
|
||||||
|
fr.surviepote.pala.PalaItems.TITANE_INGOT, 5);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.TITANE_CHESTPLATE,
|
||||||
|
fr.surviepote.pala.PalaItems.TITANE_INGOT, 8);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.TITANE_LEGGINGS,
|
||||||
|
fr.surviepote.pala.PalaItems.TITANE_INGOT, 7);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.TITANE_BOOTS,
|
||||||
|
fr.surviepote.pala.PalaItems.TITANE_INGOT, 4);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.TITANE_SWORD,
|
||||||
|
fr.surviepote.pala.PalaItems.TITANE_INGOT, 2);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.TITANE_AXE,
|
||||||
|
fr.surviepote.pala.PalaItems.TITANE_INGOT, 2);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.TITANE_SHOVEL,
|
||||||
|
fr.surviepote.pala.PalaItems.TITANE_INGOT, 1);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.TITANE_PICKAXE,
|
||||||
|
fr.surviepote.pala.PalaItems.TITANE_INGOT, 2);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.PALADIUM_HELMET,
|
||||||
|
fr.surviepote.pala.PalaItems.PALADIUM_INGOT, 4);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.PALADIUM_CHESTPLATE,
|
||||||
|
fr.surviepote.pala.PalaItems.PALADIUM_INGOT, 7);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.PALADIUM_LEGGINGS,
|
||||||
|
fr.surviepote.pala.PalaItems.PALADIUM_INGOT, 6);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.PALADIUM_BOOTS,
|
||||||
|
fr.surviepote.pala.PalaItems.PALADIUM_INGOT, 3);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.PALADIUM_SWORD,
|
||||||
|
fr.surviepote.pala.PalaItems.PALADIUM_INGOT, 2);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.PALADIUM_AXE,
|
||||||
|
fr.surviepote.pala.PalaItems.PALADIUM_INGOT, 1);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.PALADIUM_SHOVEL,
|
||||||
|
fr.surviepote.pala.PalaItems.PALADIUM_INGOT, 1);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.PALADIUM_PICKAXE,
|
||||||
|
fr.surviepote.pala.PalaItems.PALADIUM_INGOT, 1);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.ENDIUM_HELMET,
|
||||||
|
fr.surviepote.pala.PalaItems.ENDIUM_INGOT, 4);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.ENDIUM_CHESTPLATE,
|
||||||
|
fr.surviepote.pala.PalaItems.ENDIUM_INGOT, 7);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.ENDIUM_LEGGINGS,
|
||||||
|
fr.surviepote.pala.PalaItems.ENDIUM_INGOT, 6);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.ENDIUM_BOOTS,
|
||||||
|
fr.surviepote.pala.PalaItems.ENDIUM_INGOT, 3);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.ENDIUM_SWORD,
|
||||||
|
fr.surviepote.pala.PalaItems.ENDIUM_INGOT, 2);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.ENDIUM_AXE,
|
||||||
|
fr.surviepote.pala.PalaItems.ENDIUM_INGOT, 1);
|
||||||
|
putMelt(fr.surviepote.pala.PalaItems.ENDIUM_PICKAXE,
|
||||||
|
fr.surviepote.pala.PalaItems.ENDIUM_INGOT, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void putMelt(Item gear, Item lingot, int max) {
|
||||||
|
MELT_LINGOT.put(gear, lingot);
|
||||||
|
MELT_MAX.put(gear, max);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void palaforgeTick() {
|
||||||
|
ItemStack input = inventory.getItem(0);
|
||||||
|
ItemStack fuel = inventory.getItem(1);
|
||||||
|
ItemStack output = inventory.getItem(2);
|
||||||
|
ItemStack result = meltResult(input);
|
||||||
|
boolean canCook = !result.isEmpty() && isFurnaceFuel(fuel)
|
||||||
|
&& (output.isEmpty() || (ItemStack.isSameItemSameComponents(output, result)
|
||||||
|
&& output.getCount() + result.getCount() <= output.getMaxStackSize()));
|
||||||
|
if (canCook) {
|
||||||
|
progress++;
|
||||||
|
if (progress >= COOK_TIME_FURNACE) {
|
||||||
|
progress = 0;
|
||||||
|
input.shrink(1);
|
||||||
|
fuel.shrink(1);
|
||||||
|
if (output.isEmpty()) {
|
||||||
|
inventory.setItem(2, result.copy());
|
||||||
|
} else {
|
||||||
|
output.grow(result.getCount());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setChanged();
|
||||||
|
} else if (progress != 0) {
|
||||||
|
progress = 0;
|
||||||
|
setChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ItemStack meltResult(ItemStack input) {
|
||||||
|
if (input.isEmpty() || !input.isDamageableItem()) {
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
Item lingot = MELT_LINGOT.get(input.getItem());
|
||||||
|
Integer max = MELT_MAX.get(input.getItem());
|
||||||
|
if (lingot == null || max == null) {
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
int maxDmg = input.getMaxDamage();
|
||||||
|
if (maxDmg <= 0) {
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
int count = (int) Math.floor((double) max * (maxDmg - input.getDamageValue()) / maxDmg);
|
||||||
|
if (count <= 0) {
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
return new ItemStack(lingot, count);
|
||||||
|
}
|
||||||
|
|
||||||
private static String itemId(ItemStack stack) {
|
private static String itemId(ItemStack stack) {
|
||||||
return BuiltInRegistries.ITEM.getKey(stack.getItem()).toString();
|
return BuiltInRegistries.ITEM.getKey(stack.getItem()).toString();
|
||||||
}
|
}
|
||||||
@@ -194,6 +324,9 @@ public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getDisplayName() {
|
public Component getDisplayName() {
|
||||||
|
if (isPalaforge()) {
|
||||||
|
return Component.translatable("container.pala.palaforge");
|
||||||
|
}
|
||||||
return Component.translatable(isCrusher() ? "container.pala.paladium_crusher" : "container.pala.paladium_furnace");
|
return Component.translatable(isCrusher() ? "container.pala.paladium_crusher" : "container.pala.paladium_furnace");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": {
|
||||||
|
"model": "pala:block/palaforge"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"model": {
|
||||||
|
"type": "minecraft:model",
|
||||||
|
"model": "pala:item/palaforge"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -226,5 +226,8 @@
|
|||||||
"item.pala.candy_pink": "Pink Candy",
|
"item.pala.candy_pink": "Pink Candy",
|
||||||
"item.pala.candy_yellow": "Yellow Candy",
|
"item.pala.candy_yellow": "Yellow Candy",
|
||||||
"item.pala.candy_rainbow": "Rainbow Candy",
|
"item.pala.candy_rainbow": "Rainbow Candy",
|
||||||
"item.pala.job_candy": "Job Candy"
|
"item.pala.job_candy": "Job Candy",
|
||||||
|
"block.pala.palaforge": "Palaforge",
|
||||||
|
"item.pala.palaforge": "Palaforge",
|
||||||
|
"container.pala.palaforge": "Palaforge"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:block/cube_all",
|
||||||
|
"textures": {
|
||||||
|
"all": "pala:block/palaforge_side"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"parent": "pala:block/palaforge"
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"category": "misc",
|
||||||
|
"pattern": [
|
||||||
|
"BFB",
|
||||||
|
"FDF",
|
||||||
|
"BFB"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"B": "minecraft:bricks",
|
||||||
|
"F": "pala:paladium_furnace",
|
||||||
|
"D": "pala:findium_gem"
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"id": "pala:palaforge",
|
||||||
|
"count": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
Reference in New Issue
Block a user