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.Identifier;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.GameRules;
|
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.BiomeModifications;
|
||||||
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
|
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
|
||||||
import net.minecraft.registry.RegistryKey;
|
import net.minecraft.registry.RegistryKey;
|
||||||
@ -39,6 +39,7 @@ public class ChipiMod implements ModInitializer {
|
|||||||
|
|
||||||
ModBlocks.register();
|
ModBlocks.register();
|
||||||
ModItems.register();
|
ModItems.register();
|
||||||
|
ModItemGroups.register();
|
||||||
ModCriteria.register();
|
ModCriteria.register();
|
||||||
|
|
||||||
BiomeModifications.addFeature(
|
BiomeModifications.addFeature(
|
||||||
|
|||||||
@ -13,6 +13,9 @@ public class ModCriteria {
|
|||||||
public static final VoidConsumedTrigger VOID_CONSUMED_TRIGGER =
|
public static final VoidConsumedTrigger VOID_CONSUMED_TRIGGER =
|
||||||
Criteria.register(new VoidConsumedTrigger());
|
Criteria.register(new VoidConsumedTrigger());
|
||||||
|
|
||||||
|
public static final VoidConsumedFireTrigger VOID_CONSUMED_FIRE_TRIGGER =
|
||||||
|
Criteria.register(new VoidConsumedFireTrigger());
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
// classload trigger
|
// 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.block.ShapeContext;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.network.packet.s2c.play.PositionFlag;
|
||||||
import net.minecraft.registry.RegistryKey;
|
import net.minecraft.registry.RegistryKey;
|
||||||
import net.minecraft.registry.RegistryKeys;
|
import net.minecraft.registry.RegistryKeys;
|
||||||
import net.minecraft.server.world.ServerWorld;
|
import net.minecraft.server.world.ServerWorld;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Vec3d;
|
|
||||||
import net.minecraft.util.shape.VoxelShape;
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
import net.minecraft.util.shape.VoxelShapes;
|
import net.minecraft.util.shape.VoxelShapes;
|
||||||
import net.minecraft.world.BlockView;
|
import net.minecraft.world.BlockView;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.TeleportTarget;
|
|
||||||
import net.minecraft.network.packet.s2c.play.PositionFlag;
|
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
|
||||||
public class ChipperPortalBlock extends Block {
|
public class ChipperPortalBlock extends Block {
|
||||||
@ -25,6 +24,7 @@ public class ChipperPortalBlock extends Block {
|
|||||||
super(settings);
|
super(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Walk-through portal
|
||||||
@Override
|
@Override
|
||||||
public VoxelShape getCollisionShape(
|
public VoxelShape getCollisionShape(
|
||||||
BlockState state,
|
BlockState state,
|
||||||
@ -54,18 +54,19 @@ public class ChipperPortalBlock extends Block {
|
|||||||
|
|
||||||
if (targetWorld == null) return;
|
if (targetWorld == null) return;
|
||||||
|
|
||||||
TeleportTarget target = new TeleportTarget(
|
// SAFE spawn position inside your dungeon
|
||||||
new Vec3d(5.5, 90, 5.5),
|
BlockPos spawn = new BlockPos(5, 90, 6);
|
||||||
Vec3d.ZERO,
|
|
||||||
player.getYaw(),
|
// Safety: make sure feet are not in air
|
||||||
player.getPitch()
|
if (!targetWorld.getBlockState(spawn.down()).isSolidBlock(targetWorld, spawn.down())) {
|
||||||
);
|
spawn = spawn.up();
|
||||||
|
}
|
||||||
|
|
||||||
player.teleport(
|
player.teleport(
|
||||||
targetWorld,
|
targetWorld,
|
||||||
5.5,
|
spawn.getX() + 0.5,
|
||||||
88.0,
|
spawn.getY(),
|
||||||
6.5,
|
spawn.getZ() + 0.5,
|
||||||
EnumSet.noneOf(PositionFlag.class),
|
EnumSet.noneOf(PositionFlag.class),
|
||||||
player.getYaw(),
|
player.getYaw(),
|
||||||
player.getPitch()
|
player.getPitch()
|
||||||
@ -73,10 +74,14 @@ public class ChipperPortalBlock extends Block {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos) {
|
public float calcBlockBreakingDelta(
|
||||||
if (!player.isCreative()) {
|
BlockState state,
|
||||||
return 0.0F;
|
PlayerEntity player,
|
||||||
}
|
BlockView world,
|
||||||
return super.calcBlockBreakingDelta(state, player, world, pos);
|
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.Chipperfluff.chipi.advancement.ModCriteria;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
|
||||||
|
|
||||||
public class VoidBlock extends Block {
|
public class VoidBlock extends Block {
|
||||||
|
|
||||||
public VoidBlock(Settings settings) {
|
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()
|
.getRegistryManager()
|
||||||
.get(RegistryKeys.DAMAGE_TYPE)
|
.get(RegistryKeys.DAMAGE_TYPE)
|
||||||
.entryOf(
|
.entryOf(
|
||||||
RegistryKey.of(
|
RegistryKey.of(
|
||||||
RegistryKeys.DAMAGE_TYPE,
|
RegistryKeys.DAMAGE_TYPE,
|
||||||
new Identifier("chipi", "void_block")
|
damageId
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
DamageSource voidSource = new DamageSource(voidType);
|
DamageSource source = new DamageSource(damageType);
|
||||||
|
|
||||||
if (living instanceof ServerPlayerEntity serverPlayer) {
|
if (living instanceof ServerPlayerEntity serverPlayer) {
|
||||||
|
if (burning) {
|
||||||
|
ModCriteria.VOID_CONSUMED_FIRE_TRIGGER.trigger(serverPlayer);
|
||||||
|
} else {
|
||||||
ModCriteria.VOID_CONSUMED_TRIGGER.trigger(serverPlayer);
|
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;
|
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.CorridorEWStructure;
|
||||||
import net.Chipperfluff.chipi.world.gen.struct.CorridorNSStructure;
|
import net.Chipperfluff.chipi.world.gen.struct.CorridorNSStructure;
|
||||||
import net.Chipperfluff.chipi.world.gen.struct.RoomBaseStructure;
|
import net.Chipperfluff.chipi.world.gen.struct.RoomBaseStructure;
|
||||||
import net.minecraft.block.BlockState;
|
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.server.world.ServerWorld;
|
||||||
import net.minecraft.state.property.Properties;
|
|
||||||
import net.minecraft.util.math.Direction;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
public class ChipiDungeonGenerator {
|
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 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 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() {}
|
private ChipiDungeonGenerator() {}
|
||||||
|
|
||||||
public static void generateInitialLayout(ServerWorld world, BlockPos portalSpawnPos) {
|
public static void generateInitialLayout(ServerWorld world, BlockPos portalSpawnPos) {
|
||||||
@ -54,13 +39,11 @@ public class ChipiDungeonGenerator {
|
|||||||
BlockPos firstCorridorAnchor = new BlockPos(5, CORRIDOR_Y, 11);
|
BlockPos firstCorridorAnchor = new BlockPos(5, CORRIDOR_Y, 11);
|
||||||
BlockPos firstGeneratedRoomCenter = new BlockPos(5, ROOM_Y, 24); // explicit first floor anchor
|
BlockPos firstGeneratedRoomCenter = new BlockPos(5, ROOM_Y, 24); // explicit first floor anchor
|
||||||
|
|
||||||
// First room/corridor use direct instances as requested.
|
DungeonContext ctx = DungeonContext.EMPTY;
|
||||||
RoomBaseStructure firstRoom = new RoomBaseStructure();
|
|
||||||
CorridorNSStructure firstCorridor = new CorridorNSStructure();
|
|
||||||
|
|
||||||
RoomBaseStructure room = getRoom();
|
// First room/corridor use direct instances as requested.
|
||||||
CorridorNSStructure corridorNS = getTunnelNS();
|
RoomBaseStructure firstRoom = WorldMaster.getDefaultRoom();
|
||||||
CorridorEWStructure corridorEW = getTunnelEW();
|
CorridorNSStructure firstCorridor = WorldMaster.getDefaultCorridorNS();
|
||||||
|
|
||||||
// Place the first room (absolute coordinates).
|
// Place the first room (absolute coordinates).
|
||||||
firstRoom.placeAt(world, firstGeneratedRoomCenter);
|
firstRoom.placeAt(world, firstGeneratedRoomCenter);
|
||||||
@ -75,11 +58,16 @@ public class ChipiDungeonGenerator {
|
|||||||
// Place rooms strictly southward (Z never decreases), across X in both directions.
|
// Place rooms strictly southward (Z never decreases), across X in both directions.
|
||||||
for (int row = 0; row < ROWS_SOUTH; row++) {
|
for (int row = 0; row < ROWS_SOUTH; row++) {
|
||||||
for (int col = minCol; col <= maxCol; col++) {
|
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(
|
BlockPos center = new BlockPos(
|
||||||
firstGeneratedRoomCenter.getX() + (col * STEP_X),
|
firstGeneratedRoomCenter.getX() + (col * STEP_X),
|
||||||
ROOM_Y,
|
ROOM_Y,
|
||||||
firstGeneratedRoomCenter.getZ() + (row * STEP_Z)
|
firstGeneratedRoomCenter.getZ() + (row * STEP_Z)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
RoomBaseStructure room = WorldMaster.resolveRoom(gridX, gridY, ctx);
|
||||||
room.placeAt(world, center);
|
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).
|
// 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 row = 0; row < ROWS_SOUTH - 1; row++) {
|
||||||
for (int col = minCol; col <= maxCol; col++) {
|
for (int col = minCol; col <= maxCol; col++) {
|
||||||
|
int gridX = col;
|
||||||
|
int gridY = row;
|
||||||
|
|
||||||
BlockPos currentCenter = new BlockPos(
|
BlockPos currentCenter = new BlockPos(
|
||||||
firstGeneratedRoomCenter.getX() + (col * STEP_X),
|
firstGeneratedRoomCenter.getX() + (col * STEP_X),
|
||||||
ROOM_Y,
|
ROOM_Y,
|
||||||
@ -99,6 +90,7 @@ public class ChipiDungeonGenerator {
|
|||||||
currentCenter.getZ() + ROOM_EXTENT_SOUTH
|
currentCenter.getZ() + ROOM_EXTENT_SOUTH
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CorridorNSStructure corridorNS = WorldMaster.resolveCorridorNS(gridX, gridY, ctx);
|
||||||
corridorNS.placeAt(world, anchorSouth);
|
corridorNS.placeAt(world, anchorSouth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -106,6 +98,9 @@ public class ChipiDungeonGenerator {
|
|||||||
// Connect east-west neighbors in each row.
|
// Connect east-west neighbors in each row.
|
||||||
for (int row = 0; row < ROWS_SOUTH; row++) {
|
for (int row = 0; row < ROWS_SOUTH; row++) {
|
||||||
for (int col = minCol; col < maxCol; col++) {
|
for (int col = minCol; col < maxCol; col++) {
|
||||||
|
int gridX = col;
|
||||||
|
int gridY = row;
|
||||||
|
|
||||||
BlockPos currentCenter = new BlockPos(
|
BlockPos currentCenter = new BlockPos(
|
||||||
firstGeneratedRoomCenter.getX() + (col * STEP_X),
|
firstGeneratedRoomCenter.getX() + (col * STEP_X),
|
||||||
ROOM_Y,
|
ROOM_Y,
|
||||||
@ -118,6 +113,7 @@ public class ChipiDungeonGenerator {
|
|||||||
currentCenter.getZ()
|
currentCenter.getZ()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CorridorEWStructure corridorEW = WorldMaster.resolveCorridorEW(gridX, gridY, ctx);
|
||||||
corridorEW.placeAt(world, anchorEast);
|
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.void_block": "Void Block",
|
||||||
"block.chipi.chipper_frame": "Chipper Frame",
|
"block.chipi.chipper_frame": "Chipper Frame",
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:nut" },
|
"icon": { "item": "chipi:nut" },
|
||||||
"title": "Nutty Preworkout",
|
"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"
|
"frame": "task"
|
||||||
},
|
},
|
||||||
"criteria": {
|
"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",
|
"parent": "chipi:progression/light_portal",
|
||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:chipper_portal" },
|
"icon": { "item": "chipi:chipper_portal" },
|
||||||
"title": "Into the Twink Zone",
|
"title": "Into the Nya Zone",
|
||||||
"description": "Leap through the portal and let the feral squirrels judge you",
|
"description": "Leap through the portal; feral fluffers judge you with big eyes, nya",
|
||||||
"frame": "challenge"
|
"frame": "challenge"
|
||||||
},
|
},
|
||||||
"criteria": {
|
"criteria": {
|
||||||
|
|||||||
@ -2,8 +2,8 @@
|
|||||||
"parent": "chipi:root",
|
"parent": "chipi:root",
|
||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:nut" },
|
"icon": { "item": "chipi:nut" },
|
||||||
"title": "Certified Nut Goblin",
|
"title": "Nuts OwO",
|
||||||
"description": "Pocket a nut before the other femboys gossip",
|
"description": "Nyaa~ stash a nut before the other fluffballs start gossiping",
|
||||||
"frame": "task"
|
"frame": "task"
|
||||||
},
|
},
|
||||||
"criteria": {
|
"criteria": {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:raw_chipper_ore" },
|
"icon": { "item": "chipi:raw_chipper_ore" },
|
||||||
"title": "Shiny Squirrel Snack",
|
"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"
|
"frame": "task"
|
||||||
},
|
},
|
||||||
"criteria": {
|
"criteria": {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:chipper_portal" },
|
"icon": { "item": "chipi:chipper_portal" },
|
||||||
"title": "Absolutely Do Not Light This",
|
"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",
|
"frame": "challenge",
|
||||||
"hidden": true,
|
"hidden": true,
|
||||||
"show_toast": true,
|
"show_toast": true,
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:chipper_alloy_block" },
|
"icon": { "item": "chipi:chipper_alloy_block" },
|
||||||
"title": "Bulked-Up Bling",
|
"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"
|
"frame": "task"
|
||||||
},
|
},
|
||||||
"criteria": {
|
"criteria": {
|
||||||
|
|||||||
@ -2,8 +2,8 @@
|
|||||||
"parent": "chipi:root",
|
"parent": "chipi:root",
|
||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:chipper_frame" },
|
"icon": { "item": "chipi:chipper_frame" },
|
||||||
"title": "Framing the Twink Door",
|
"title": "Framing the Nya Door",
|
||||||
"description": "Assemble the portal while squirrels whisper this is a bad idea",
|
"description": "Assemble the portal while the squirrels whisper this is a bad idea, nya",
|
||||||
"frame": "task"
|
"frame": "task"
|
||||||
},
|
},
|
||||||
"criteria": {
|
"criteria": {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:chipper_alloy_block" },
|
"icon": { "item": "chipi:chipper_alloy_block" },
|
||||||
"title": "Bulk Metal Feng Shui",
|
"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"
|
"frame": "task"
|
||||||
},
|
},
|
||||||
"criteria": {
|
"criteria": {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:chipper_ingot" },
|
"icon": { "item": "chipi:chipper_ingot" },
|
||||||
"title": "Spa Day for Rocks",
|
"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"
|
"frame": "task"
|
||||||
},
|
},
|
||||||
"criteria": {
|
"criteria": {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:chipper_frame" },
|
"icon": { "item": "chipi:chipper_frame" },
|
||||||
"title": "Forbidden IKEA Manual",
|
"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"
|
"frame": "goal"
|
||||||
},
|
},
|
||||||
"criteria": {
|
"criteria": {
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "chipi:chipper_ingot" },
|
"icon": { "item": "chipi:chipper_ingot" },
|
||||||
"title": "Welcome to the Burrow",
|
"title": "Welcome to the Burrow",
|
||||||
"description": "Industrial femboy nonsense kicks off",
|
"description": "Industrial fluff nonsense kicks off, nya~",
|
||||||
"background": "minecraft:textures/block/stone.png",
|
"background": "minecraft:textures/block/stone.png",
|
||||||
"show_toast": false,
|
"show_toast": false,
|
||||||
"announce_to_chat": 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