added stuff
This commit is contained in:
parent
ca55f5a503
commit
f087190fa9
@ -15,7 +15,7 @@ import net.minecraft.structure.StructureTemplate;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.GameRules;
|
||||
|
||||
import net.Chipperfluff.chipi.item.ModItemGroups;
|
||||
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
|
||||
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
|
||||
import net.minecraft.registry.RegistryKey;
|
||||
@ -39,6 +39,7 @@ public class ChipiMod implements ModInitializer {
|
||||
|
||||
ModBlocks.register();
|
||||
ModItems.register();
|
||||
ModItemGroups.register();
|
||||
ModCriteria.register();
|
||||
|
||||
BiomeModifications.addFeature(
|
||||
|
||||
@ -13,6 +13,9 @@ public class ModCriteria {
|
||||
public static final VoidConsumedTrigger VOID_CONSUMED_TRIGGER =
|
||||
Criteria.register(new VoidConsumedTrigger());
|
||||
|
||||
public static final VoidConsumedFireTrigger VOID_CONSUMED_FIRE_TRIGGER =
|
||||
Criteria.register(new VoidConsumedFireTrigger());
|
||||
|
||||
public static void register() {
|
||||
// classload trigger
|
||||
}
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
package net.Chipperfluff.chipi.advancement;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import net.minecraft.advancement.criterion.AbstractCriterion;
|
||||
import net.minecraft.advancement.criterion.AbstractCriterionConditions;
|
||||
import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer;
|
||||
import net.minecraft.predicate.entity.LootContextPredicate;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class VoidConsumedFireTrigger
|
||||
extends AbstractCriterion<VoidConsumedFireTrigger.Conditions> {
|
||||
|
||||
public static final Identifier ID =
|
||||
new Identifier("chipi", "void_consumed_fire");
|
||||
|
||||
@Override
|
||||
public Identifier getId() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Conditions conditionsFromJson(
|
||||
JsonObject json,
|
||||
LootContextPredicate player,
|
||||
AdvancementEntityPredicateDeserializer deserializer
|
||||
) {
|
||||
return new Conditions(player);
|
||||
}
|
||||
|
||||
public void trigger(ServerPlayerEntity player) {
|
||||
this.trigger(player, conditions -> true);
|
||||
}
|
||||
|
||||
public static class Conditions extends AbstractCriterionConditions {
|
||||
public Conditions(LootContextPredicate player) {
|
||||
super(ID, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5,18 +5,17 @@ import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.ShapeContext;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.network.packet.s2c.play.PositionFlag;
|
||||
import net.minecraft.registry.RegistryKey;
|
||||
import net.minecraft.registry.RegistryKeys;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.shape.VoxelShape;
|
||||
import net.minecraft.util.shape.VoxelShapes;
|
||||
import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.TeleportTarget;
|
||||
import net.minecraft.network.packet.s2c.play.PositionFlag;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
||||
public class ChipperPortalBlock extends Block {
|
||||
@ -25,6 +24,7 @@ public class ChipperPortalBlock extends Block {
|
||||
super(settings);
|
||||
}
|
||||
|
||||
// Walk-through portal
|
||||
@Override
|
||||
public VoxelShape getCollisionShape(
|
||||
BlockState state,
|
||||
@ -54,29 +54,34 @@ public class ChipperPortalBlock extends Block {
|
||||
|
||||
if (targetWorld == null) return;
|
||||
|
||||
TeleportTarget target = new TeleportTarget(
|
||||
new Vec3d(5.5, 90, 5.5),
|
||||
Vec3d.ZERO,
|
||||
player.getYaw(),
|
||||
player.getPitch()
|
||||
);
|
||||
// SAFE spawn position inside your dungeon
|
||||
BlockPos spawn = new BlockPos(5, 90, 6);
|
||||
|
||||
// Safety: make sure feet are not in air
|
||||
if (!targetWorld.getBlockState(spawn.down()).isSolidBlock(targetWorld, spawn.down())) {
|
||||
spawn = spawn.up();
|
||||
}
|
||||
|
||||
player.teleport(
|
||||
targetWorld,
|
||||
5.5,
|
||||
88.0,
|
||||
6.5,
|
||||
EnumSet.noneOf(PositionFlag.class),
|
||||
player.getYaw(),
|
||||
player.getPitch()
|
||||
targetWorld,
|
||||
spawn.getX() + 0.5,
|
||||
spawn.getY(),
|
||||
spawn.getZ() + 0.5,
|
||||
EnumSet.noneOf(PositionFlag.class),
|
||||
player.getYaw(),
|
||||
player.getPitch()
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos) {
|
||||
if (!player.isCreative()) {
|
||||
return 0.0F;
|
||||
}
|
||||
return super.calcBlockBreakingDelta(state, player, world, pos);
|
||||
public float calcBlockBreakingDelta(
|
||||
BlockState state,
|
||||
PlayerEntity player,
|
||||
BlockView world,
|
||||
BlockPos pos
|
||||
) {
|
||||
return player.isCreative()
|
||||
? super.calcBlockBreakingDelta(state, player, world, pos)
|
||||
: 0.0F;
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,7 +17,6 @@ import net.minecraft.world.World;
|
||||
import net.Chipperfluff.chipi.advancement.ModCriteria;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
|
||||
|
||||
public class VoidBlock extends Block {
|
||||
|
||||
public VoidBlock(Settings settings) {
|
||||
@ -40,23 +39,33 @@ public class VoidBlock extends Block {
|
||||
}
|
||||
}
|
||||
|
||||
RegistryEntry<DamageType> voidType = world
|
||||
boolean burning = living.isOnFire();
|
||||
|
||||
Identifier damageId = burning
|
||||
? new Identifier("chipi", "void_block_fire")
|
||||
: new Identifier("chipi", "void_block");
|
||||
|
||||
RegistryEntry<DamageType> damageType = world
|
||||
.getRegistryManager()
|
||||
.get(RegistryKeys.DAMAGE_TYPE)
|
||||
.entryOf(
|
||||
RegistryKey.of(
|
||||
RegistryKeys.DAMAGE_TYPE,
|
||||
new Identifier("chipi", "void_block")
|
||||
damageId
|
||||
)
|
||||
);
|
||||
|
||||
DamageSource voidSource = new DamageSource(voidType);
|
||||
DamageSource source = new DamageSource(damageType);
|
||||
|
||||
if (living instanceof ServerPlayerEntity serverPlayer) {
|
||||
ModCriteria.VOID_CONSUMED_TRIGGER.trigger(serverPlayer);
|
||||
if (burning) {
|
||||
ModCriteria.VOID_CONSUMED_FIRE_TRIGGER.trigger(serverPlayer);
|
||||
} else {
|
||||
ModCriteria.VOID_CONSUMED_TRIGGER.trigger(serverPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
living.damage(voidSource, Float.MAX_VALUE);
|
||||
living.damage(source, Float.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
43
src/main/java/net/Chipperfluff/chipi/item/ModItemGroups.java
Normal file
43
src/main/java/net/Chipperfluff/chipi/item/ModItemGroups.java
Normal file
@ -0,0 +1,43 @@
|
||||
package net.Chipperfluff.chipi.item;
|
||||
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
|
||||
import net.minecraft.item.ItemGroup;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.Registry;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.Chipperfluff.chipi.ChipiMod;
|
||||
import net.Chipperfluff.chipi.block.ModBlocks;
|
||||
import net.Chipperfluff.chipi.item.ModItems;
|
||||
|
||||
public class ModItemGroups {
|
||||
|
||||
public static final ItemGroup CHIPI_GROUP = Registry.register(
|
||||
Registries.ITEM_GROUP,
|
||||
new Identifier(ChipiMod.MOD_ID, "chipi"),
|
||||
FabricItemGroup.builder()
|
||||
.displayName(Text.translatable("itemGroup.chipi.chipi"))
|
||||
.icon(() -> new ItemStack(ModBlocks.VOID_BLOCK.asItem()))
|
||||
.entries((context, entries) -> {
|
||||
|
||||
// Blocks
|
||||
entries.add(ModBlocks.VOID_BLOCK);
|
||||
entries.add(ModBlocks.CHIPPER_FRAME);
|
||||
entries.add(ModBlocks.CHIPPER_PORTAL);
|
||||
entries.add(ModBlocks.CHIPPER_ORE);
|
||||
entries.add(ModBlocks.CHIPPER_ALLOY_BLOCK);
|
||||
|
||||
// Items
|
||||
entries.add(ModItems.NUT);
|
||||
entries.add(ModItems.RAW_CHIPPER_ORE);
|
||||
entries.add(ModItems.CHIPPER_INGOT);
|
||||
entries.add(ModItems.CHIPPER_ALLOY);
|
||||
})
|
||||
.build()
|
||||
);
|
||||
|
||||
public static void register() {
|
||||
// force class load
|
||||
}
|
||||
}
|
||||
@ -1,14 +1,11 @@
|
||||
package net.Chipperfluff.chipi.world.gen;
|
||||
|
||||
import net.Chipperfluff.chipi.world.gen.DungeonContext;
|
||||
import net.Chipperfluff.chipi.world.gen.struct.CorridorEWStructure;
|
||||
import net.Chipperfluff.chipi.world.gen.struct.CorridorNSStructure;
|
||||
import net.Chipperfluff.chipi.world.gen.struct.RoomBaseStructure;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.enums.BlockHalf;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.state.property.Properties;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
public class ChipiDungeonGenerator {
|
||||
@ -33,18 +30,6 @@ public class ChipiDungeonGenerator {
|
||||
private static final int ROWS_SOUTH = 40; // rows of rooms south of spawn (spawn room itself is already placed)
|
||||
private static final int COLS_EW = 40; // columns across X (split roughly evenly around center)
|
||||
|
||||
private static RoomBaseStructure getRoom() {
|
||||
return new RoomBaseStructure();
|
||||
}
|
||||
|
||||
private static CorridorNSStructure getTunnelNS() {
|
||||
return new CorridorNSStructure();
|
||||
}
|
||||
|
||||
private static CorridorEWStructure getTunnelEW() {
|
||||
return new CorridorEWStructure();
|
||||
}
|
||||
|
||||
private ChipiDungeonGenerator() {}
|
||||
|
||||
public static void generateInitialLayout(ServerWorld world, BlockPos portalSpawnPos) {
|
||||
@ -54,13 +39,11 @@ public class ChipiDungeonGenerator {
|
||||
BlockPos firstCorridorAnchor = new BlockPos(5, CORRIDOR_Y, 11);
|
||||
BlockPos firstGeneratedRoomCenter = new BlockPos(5, ROOM_Y, 24); // explicit first floor anchor
|
||||
|
||||
// First room/corridor use direct instances as requested.
|
||||
RoomBaseStructure firstRoom = new RoomBaseStructure();
|
||||
CorridorNSStructure firstCorridor = new CorridorNSStructure();
|
||||
DungeonContext ctx = DungeonContext.EMPTY;
|
||||
|
||||
RoomBaseStructure room = getRoom();
|
||||
CorridorNSStructure corridorNS = getTunnelNS();
|
||||
CorridorEWStructure corridorEW = getTunnelEW();
|
||||
// First room/corridor use direct instances as requested.
|
||||
RoomBaseStructure firstRoom = WorldMaster.getDefaultRoom();
|
||||
CorridorNSStructure firstCorridor = WorldMaster.getDefaultCorridorNS();
|
||||
|
||||
// Place the first room (absolute coordinates).
|
||||
firstRoom.placeAt(world, firstGeneratedRoomCenter);
|
||||
@ -75,11 +58,16 @@ public class ChipiDungeonGenerator {
|
||||
// Place rooms strictly southward (Z never decreases), across X in both directions.
|
||||
for (int row = 0; row < ROWS_SOUTH; row++) {
|
||||
for (int col = minCol; col <= maxCol; col++) {
|
||||
int gridX = col; // grid 0,0 is the first generated room; -X -> negative gridX, +X -> positive gridX
|
||||
int gridY = row; // gridY increases southward only
|
||||
|
||||
BlockPos center = new BlockPos(
|
||||
firstGeneratedRoomCenter.getX() + (col * STEP_X),
|
||||
ROOM_Y,
|
||||
firstGeneratedRoomCenter.getZ() + (row * STEP_Z)
|
||||
);
|
||||
|
||||
RoomBaseStructure room = WorldMaster.resolveRoom(gridX, gridY, ctx);
|
||||
room.placeAt(world, center);
|
||||
}
|
||||
}
|
||||
@ -87,6 +75,9 @@ public class ChipiDungeonGenerator {
|
||||
// Connect each room to the next one south with a corridor at fixed Y (no northward connections).
|
||||
for (int row = 0; row < ROWS_SOUTH - 1; row++) {
|
||||
for (int col = minCol; col <= maxCol; col++) {
|
||||
int gridX = col;
|
||||
int gridY = row;
|
||||
|
||||
BlockPos currentCenter = new BlockPos(
|
||||
firstGeneratedRoomCenter.getX() + (col * STEP_X),
|
||||
ROOM_Y,
|
||||
@ -99,6 +90,7 @@ public class ChipiDungeonGenerator {
|
||||
currentCenter.getZ() + ROOM_EXTENT_SOUTH
|
||||
);
|
||||
|
||||
CorridorNSStructure corridorNS = WorldMaster.resolveCorridorNS(gridX, gridY, ctx);
|
||||
corridorNS.placeAt(world, anchorSouth);
|
||||
}
|
||||
}
|
||||
@ -106,6 +98,9 @@ public class ChipiDungeonGenerator {
|
||||
// Connect east-west neighbors in each row.
|
||||
for (int row = 0; row < ROWS_SOUTH; row++) {
|
||||
for (int col = minCol; col < maxCol; col++) {
|
||||
int gridX = col;
|
||||
int gridY = row;
|
||||
|
||||
BlockPos currentCenter = new BlockPos(
|
||||
firstGeneratedRoomCenter.getX() + (col * STEP_X),
|
||||
ROOM_Y,
|
||||
@ -118,6 +113,7 @@ public class ChipiDungeonGenerator {
|
||||
currentCenter.getZ()
|
||||
);
|
||||
|
||||
CorridorEWStructure corridorEW = WorldMaster.resolveCorridorEW(gridX, gridY, ctx);
|
||||
corridorEW.placeAt(world, anchorEast);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
package net.Chipperfluff.chipi.world.gen;
|
||||
|
||||
/**
|
||||
* Placeholder context for dungeon generation decisions.
|
||||
* Will later hold seed, reservations, phases, etc.
|
||||
*/
|
||||
public final class DungeonContext {
|
||||
public static final DungeonContext EMPTY = new DungeonContext();
|
||||
|
||||
private DungeonContext() {}
|
||||
}
|
||||
@ -0,0 +1,65 @@
|
||||
package net.Chipperfluff.chipi.world.gen;
|
||||
|
||||
import net.Chipperfluff.chipi.world.gen.struct.CorridorEWStructure;
|
||||
import net.Chipperfluff.chipi.world.gen.struct.CorridorNSStructure;
|
||||
import net.Chipperfluff.chipi.world.gen.struct.RoomBaseStructure;
|
||||
|
||||
public final class WorldMaster {
|
||||
|
||||
private WorldMaster() {}
|
||||
|
||||
public static RoomBaseStructure getDefaultRoom() {
|
||||
return new RoomBaseStructure();
|
||||
}
|
||||
|
||||
public static CorridorNSStructure getDefaultCorridorNS() {
|
||||
return new CorridorNSStructure();
|
||||
}
|
||||
|
||||
public static CorridorEWStructure getDefaultCorridorEW() {
|
||||
return new CorridorEWStructure();
|
||||
}
|
||||
|
||||
/**
|
||||
* Decide which ROOM exists at this grid position.
|
||||
*
|
||||
* @param gridX logical dungeon grid X
|
||||
* @param gridY logical dungeon grid Y
|
||||
* @param ctx snapshot of dungeon state (seed, reserved map, phase, etc.)
|
||||
*/
|
||||
public static RoomBaseStructure resolveRoom(
|
||||
int gridX,
|
||||
int gridY,
|
||||
DungeonContext ctx
|
||||
) {
|
||||
// later:
|
||||
// - check reserved HashMap
|
||||
// - check spawn/boss rules
|
||||
// - check generation phase
|
||||
// - check random seed
|
||||
|
||||
return getDefaultRoom();
|
||||
}
|
||||
|
||||
/**
|
||||
* Decide which NORTH-SOUTH corridor exists at this grid position.
|
||||
*/
|
||||
public static CorridorNSStructure resolveCorridorNS(
|
||||
int gridX,
|
||||
int gridY,
|
||||
DungeonContext ctx
|
||||
) {
|
||||
return getDefaultCorridorNS();
|
||||
}
|
||||
|
||||
/**
|
||||
* Decide which EAST-WEST corridor exists at this grid position.
|
||||
*/
|
||||
public static CorridorEWStructure resolveCorridorEW(
|
||||
int gridX,
|
||||
int gridY,
|
||||
DungeonContext ctx
|
||||
) {
|
||||
return getDefaultCorridorEW();
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,8 @@
|
||||
{
|
||||
"death.attack.void_block": "%1$s stepped beyond safety and the Outside took them",
|
||||
"death.attack.void_block": "§8%1$s stepped beyond safety — the Outside answered.",
|
||||
"death.attack.chipi.void_block_fire": "§c%1$s tried to save themselves.§r §8It got worse.",
|
||||
|
||||
"itemGroup.chipi.chipi": "Chipi",
|
||||
|
||||
"block.chipi.void_block": "Void Block",
|
||||
"block.chipi.chipper_frame": "Chipper Frame",
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"display": {
|
||||
"icon": { "item": "chipi:nut" },
|
||||
"title": "Nutty Preworkout",
|
||||
"description": "Munch a nut to impress the gym-rat squirrels",
|
||||
"description": "Munch a nut to impress the swole floofs, uwu",
|
||||
"frame": "task"
|
||||
},
|
||||
"criteria": {
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
{
|
||||
"parent": "chipi:root",
|
||||
"display": {
|
||||
"icon": { "item": "minecraft:lava_bucket" },
|
||||
"title": "That Didn’t Help",
|
||||
"description": "Tried to save yourself. Landed somewhere even worse.",
|
||||
"frame": "challenge",
|
||||
"hidden": true,
|
||||
"show_toast": true,
|
||||
"announce_to_chat": false
|
||||
},
|
||||
"criteria": {
|
||||
"burning_void": {
|
||||
"trigger": "chipi:void_consumed_fire"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2,8 +2,8 @@
|
||||
"parent": "chipi:progression/light_portal",
|
||||
"display": {
|
||||
"icon": { "item": "chipi:chipper_portal" },
|
||||
"title": "Into the Twink Zone",
|
||||
"description": "Leap through the portal and let the feral squirrels judge you",
|
||||
"title": "Into the Nya Zone",
|
||||
"description": "Leap through the portal; feral fluffers judge you with big eyes, nya",
|
||||
"frame": "challenge"
|
||||
},
|
||||
"criteria": {
|
||||
|
||||
@ -2,8 +2,8 @@
|
||||
"parent": "chipi:root",
|
||||
"display": {
|
||||
"icon": { "item": "chipi:nut" },
|
||||
"title": "Certified Nut Goblin",
|
||||
"description": "Pocket a nut before the other femboys gossip",
|
||||
"title": "Nuts OwO",
|
||||
"description": "Nyaa~ stash a nut before the other fluffballs start gossiping",
|
||||
"frame": "task"
|
||||
},
|
||||
"criteria": {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"display": {
|
||||
"icon": { "item": "chipi:raw_chipper_ore" },
|
||||
"title": "Shiny Squirrel Snack",
|
||||
"description": "Dig up raw chipper ore before someone nibbles it",
|
||||
"description": "Dig up raw chipper ore before someone nibbles it, nya",
|
||||
"frame": "task"
|
||||
},
|
||||
"criteria": {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"display": {
|
||||
"icon": { "item": "chipi:chipper_portal" },
|
||||
"title": "Absolutely Do Not Light This",
|
||||
"description": "Ignite the portal as femboy squirrels chant \"oh no don't go in... or do\"",
|
||||
"description": "Ignite the portal as the burrow whispers \"oh no don't go out there... nya\"",
|
||||
"frame": "challenge",
|
||||
"hidden": true,
|
||||
"show_toast": true,
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"display": {
|
||||
"icon": { "item": "chipi:chipper_alloy_block" },
|
||||
"title": "Bulked-Up Bling",
|
||||
"description": "Press that alloy into a block—swole femboy decor",
|
||||
"description": "Press that alloy into a block—buff shiny burrow decor, uwu",
|
||||
"frame": "task"
|
||||
},
|
||||
"criteria": {
|
||||
|
||||
@ -2,8 +2,8 @@
|
||||
"parent": "chipi:root",
|
||||
"display": {
|
||||
"icon": { "item": "chipi:chipper_frame" },
|
||||
"title": "Framing the Twink Door",
|
||||
"description": "Assemble the portal while squirrels whisper this is a bad idea",
|
||||
"title": "Framing the Nya Door",
|
||||
"description": "Assemble the portal while the squirrels whisper this is a bad idea, nya",
|
||||
"frame": "task"
|
||||
},
|
||||
"criteria": {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"display": {
|
||||
"icon": { "item": "chipi:chipper_alloy_block" },
|
||||
"title": "Bulk Metal Feng Shui",
|
||||
"description": "Place a chipper alloy block like it's a shiny gym mirror",
|
||||
"description": "Place a chipper alloy block like it's a shiny gym mirror, OwO",
|
||||
"frame": "task"
|
||||
},
|
||||
"criteria": {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"display": {
|
||||
"icon": { "item": "chipi:chipper_ingot" },
|
||||
"title": "Spa Day for Rocks",
|
||||
"description": "Smelt chipper ore into ingots, pampered femboy style",
|
||||
"description": "Smelt chipper ore into ingots—pampered den-day treatment, uwu",
|
||||
"frame": "task"
|
||||
},
|
||||
"criteria": {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"display": {
|
||||
"icon": { "item": "chipi:chipper_frame" },
|
||||
"title": "Forbidden IKEA Manual",
|
||||
"description": "Unlock the portal frame recipe while femboy squirrels look concerned",
|
||||
"description": "Unlock the portal frame recipe while the fluffy crowd side-eyes you, nya",
|
||||
"frame": "goal"
|
||||
},
|
||||
"criteria": {
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
"display": {
|
||||
"icon": { "item": "chipi:chipper_ingot" },
|
||||
"title": "Welcome to the Burrow",
|
||||
"description": "Industrial femboy nonsense kicks off",
|
||||
"description": "Industrial fluff nonsense kicks off, nya~",
|
||||
"background": "minecraft:textures/block/stone.png",
|
||||
"show_toast": false,
|
||||
"announce_to_chat": false,
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
{
|
||||
"message_id": "chipi.void_block_fire",
|
||||
"scaling": "never",
|
||||
"exhaustion": 0.0,
|
||||
"effects": {
|
||||
"burning": true
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user