added ores, blocks, recipes, archifments

This commit is contained in:
Chipperfluff 2025-12-16 07:55:28 +01:00
parent ef0ad43351
commit d552b58276
47 changed files with 638 additions and 55 deletions

View File

@ -16,6 +16,14 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.GameRules;
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.world.gen.GenerationStep;
import net.Chipperfluff.chipi.advancement.ModCriteria;
public class ChipiMod implements ModInitializer {
public static final String MOD_ID = "chipi";
@ -31,6 +39,16 @@ public class ChipiMod implements ModInitializer {
ModBlocks.register();
ModItems.register();
ModCriteria.register();
BiomeModifications.addFeature(
BiomeSelectors.foundInOverworld(),
GenerationStep.Feature.UNDERGROUND_ORES,
RegistryKey.of(
RegistryKeys.PLACED_FEATURE,
new Identifier("chipi", "chipper_ore")
)
);
CommandRegistrationCallback.EVENT.register(
(dispatcher, registryAccess, environment) ->

View File

@ -0,0 +1,11 @@
package net.Chipperfluff.chipi.advancement;
import net.minecraft.advancement.criterion.Criteria;
public class ModCriteria {
public static final PortalActivatedTrigger PORTAL_ACTIVATED =
Criteria.register(new PortalActivatedTrigger());
public static void register() {}
}

View File

@ -0,0 +1,39 @@
package net.Chipperfluff.chipi.advancement;
import com.google.gson.JsonObject;
import net.minecraft.advancement.AdvancementCriterion;
import net.minecraft.advancement.criterion.AbstractCriterion;
import net.minecraft.advancement.criterion.CriterionConditions;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.ChipiMod;
public class PortalActivatedTrigger extends AbstractCriterion<PortalActivatedTrigger.Conditions> {
public static final Identifier ID =
new Identifier(ChipiMod.MOD_ID, "portal_activated");
@Override
public Identifier getId() {
return ID;
}
@Override
protected Conditions conditionsFromJson(
JsonObject obj,
net.minecraft.advancement.criterion.CriterionConditionsParser parser
) {
return new Conditions();
}
public void trigger(ServerPlayerEntity player) {
this.trigger(player, conditions -> true);
}
// ================= CONDITIONS =================
public static class Conditions extends CriterionConditions {
public Conditions() {
super(ID, null);
}
}
}

View File

@ -0,0 +1,39 @@
package net.Chipperfluff.chipi.advancement;
import com.google.gson.JsonObject;
import net.minecraft.advancement.AdvancementCriterion;
import net.minecraft.advancement.criterion.AbstractCriterion;
import net.minecraft.advancement.criterion.CriterionConditions;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.ChipiMod;
public class PortalDestroyedTrigger extends AbstractCriterion<PortalDestroyedTrigger.Conditions> {
public static final Identifier ID =
new Identifier(ChipiMod.MOD_ID, "portal_destroyed");
@Override
public Identifier getId() {
return ID;
}
@Override
protected Conditions conditionsFromJson(
JsonObject obj,
net.minecraft.advancement.criterion.CriterionConditionsParser parser
) {
return new Conditions();
}
public void trigger(ServerPlayerEntity player) {
this.trigger(player, conditions -> true);
}
// ================= CONDITIONS =================
public static class Conditions extends CriterionConditions {
public Conditions() {
super(ID, null);
}
}
}

View File

@ -18,7 +18,7 @@ import net.minecraft.world.World;
import net.minecraft.world.TeleportTarget;
import net.minecraft.network.packet.s2c.play.PositionFlag;
import java.util.EnumSet;
import net.Chipperfluff.chipi.advancement.ModCriteria;
public class ChipperPortalBlock extends Block {
@ -78,6 +78,7 @@ public class ChipperPortalBlock extends Block {
if (!player.isCreative()) {
return 0.0F; // impossible to break
}
ModCriteria.PORTAL_DESTROYED.trigger(player);
return super.calcBlockBreakingDelta(state, player, world, pos);
}
}

View File

@ -5,6 +5,7 @@ import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
import net.Chipperfluff.chipi.advancement.ModCriteria;
public class ChipperPortalShape {
@ -25,6 +26,7 @@ public class ChipperPortalShape {
ChipperPortalShape shape = new ChipperPortalShape(world, placedPos, axis);
if (shape.isValid()) {
shape.placePortal();
ModCriteria.PORTAL_ACTIVATED.trigger(player);
System.out.println("[CHIPI] portal created at " + placedPos + " axis=" + axis);
return true;
}

View File

@ -2,57 +2,66 @@ package net.Chipperfluff.chipi.block;
import net.minecraft.block.Block;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Blocks;
import net.minecraft.block.MapColor;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.ChipiMod;
import net.Chipperfluff.chipi.block.ChipperFrameBlock;
import net.Chipperfluff.chipi.block.ChipperPortalBlock;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.MapColor;
import net.Chipperfluff.chipi.ChipiMod;
public class ModBlocks {
public static final Block VOID_BLOCK = register(
"void_block",
public static final Block VOID_BLOCK = Registry.register(
Registries.BLOCK,
new Identifier(ChipiMod.MOD_ID, "void_block"),
new VoidBlock(
AbstractBlock.Settings.create()
.strength(-1.0F, 3600000.0F) // vanilla unbreakable values
.strength(-1.0F, 3600000.0F)
.mapColor(MapColor.BLACK)
.noCollision()
.dropsNothing()
)
);
public static final Block CHIPPER_FRAME =
register(
"chipper_frame",
public static final Block CHIPPER_FRAME = Registry.register(
Registries.BLOCK,
new Identifier(ChipiMod.MOD_ID, "chipper_frame"),
new ChipperFrameBlock(
FabricBlockSettings
.create()
FabricBlockSettings.create()
.strength(3.0f)
.requiresTool()
)
);
public static final Block CHIPPER_PORTAL = register(
"chipper_portal",
public static final Block CHIPPER_PORTAL = Registry.register(
Registries.BLOCK,
new Identifier(ChipiMod.MOD_ID, "chipper_portal"),
new ChipperPortalBlock(
FabricBlockSettings
.create()
FabricBlockSettings.create()
.noCollision()
.luminance(3)
.strength(-1.0f)
)
);
private static Block register(String name, Block block) {
return Registry.register(
public static final Block CHIPPER_ORE = Registry.register(
Registries.BLOCK,
new Identifier(ChipiMod.MOD_ID, name),
block
new Identifier(ChipiMod.MOD_ID, "chipper_ore"),
new Block(AbstractBlock.Settings
.copy(Blocks.IRON_ORE)
.requiresTool()
)
);
public static final Block CHIPPER_ALLOY_BLOCK = Registry.register(
Registries.BLOCK,
new Identifier(ChipiMod.MOD_ID, "chipper_alloy_block"),
new Block(AbstractBlock.Settings
.copy(Blocks.IRON_BLOCK)
.requiresTool()
)
);
}
public static void register() {}
}

View File

@ -5,33 +5,69 @@ import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.Chipperfluff.chipi.ChipiMod;
import net.Chipperfluff.chipi.block.ModBlocks;
public class ModItems {
public static final Item VOID_BLOCK = register(
"void_block",
new BlockItem(ModBlocks.VOID_BLOCK, new Item.Settings())
);
// ===== BLOCK ITEMS =====
public static final Item CHIPPER_FRAME = register(
"chipper_frame",
new BlockItem(ModBlocks.CHIPPER_FRAME, new Item.Settings())
);
public static final Item CHIPPER_PORTAL = register(
"chipper_portal",
new BlockItem(ModBlocks.CHIPPER_PORTAL, new Item.Settings())
);
private static Item register(String name, Item item) {
return Registry.register(
public static final Item VOID_BLOCK = Registry.register(
Registries.ITEM,
new Identifier(ChipiMod.MOD_ID, name),
item
new Identifier(ChipiMod.MOD_ID, "void_block"),
new BlockItem(ModBlocks.VOID_BLOCK, new FabricItemSettings())
);
public static final Item CHIPPER_FRAME = Registry.register(
Registries.ITEM,
new Identifier(ChipiMod.MOD_ID, "chipper_frame"),
new BlockItem(ModBlocks.CHIPPER_FRAME, new FabricItemSettings())
);
public static final Item CHIPPER_PORTAL = Registry.register(
Registries.ITEM,
new Identifier(ChipiMod.MOD_ID, "chipper_portal"),
new BlockItem(ModBlocks.CHIPPER_PORTAL, new FabricItemSettings())
);
public static final Item CHIPPER_ORE = Registry.register(
Registries.ITEM,
new Identifier(ChipiMod.MOD_ID, "chipper_ore"),
new BlockItem(ModBlocks.CHIPPER_ORE, new FabricItemSettings())
);
public static final Item CHIPPER_ALLOY_BLOCK = Registry.register(
Registries.ITEM,
new Identifier(ChipiMod.MOD_ID, "chipper_alloy_block"),
new BlockItem(ModBlocks.CHIPPER_ALLOY_BLOCK, new FabricItemSettings())
);
// ===== NORMAL ITEMS =====
public static final Item NUT = Registry.register(
Registries.ITEM,
new Identifier(ChipiMod.MOD_ID, "nut"),
new Item(new FabricItemSettings())
);
public static final Item RAW_CHIPPER_ORE = Registry.register(
Registries.ITEM,
new Identifier(ChipiMod.MOD_ID, "raw_chipper_ore"),
new Item(new FabricItemSettings())
);
public static final Item CHIPPER_INGOT = Registry.register(
Registries.ITEM,
new Identifier(ChipiMod.MOD_ID, "chipper_ingot"),
new Item(new FabricItemSettings())
);
public static final Item CHIPPER_ALLOY = Registry.register(
Registries.ITEM,
new Identifier(ChipiMod.MOD_ID, "chipper_alloy"),
new Item(new FabricItemSettings())
);
}
public static void register() {}
}

View File

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "chipi:block/chipper_alloy_block" }
}
}

View File

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "chipi:block/chipper_ore" }
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "chipi:block/chipper_alloy_block"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "chipi:block/chipper_ore"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "chipi:item/chipper_alloy"
}
}

View File

@ -0,0 +1,3 @@
{
"parent": "chipi:block/chipper_alloy_block"
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "chipi:item/chipper_ingot"
}
}

View File

@ -0,0 +1,3 @@
{
"parent": "chipi:block/chipper_ore"
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "chipi:item/nut"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "chipi:item/raw_chipper_ore"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 B

View File

@ -0,0 +1,17 @@
{
"parent": "chipi:progression/light_portal",
"display": {
"icon": { "item": "chipi:chipper_portal" },
"title": "What Have You Done",
"description": "Enter the Chipi Dimension",
"frame": "challenge"
},
"criteria": {
"enter": {
"trigger": "minecraft:changed_dimension",
"conditions": {
"to": "chipi:chipi_dimension"
}
}
}
}

View File

@ -0,0 +1,17 @@
{
"parent": "chipi:root",
"display": {
"icon": { "item": "chipi:nut" },
"title": "Deez Nuts",
"description": "Obtain a Nut",
"frame": "task"
},
"criteria": {
"nut": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [{ "items": ["chipi:nut"] }]
}
}
}
}

View File

@ -0,0 +1,17 @@
{
"parent": "chipi:root",
"display": {
"icon": { "item": "chipi:raw_chipper_ore" },
"title": "What's This?",
"description": "Obtain Raw Chipper Ore",
"frame": "task"
},
"criteria": {
"ore": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [{ "items": ["chipi:raw_chipper_ore"] }]
}
}
}
}

View File

@ -0,0 +1,17 @@
{
"parent": "chipi:progression/smelt_chipper_ore",
"display": {
"icon": { "item": "chipi:chipper_alloy" },
"title": "Questionable Chemistry",
"description": "Create Chipper Alloy",
"frame": "task"
},
"criteria": {
"alloy": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [{ "items": ["chipi:chipper_alloy"] }]
}
}
}
}

View File

@ -0,0 +1,17 @@
{
"parent": "chipi:progression/make_alloy",
"display": {
"icon": { "item": "chipi:chipper_alloy_block" },
"title": "Industrial Grade",
"description": "Craft a Chipper Alloy Block",
"frame": "task"
},
"criteria": {
"block": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [{ "items": ["chipi:chipper_alloy_block"] }]
}
}
}
}

View File

@ -0,0 +1,15 @@
{
"parent": "chipi:progression/activate_portal",
"display": {
"icon": { "item": "chipi:chipper_portal" },
"title": "You Were Warned",
"description": "Destroy the Portal",
"frame": "challenge",
"hidden": true
},
"criteria": {
"destroyed": {
"trigger": "chipi:portal_destroyed"
}
}
}

View File

@ -0,0 +1,17 @@
{
"parent": "chipi:progression/get_raw_chipper_ore",
"display": {
"icon": { "item": "chipi:chipper_ingot" },
"title": "Refinement",
"description": "Smelt Chipper Ore",
"frame": "task"
},
"criteria": {
"smelt": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [{ "items": ["chipi:chipper_ingot"] }]
}
}
}
}

View File

@ -0,0 +1,14 @@
{
"display": {
"icon": { "item": "chipi:chipper_ingot" },
"title": "Chipi",
"description": "Industrial stupidity begins",
"background": "minecraft:textures/block/stone.png",
"show_toast": false,
"announce_to_chat": false,
"hidden": false
},
"criteria": {
"tick": { "trigger": "minecraft:tick" }
}
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "chipi:chipper_alloy_block"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "chipi:raw_chipper_ore"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

@ -0,0 +1,39 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:dirt"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
},
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "chipi:nut",
"conditions": [
{
"condition": "minecraft:random_chance",
"chance": 0.01
}
]
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shapeless",
"group": "chipi",
"category": "misc",
"ingredients": [
{
"item": "chipi:chipper_ingot"
},
{
"item": "minecraft:iron_ingot"
},
{
"item": "minecraft:copper_ingot"
}
],
"result": {
"item": "chipi:chipper_alloy"
}
}

View File

@ -0,0 +1,37 @@
{
"type": "minecraft:crafting_shapeless",
"group": "chipi",
"category": "misc",
"ingredients": [
{
"item": "chipi:chipper_alloy"
},
{
"item": "chipi:chipper_alloy"
},
{
"item": "chipi:chipper_alloy"
},
{
"item": "chipi:chipper_alloy"
},
{
"item": "chipi:chipper_alloy"
},
{
"item": "chipi:chipper_alloy"
},
{
"item": "chipi:chipper_alloy"
},
{
"item": "chipi:chipper_alloy"
},
{
"item": "chipi:chipper_alloy"
}
],
"result": {
"item": "chipi:chipper_alloy_block"
}
}

View File

@ -0,0 +1,11 @@
{
"type": "minecraft:blasting",
"group": "chipi",
"category": "misc",
"ingredient": {
"item": "chipi:raw_chipper_ore"
},
"result": "chipi:chipper_ingot",
"experience": 20,
"cookingtime": 40
}

View File

@ -0,0 +1,11 @@
{
"type": "minecraft:smelting",
"group": "chipi",
"category": "misc",
"ingredient": {
"item": "chipi:raw_chipper_ore"
},
"result": "chipi:chipper_ingot",
"experience": 20,
"cookingtime": 80
}

View File

@ -0,0 +1,23 @@
{
"type": "minecraft:crafting_shaped",
"group": "chipi",
"category": "misc",
"pattern": [
"XXX",
"XYX",
"XXX"
],
"key": {
"X": {
"item": "chipi:chipper_alloy_block"
},
"Y": {
"item": "chipi:nut"
}
},
"result": {
"item": "chipi:chipper_frame",
"count": 1
},
"show_notification": true
}

View File

@ -0,0 +1,8 @@
{
"type": "fabric:add_features",
"biomes": "minecraft:overworld",
"features": [
"chipi:chipper_ore"
],
"step": "underground_ores"
}

View File

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

View File

@ -0,0 +1,27 @@
{
"feature": "chipi:chipper_ore",
"placement": [
{
"type": "minecraft:count",
"count": 30
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:height_range",
"height": {
"type": "minecraft:uniform",
"min_inclusive": {
"absolute": 40
},
"max_inclusive": {
"absolute": 64
}
}
},
{
"type": "minecraft:biome"
}
]
}

View File

@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"chipi:chipper_ore",
"chipi:chipper_alloy_block"
]
}

View File

@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"chipi:chipper_ore",
"chipi:chipper_alloy_block"
]
}