pala M-palaforge: recyclage usure + gate mineur 14 (wiki Palaforge)
This commit is contained in:
@@ -21,7 +21,8 @@ public final class PalaBlockEntities {
|
||||
MACHINE = Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE,
|
||||
Identifier.fromNamespaceAndPath("pala", "machine"),
|
||||
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,
|
||||
Identifier.fromNamespaceAndPath("pala", "grinder"),
|
||||
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 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"))));
|
||||
// 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_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()));
|
||||
|
||||
@@ -177,6 +177,7 @@ public final class PalaTabs {
|
||||
output.accept(PalaBlocks.FIKUTSI_STAGE3);
|
||||
output.accept(PalaBlocks.FINDIUM_ORE);
|
||||
output.accept(PalaBlocks.FINDIUM_ORE_BLOCK);
|
||||
output.accept(PalaBlocks.PALAFORGE);
|
||||
output.accept(PalaBlocks.GRINDER_BLOCK);
|
||||
output.accept(PalaBlocks.GRINDER_CASING);
|
||||
output.accept(PalaBlocks.GRINDER_FRAME);
|
||||
|
||||
@@ -133,7 +133,10 @@ public final class PalaConfig {
|
||||
"pala:trixium_ore", "pala:trixium_gem",
|
||||
"pala:findium_ore", "pala:findium_gem"));
|
||||
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();
|
||||
|
||||
|
||||
@@ -62,6 +62,14 @@ public class PalaMachineBlock extends Block implements EntityBlock {
|
||||
+ PalaJobs.levelOf(sp, "fermier") + ")."));
|
||||
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) {
|
||||
player.openMenu(provider);
|
||||
}
|
||||
|
||||
@@ -58,9 +58,15 @@ public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider
|
||||
return getBlockState().is(PalaBlocks.PALADIUM_CRUSHER);
|
||||
}
|
||||
|
||||
public boolean isPalaforge() {
|
||||
return getBlockState().is(PalaBlocks.PALAFORGE);
|
||||
}
|
||||
|
||||
public void serverTick() {
|
||||
if (isCrusher()) {
|
||||
crusherTick();
|
||||
} else if (isPalaforge()) {
|
||||
palaforgeTick();
|
||||
} else {
|
||||
furnaceTick();
|
||||
}
|
||||
@@ -128,6 +134,130 @@ public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider
|
||||
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) {
|
||||
return BuiltInRegistries.ITEM.getKey(stack.getItem()).toString();
|
||||
}
|
||||
@@ -194,6 +324,9 @@ public class PalaMachineBlockEntity extends BlockEntity implements MenuProvider
|
||||
|
||||
@Override
|
||||
public Component getDisplayName() {
|
||||
if (isPalaforge()) {
|
||||
return Component.translatable("container.pala.palaforge");
|
||||
}
|
||||
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_yellow": "Yellow 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user