Compare commits

...

2 Commits

Author SHA1 Message Date
72274c08f8 Add contributing guide with Java style formatting rules 2025-12-25 16:35:09 +01:00
6b95a3891f Refactor imports and improve code organization across multiple classes
- Reordered and grouped import statements in various files for better readability.
- Removed unnecessary imports and cleaned up unused code.
- Simplified constructors and methods in several classes to enhance clarity.
- Standardized formatting and spacing for consistency throughout the codebase.
- Ensured that all necessary imports are included where required, particularly in structure-related classes.
2025-12-25 16:34:58 +01:00
48 changed files with 437 additions and 187 deletions

270
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,270 @@
# Contributing Guide (Java Style)
This project follows a strict, C/C++-style Java formatting rule set. The goal is to preserve intent, control flow clarity, and fast mental parsing. Please follow these rules for any Java changes.
If a tool or formatter fights these rules, the tool is wrong.
## Core Philosophy
- Java is written as if it were C/C++.
- Formatting must never change perceived control flow.
- Readability means fast, correct parsing in your head.
- Tools adapt to the codebase, not the other way around.
## Indentation & Whitespace
- Indentation: 4 spaces.
- No tabs.
- Avoid excessive vertical whitespace.
- Blank lines only when they add logical separation.
✅ Good:
```java
int sum(int a, int b) {
int r = a + b;
return r;
}
```
❌ Bad:
```java
int sum(int a, int b)
{
int r = a + b;
return r;
}
```
## Braces
- Braces are always required.
- Opening brace stays on the same line.
- Never rely on implicit scopes.
✅ Good:
```java
if (value == null) {
return;
}
```
❌ Bad:
```java
if (value == null)
{
return;
}
```
## Imports (Strict Rules)
### Never use fully-qualified class names inline
❌ Forbidden:
```java
net.minecraft.util.math.BlockPos pos = new net.minecraft.util.math.BlockPos(0, 0, 0);
```
✅ Required:
```java
import net.minecraft.util.math.BlockPos;
BlockPos pos = new BlockPos(0, 0, 0);
```
### Import grouping and ordering
1) Imports from external/other packages first.
2) Blank line.
3) Imports from this project (net.Chipperfluff.*) next.
Inside each block, order by:
1) Classes
2) Functions (static method imports)
3) Variables/constants (static field imports)
4) Enums
If there are no project imports, do not add a blank line.
## Method Signatures
- Method signatures must stay on one line.
- Do not break parameters across multiple lines.
- Long lines are acceptable; ambiguity is not.
✅ Good:
```java
void processUser(User user, int flags, boolean force, long timeout) {
...
}
```
❌ Bad:
```java
void processUser(
User user,
int flags,
boolean force,
long timeout
) {
...
}
```
## Function Calls & Argument Layout
### Default rule
- Single-line calls are preferred.
- Flat calls stay flat.
- Length alone is not a reason to wrap.
✅ Good:
```java
Color color = user.getProfile().getSettings().getTheme().getPrimaryColor();
```
### Multiline calls are allowed only when:
- The call is structural or declarative.
- Each argument is conceptually distinct.
- Nesting would otherwise hide meaning.
✅ Good (structural/declarative):
```java
BiomeModifications.addFeature(
BiomeSelectors.foundInOverworld(),
GenerationStep.Feature.UNDERGROUND_ORES,
RegistryKey.of(
RegistryKeys.PLACED_FEATURE,
new Identifier("chipi", "chipper_ore")
)
);
```
❌ Bad (no semantic gain):
```java
doThing(
a,
b,
c
);
```
## Chained Calls
- Flat chains stay on one line.
- Long or builder-style chains may be split vertically.
- Each chained step gets its own line.
✅ Good:
```java
builder
.withColor(theme.getPrimaryColor())
.withSize(32)
.enableShadow()
.build();
```
❌ Bad:
```java
builder.withColor(
theme.getPrimaryColor()
).withSize(
32
).enableShadow().build();
```
## Control Flow & Returns
- Early returns are encouraged.
- Avoid artificial nesting.
- Single-exit functions are not required.
✅ Good:
```java
void handle(User user) {
if (user == null) return;
if (!user.isActive()) return;
process(user);
}
```
❌ Bad:
```java
void handle(User user) {
if (user != null) {
if (user.isActive()) {
process(user);
}
}
}
```
## One-Liners
- One-liners allowed for simple guard clauses.
- No complex logic on one line.
✅ Allowed:
```java
if (value == null) return;
```
❌ Not allowed:
```java
if (a == b && c != d && flag && check()) doThing();
```
## Null Handling
- null is a valid, intentional state.
- Do not over-engineer around it.
- Prefer clarity over defensive clutter.
✅ Good:
```java
User user = findUser(id);
if (user == null) return;
```
## Logging & Debug Output
- Logging must be short and readable.
- Prefer System.out.println for quick diagnostics.
- Verbose logging only when justified.
✅ Good:
```java
System.out.println("Loaded structure: " + id);
```
## Autoformatters & Linters
Autoformatters must not:
- Break method signatures.
- Move braces to new lines.
- Introduce unwanted trailing newlines.
- Rewrap stable code repeatedly.
If a formatter fights these rules: disable or reconfigure it.
## Empty Methods
Empty methods or constructors must be written on one line:
```java
public static void register() {}
```
## Summary (Non-Negotiable)
- Java written with C/C++ structure.
- Compact signatures, explicit layout.
- Imports always used (no fully-qualified inline types).
- Multiline formatting only when it adds meaning.
- Formatting reflects logic, not fashion.

View File

@ -1,23 +1,24 @@
package net.Chipperfluff.chipi; package net.Chipperfluff.chipi;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
import net.Chipperfluff.chipi.advancement.ModCriteria; import net.Chipperfluff.chipi.advancement.ModCriteria;
import net.Chipperfluff.chipi.block.ModBlocks; import net.Chipperfluff.chipi.block.ModBlocks;
import net.Chipperfluff.chipi.command.CommandHandler; import net.Chipperfluff.chipi.command.CommandHandler;
import net.Chipperfluff.chipi.effect.ChipiBlessingEvents; import net.Chipperfluff.chipi.effect.ChipiBlessingEvents;
import net.Chipperfluff.chipi.effect.ChipiHungerHandler; import net.Chipperfluff.chipi.effect.ChipiHungerHandler;
import net.Chipperfluff.chipi.effect.ModEffects; import net.Chipperfluff.chipi.effect.ModEffects;
import net.Chipperfluff.chipi.entity.ModEntities;
import net.Chipperfluff.chipi.entity.SpawnLogic;
import net.Chipperfluff.chipi.entity.MepEntity; import net.Chipperfluff.chipi.entity.MepEntity;
import net.Chipperfluff.chipi.entity.ModEntities;
import net.Chipperfluff.chipi.entity.PlayerJrEntity; import net.Chipperfluff.chipi.entity.PlayerJrEntity;
import net.Chipperfluff.chipi.entity.SpawnLogic;
import net.Chipperfluff.chipi.item.ModItemGroups; import net.Chipperfluff.chipi.item.ModItemGroups;
import net.Chipperfluff.chipi.item.ModItems; import net.Chipperfluff.chipi.item.ModItems;
import net.Chipperfluff.chipi.item.music.ModMusicDiscs;
import net.Chipperfluff.chipi.server.ChipiServerEvents; import net.Chipperfluff.chipi.server.ChipiServerEvents;
import net.Chipperfluff.chipi.sound.ModSounds; import net.Chipperfluff.chipi.sound.ModSounds;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
import net.Chipperfluff.chipi.util.TickScheduler; import net.Chipperfluff.chipi.util.TickScheduler;
import net.Chipperfluff.chipi.item.music.ModMusicDiscs;
public class ChipiMod implements ModInitializer { public class ChipiMod implements ModInitializer {

View File

@ -5,14 +5,9 @@ import net.minecraft.advancement.criterion.Criteria;
public class ModCriteria { public class ModCriteria {
public static final PortalActivatedTrigger PORTAL_ACTIVATED = Criteria.register(new PortalActivatedTrigger()); public static final PortalActivatedTrigger PORTAL_ACTIVATED = Criteria.register(new PortalActivatedTrigger());
public static final PortalDestroyedTrigger PORTAL_DESTROYED = Criteria.register(new PortalDestroyedTrigger()); public static final PortalDestroyedTrigger PORTAL_DESTROYED = Criteria.register(new PortalDestroyedTrigger());
public static final VoidConsumedTrigger VOID_CONSUMED_TRIGGER = Criteria.register(new VoidConsumedTrigger()); 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 final VoidConsumedFireTrigger VOID_CONSUMED_FIRE_TRIGGER = Criteria.register(new VoidConsumedFireTrigger());
public static void register() { public static void register() {}
// classload trigger
}
} }

View File

@ -1,6 +1,5 @@
package net.Chipperfluff.chipi.block; package net.Chipperfluff.chipi.block;
import net.Chipperfluff.chipi.advancement.ModCriteria;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.PillarBlock; import net.minecraft.block.PillarBlock;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
@ -9,6 +8,8 @@ import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.Chipperfluff.chipi.advancement.ModCriteria;
public class ChipperFrameBlock extends PillarBlock { public class ChipperFrameBlock extends PillarBlock {
public ChipperFrameBlock(Settings settings) { public ChipperFrameBlock(Settings settings) {

View File

@ -15,7 +15,6 @@ 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 java.util.EnumSet; import java.util.EnumSet;
public class ChipperPortalBlock extends Block { public class ChipperPortalBlock extends Block {
@ -71,7 +70,6 @@ public class ChipperPortalBlock extends Block {
player.setOnGround(true); player.setOnGround(true);
} }
public static BlockPos resolveSafeSpawn(ServerWorld targetWorld) { public static BlockPos resolveSafeSpawn(ServerWorld targetWorld) {
BlockPos spawn = DEFAULT_SPAWN; BlockPos spawn = DEFAULT_SPAWN;
BlockPos under = spawn.down(); BlockPos under = spawn.down();

View File

@ -1,6 +1,5 @@
package net.Chipperfluff.chipi.block; package net.Chipperfluff.chipi.block;
import net.Chipperfluff.chipi.advancement.ModCriteria;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
@ -8,6 +7,8 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.Chipperfluff.chipi.advancement.ModCriteria;
public class ChipperPortalShape { public class ChipperPortalShape {
private final World world; private final World world;

View File

@ -1,6 +1,5 @@
package net.Chipperfluff.chipi.block; package net.Chipperfluff.chipi.block;
import net.Chipperfluff.chipi.ChipiMod;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.AbstractBlock; import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@ -11,6 +10,8 @@ import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.ChipiMod;
public class ModBlocks { public class ModBlocks {
public static final Block VOID_BLOCK = Registry.register( public static final Block VOID_BLOCK = Registry.register(

View File

@ -1,6 +1,5 @@
package net.Chipperfluff.chipi.block; package net.Chipperfluff.chipi.block;
import net.Chipperfluff.chipi.advancement.ModCriteria;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
@ -17,6 +16,8 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.Chipperfluff.chipi.advancement.ModCriteria;
public class VoidBlock extends Block { public class VoidBlock extends Block {
public VoidBlock(Settings settings) { public VoidBlock(Settings settings) {

View File

@ -1,12 +1,13 @@
package net.Chipperfluff.chipi.client; package net.Chipperfluff.chipi.client;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.minecraft.client.render.RenderLayer;
import net.Chipperfluff.chipi.block.ModBlocks; import net.Chipperfluff.chipi.block.ModBlocks;
import net.Chipperfluff.chipi.client.entity.ModEntityRenderers; import net.Chipperfluff.chipi.client.entity.ModEntityRenderers;
import net.Chipperfluff.chipi.client.hud.ChipiStatusBar; import net.Chipperfluff.chipi.client.hud.ChipiStatusBar;
import net.Chipperfluff.chipi.util.ClientTickScheduler; import net.Chipperfluff.chipi.util.ClientTickScheduler;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.minecraft.client.render.RenderLayer;
public class ChipiClient implements ClientModInitializer { public class ChipiClient implements ClientModInitializer {

View File

@ -1,14 +1,14 @@
package net.Chipperfluff.chipi.client; package net.Chipperfluff.chipi.client;
import net.Chipperfluff.chipi.block.ModBlocks;
import net.Chipperfluff.chipi.item.ModItems;
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.Chipperfluff.chipi.block.ModBlocks;
import net.Chipperfluff.chipi.item.ModItems;
public final class ModTooltips { public final class ModTooltips {
private ModTooltips() { private ModTooltips() {}
}
public static void register() { public static void register() {

View File

@ -1,13 +1,14 @@
package net.Chipperfluff.chipi.client.entity; package net.Chipperfluff.chipi.client.entity;
import net.Chipperfluff.chipi.ChipiMod;
import net.Chipperfluff.chipi.entity.MepEntity;
import net.minecraft.client.render.entity.BipedEntityRenderer; import net.minecraft.client.render.entity.BipedEntityRenderer;
import net.minecraft.client.render.entity.EntityRendererFactory; import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.client.render.entity.model.BipedEntityModel;
import net.minecraft.client.render.entity.model.EntityModelLayers; import net.minecraft.client.render.entity.model.EntityModelLayers;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.ChipiMod;
import net.Chipperfluff.chipi.entity.MepEntity;
public class MepRenderer extends BipedEntityRenderer<MepEntity, BipedEntityModel<MepEntity>> { public class MepRenderer extends BipedEntityRenderer<MepEntity, BipedEntityModel<MepEntity>> {
private static final Identifier TEXTURE = new Identifier(ChipiMod.MOD_ID, "textures/entity/mep.png"); private static final Identifier TEXTURE = new Identifier(ChipiMod.MOD_ID, "textures/entity/mep.png");

View File

@ -1,8 +1,9 @@
package net.Chipperfluff.chipi.client.entity; package net.Chipperfluff.chipi.client.entity;
import net.Chipperfluff.chipi.entity.ModEntities;
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
import net.Chipperfluff.chipi.entity.ModEntities;
public class ModEntityRenderers { public class ModEntityRenderers {
public static void register() { public static void register() {

View File

@ -1,6 +1,5 @@
package net.Chipperfluff.chipi.client.entity; package net.Chipperfluff.chipi.client.entity;
import net.Chipperfluff.chipi.entity.PlayerJrEntity;
import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.BipedEntityRenderer; import net.minecraft.client.render.entity.BipedEntityRenderer;
@ -11,6 +10,8 @@ import net.minecraft.client.util.DefaultSkinHelper;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.entity.PlayerJrEntity;
public class PlayerJrRenderer public class PlayerJrRenderer
extends BipedEntityRenderer<PlayerJrEntity, BipedEntityModel<PlayerJrEntity>> { extends BipedEntityRenderer<PlayerJrEntity, BipedEntityModel<PlayerJrEntity>> {

View File

@ -1,12 +1,13 @@
package net.Chipperfluff.chipi.client.hud; package net.Chipperfluff.chipi.client.hud;
import net.Chipperfluff.chipi.item.ModItems;
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.DrawContext;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.Chipperfluff.chipi.item.ModItems;
import static net.Chipperfluff.chipi.util.ChipiTrackedData.CHIPI_ENERGY; import static net.Chipperfluff.chipi.util.ChipiTrackedData.CHIPI_ENERGY;
public class ChipiStatusBar { public class ChipiStatusBar {

View File

@ -4,8 +4,6 @@ import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.BoolArgumentType; import com.mojang.brigadier.arguments.BoolArgumentType;
import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.CommandContext;
import net.Chipperfluff.chipi.world.gen.struct.ChipiStructures;
import net.minecraft.command.CommandSource; import net.minecraft.command.CommandSource;
import net.minecraft.command.argument.BlockPosArgumentType; import net.minecraft.command.argument.BlockPosArgumentType;
import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.CommandManager;
@ -14,6 +12,8 @@ import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.Chipperfluff.chipi.world.gen.struct.ChipiStructures;
public class ChpCommand { public class ChpCommand {
public static void register(CommandDispatcher<ServerCommandSource> dispatcher) { public static void register(CommandDispatcher<ServerCommandSource> dispatcher) {

View File

@ -3,8 +3,6 @@ package net.Chipperfluff.chipi.command;
import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.CommandContext;
import net.Chipperfluff.chipi.world.gen.struct.ChipiStructures;
import net.minecraft.command.CommandSource; import net.minecraft.command.CommandSource;
import net.minecraft.command.argument.BlockPosArgumentType; import net.minecraft.command.argument.BlockPosArgumentType;
import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.CommandManager;
@ -13,6 +11,8 @@ import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.Chipperfluff.chipi.world.gen.struct.ChipiStructures;
public class CspCommand { public class CspCommand {
public static void register(CommandDispatcher<ServerCommandSource> dispatcher) { public static void register(CommandDispatcher<ServerCommandSource> dispatcher) {

View File

@ -2,10 +2,6 @@ package net.Chipperfluff.chipi.command;
import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.context.CommandContext;
import net.Chipperfluff.chipi.entity.ModEntities;
import net.Chipperfluff.chipi.entity.PlayerJrEntity;
import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.command.argument.EntityArgumentType;
import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.CommandManager;
import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.command.ServerCommandSource;
@ -14,6 +10,9 @@ import net.minecraft.server.world.ServerWorld;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.Chipperfluff.chipi.entity.ModEntities;
import net.Chipperfluff.chipi.entity.PlayerJrEntity;
public final class SpawnJrCommand { public final class SpawnJrCommand {
public static void register(CommandDispatcher<ServerCommandSource> dispatcher) { public static void register(CommandDispatcher<ServerCommandSource> dispatcher) {

View File

@ -1,11 +1,12 @@
package net.Chipperfluff.chipi.effect; package net.Chipperfluff.chipi.effect;
import net.Chipperfluff.chipi.ChipiMod;
import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.ChipiMod;
public class ModEffects { public class ModEffects {
public static final StatusEffect CHIPI_BLESSING = new ChipiBlessingEffect(); public static final StatusEffect CHIPI_BLESSING = new ChipiBlessingEffect();

View File

@ -1,7 +1,5 @@
package net.Chipperfluff.chipi.effect; package net.Chipperfluff.chipi.effect;
import net.Chipperfluff.chipi.entity.ModEntities;
import net.Chipperfluff.chipi.entity.PlayerJrEntity;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.attribute.EntityAttributeInstance; import net.minecraft.entity.attribute.EntityAttributeInstance;
import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.attribute.EntityAttributes;
@ -11,9 +9,11 @@ import net.minecraft.entity.effect.StatusEffectCategory;
import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import java.util.UUID; import java.util.UUID;
import net.Chipperfluff.chipi.entity.ModEntities;
import net.Chipperfluff.chipi.entity.PlayerJrEntity;
public class PregnantEffect extends StatusEffect { public class PregnantEffect extends StatusEffect {
public static final int TOTAL_DURATION = 20 * 60 * 10; // 10 min public static final int TOTAL_DURATION = 20 * 60 * 10; // 10 min

View File

@ -3,6 +3,7 @@ package net.Chipperfluff.chipi.entity;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.SlabBlock; import net.minecraft.block.SlabBlock;
import net.minecraft.block.StairsBlock; import net.minecraft.block.StairsBlock;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.ai.goal.*; import net.minecraft.entity.ai.goal.*;
@ -81,7 +82,7 @@ public class MepEntity extends PathAwareEntity {
// === ATTACK OVERRIDE (AURA IMMUNITY) === // === ATTACK OVERRIDE (AURA IMMUNITY) ===
@Override @Override
public boolean tryAttack(net.minecraft.entity.Entity target) { public boolean tryAttack(Entity target) {
if (target instanceof PlayerEntity player) { if (target instanceof PlayerEntity player) {
if (ProtectionAuraHandler.hasAura(player)) { if (ProtectionAuraHandler.hasAura(player)) {
return false; // chase but never hit return false; // chase but never hit

View File

@ -1,12 +1,9 @@
package net.Chipperfluff.chipi.entity; package net.Chipperfluff.chipi.entity;
import net.Chipperfluff.chipi.entity.MepEntity;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityDimensions;
import net.minecraft.entity.SpawnGroup;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnGroup;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
@ -33,6 +30,5 @@ public final class ModEntities {
.build() .build()
); );
private ModEntities() { private ModEntities() {}
}
} }

View File

@ -17,7 +17,6 @@ import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import java.util.UUID; import java.util.UUID;
public class PlayerJrEntity extends PathAwareEntity { public class PlayerJrEntity extends PathAwareEntity {

View File

@ -2,10 +2,10 @@ package net.Chipperfluff.chipi.entity;
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.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.SpawnGroup; import net.minecraft.entity.SpawnGroup;
import net.minecraft.entity.SpawnReason; import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.SpawnRestriction; import net.minecraft.entity.SpawnRestriction;
@ -13,14 +13,12 @@ import net.minecraft.entity.mob.MobEntity;
import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
import net.minecraft.world.Heightmap; import net.minecraft.world.Heightmap;
import net.minecraft.world.ServerWorldAccess; import net.minecraft.world.ServerWorldAccess;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.Box;
public final class SpawnLogic { public final class SpawnLogic {
@ -30,8 +28,7 @@ public final class SpawnLogic {
private static final RegistryKey<Biome> VOID_BIOME = private static final RegistryKey<Biome> VOID_BIOME =
RegistryKey.of(RegistryKeys.BIOME, new Identifier("chipi", "void")); RegistryKey.of(RegistryKeys.BIOME, new Identifier("chipi", "void"));
private SpawnLogic() { private SpawnLogic() {}
}
public static void register() { public static void register() {

View File

@ -1,13 +1,14 @@
package net.Chipperfluff.chipi.item; package net.Chipperfluff.chipi.item;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.util.UseAction; import net.minecraft.util.UseAction;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.Chipperfluff.chipi.effect.ModEffects; import net.Chipperfluff.chipi.effect.ModEffects;
public class MepMilkItem extends Item { public class MepMilkItem extends Item {

View File

@ -20,5 +20,4 @@ public class ModFoodComponents {
new FoodComponent.Builder() new FoodComponent.Builder()
.alwaysEdible() .alwaysEdible()
.build(); .build();
} }

View File

@ -1,8 +1,5 @@
package net.Chipperfluff.chipi.item; package net.Chipperfluff.chipi.item;
import net.Chipperfluff.chipi.ChipiMod;
import net.Chipperfluff.chipi.block.ModBlocks;
import net.Chipperfluff.chipi.item.music.ModMusicDiscs;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -11,6 +8,10 @@ import net.minecraft.registry.Registry;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.ChipiMod;
import net.Chipperfluff.chipi.block.ModBlocks;
import net.Chipperfluff.chipi.item.music.ModMusicDiscs;
public class ModItemGroups { public class ModItemGroups {
public static final ItemGroup CHIPI_GROUP = Registry.register( public static final ItemGroup CHIPI_GROUP = Registry.register(
@ -59,7 +60,5 @@ public class ModItemGroups {
.build() .build()
); );
public static void register() { public static void register() {}
// force class load
}
} }

View File

@ -1,17 +1,16 @@
package net.Chipperfluff.chipi.item; package net.Chipperfluff.chipi.item;
import net.Chipperfluff.chipi.ChipiMod;
import net.Chipperfluff.chipi.block.ModBlocks;
import net.Chipperfluff.chipi.entity.ModEntities;
import net.Chipperfluff.chipi.item.armor.ChipperArmorMaterial;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.item.*; import net.minecraft.item.*;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.item.tool.ChipperToolMaterial;
import net.Chipperfluff.chipi.item.MepMilkItem;
import net.Chipperfluff.chipi.ChipiMod;
import net.Chipperfluff.chipi.block.ModBlocks;
import net.Chipperfluff.chipi.entity.ModEntities;
import net.Chipperfluff.chipi.item.armor.ChipperArmorMaterial;
import net.Chipperfluff.chipi.item.tool.ChipperToolMaterial;
public class ModItems { public class ModItems {

View File

@ -1,7 +1,5 @@
package net.Chipperfluff.chipi.item; package net.Chipperfluff.chipi.item;
import net.Chipperfluff.chipi.effect.ModEffects;
import net.Chipperfluff.chipi.sound.ModSounds;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@ -10,11 +8,14 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsage; import net.minecraft.item.ItemUsage;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundCategory;
import net.minecraft.text.Text;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.UseAction; import net.minecraft.util.UseAction;
import net.minecraft.util.TypedActionResult; import net.minecraft.util.TypedActionResult;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.text.Text;
import net.Chipperfluff.chipi.effect.ModEffects;
import net.Chipperfluff.chipi.sound.ModSounds;
public class PlayerMilkItem extends Item { public class PlayerMilkItem extends Item {

View File

@ -1,16 +1,16 @@
package net.Chipperfluff.chipi.item.armor; package net.Chipperfluff.chipi.item.armor;
import net.Chipperfluff.chipi.item.ModItems;
import net.minecraft.item.ArmorItem; import net.minecraft.item.ArmorItem;
import net.minecraft.item.ArmorMaterial; import net.minecraft.item.ArmorMaterial;
import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Ingredient;
import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvent;
import net.minecraft.sound.SoundEvents; import net.minecraft.sound.SoundEvents;
import net.minecraft.util.Util; import net.minecraft.util.Util;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.Map; import java.util.Map;
import net.Chipperfluff.chipi.item.ModItems;
public class ChipperArmorMaterial implements ArmorMaterial { public class ChipperArmorMaterial implements ArmorMaterial {
public static final ChipperArmorMaterial INSTANCE = new ChipperArmorMaterial(); public static final ChipperArmorMaterial INSTANCE = new ChipperArmorMaterial();

View File

@ -1,6 +1,5 @@
package net.Chipperfluff.chipi.armor; package net.Chipperfluff.chipi.armor;
import net.Chipperfluff.chipi.item.ModItems;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.SlabBlock; import net.minecraft.block.SlabBlock;
import net.minecraft.block.StairsBlock; import net.minecraft.block.StairsBlock;
@ -12,8 +11,10 @@ import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import static net.Chipperfluff.chipi.util.ChipiTrackedData.CHIPI_ENERGY; import net.Chipperfluff.chipi.item.ModItems;
import static net.Chipperfluff.chipi.server.ChipiServerEvents.CHIPI_DIMENSION_KEY; import static net.Chipperfluff.chipi.server.ChipiServerEvents.CHIPI_DIMENSION_KEY;
import static net.Chipperfluff.chipi.util.ChipiTrackedData.CHIPI_ENERGY;
public final class ProtectionAuraHandler { public final class ProtectionAuraHandler {

View File

@ -1,16 +1,16 @@
package net.Chipperfluff.chipi.item.music; package net.Chipperfluff.chipi.item.music;
import net.Chipperfluff.chipi.ChipiMod;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.MusicDiscItem; import net.minecraft.item.MusicDiscItem;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvent;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import net.Chipperfluff.chipi.ChipiMod;
public class ModMusicDiscs { public class ModMusicDiscs {
private static final Map<String, Item> DISCS = new LinkedHashMap<>(); private static final Map<String, Item> DISCS = new LinkedHashMap<>();

View File

@ -1,8 +1,3 @@
package net.Chipperfluff.chipi.item.music; package net.Chipperfluff.chipi.item.music;
public record MusicDiscDef( public record MusicDiscDef(String name, int comparatorOutput, int minutes, int seconds) {}
String name,
int comparatorOutput,
int minutes,
int seconds
) {}

View File

@ -2,8 +2,8 @@ package net.Chipperfluff.chipi.item.tool;
import net.minecraft.item.ToolMaterial; import net.minecraft.item.ToolMaterial;
import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Ingredient;
import net.Chipperfluff.chipi.item.ModItems;
import net.Chipperfluff.chipi.item.ModItems;
public enum ChipperToolMaterial implements ToolMaterial { public enum ChipperToolMaterial implements ToolMaterial {
INSTANCE; INSTANCE;

View File

@ -2,7 +2,6 @@ package net.Chipperfluff.chipi.mixin;
import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.DataTracker;
import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedData;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;

View File

@ -1,9 +1,6 @@
package net.Chipperfluff.chipi.mixin; package net.Chipperfluff.chipi.mixin;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import net.Chipperfluff.chipi.effect.ModEffects;
import net.Chipperfluff.chipi.effect.PregnantEffect;
import net.Chipperfluff.chipi.util.ChipiTrackedData;
import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.DataTracker;
import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@ -16,6 +13,10 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.Chipperfluff.chipi.effect.ModEffects;
import net.Chipperfluff.chipi.effect.PregnantEffect;
import net.Chipperfluff.chipi.util.ChipiTrackedData;
@Mixin(PlayerEntity.class) @Mixin(PlayerEntity.class)
public abstract class PlayerEntityMixin { public abstract class PlayerEntityMixin {

View File

@ -1,34 +1,35 @@
package net.Chipperfluff.chipi.server; package net.Chipperfluff.chipi.server;
import net.Chipperfluff.chipi.SpawnPlacedState; import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import net.Chipperfluff.chipi.armor.ProtectionAuraHandler; import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
import net.Chipperfluff.chipi.block.ChipperPortalBlock;
import net.Chipperfluff.chipi.world.gen.ChipiDungeonGenerator;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents;
import net.fabricmc.fabric.api.event.player.UseEntityCallback;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.structure.StructurePlacementData; import net.minecraft.structure.StructurePlacementData;
import net.minecraft.structure.StructureTemplate; import net.minecraft.structure.StructureTemplate;
import net.minecraft.util.ActionResult;
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.minecraft.world.World; import net.minecraft.world.World;
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.GenerationStep;
import net.fabricmc.fabric.api.event.player.UseEntityCallback;
import net.minecraft.util.ActionResult; import net.Chipperfluff.chipi.SpawnPlacedState;
import net.minecraft.item.ItemStack; import net.Chipperfluff.chipi.armor.ProtectionAuraHandler;
import net.minecraft.item.Items; import net.Chipperfluff.chipi.block.ChipperPortalBlock;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.Chipperfluff.chipi.item.ModItems; import net.Chipperfluff.chipi.item.ModItems;
import net.Chipperfluff.chipi.world.gen.ChipiDungeonGenerator;
public final class ChipiServerEvents { public final class ChipiServerEvents {

View File

@ -1,11 +1,12 @@
package net.Chipperfluff.chipi.sound; package net.Chipperfluff.chipi.sound;
import net.Chipperfluff.chipi.ChipiMod;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvent;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.ChipiMod;
public class ModSounds { public class ModSounds {
public static final SoundEvent MEP_MILK = register("entity.mep.milk"); public static final SoundEvent MEP_MILK = register("entity.mep.milk");

View File

@ -6,9 +6,7 @@ import net.minecraft.entity.data.TrackedDataHandlerRegistry;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
public final class ChipiTrackedData { public final class ChipiTrackedData {
public static final TrackedData<Float> CHIPI_ENERGY = DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.FLOAT);
public static final TrackedData<Float> CHIPI_ENERGY =
DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.FLOAT);
private ChipiTrackedData() {} private ChipiTrackedData() {}
} }

View File

@ -2,7 +2,6 @@ package net.Chipperfluff.chipi.util;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;

View File

@ -2,7 +2,6 @@ package net.Chipperfluff.chipi.util;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;

View File

@ -1,11 +1,12 @@
package net.Chipperfluff.chipi.world.gen; package net.Chipperfluff.chipi.world.gen;
import net.minecraft.block.BlockState;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
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.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
public class ChipiDungeonGenerator { public class ChipiDungeonGenerator {
@ -24,13 +25,10 @@ public class ChipiDungeonGenerator {
// Center-to-center step so corridors start 1 block inside the north room and end 1 block inside // Center-to-center step so corridors start 1 block inside the north room and end 1 block inside
// the south room. // the south room.
private static final int STEP_Z = private static final int STEP_Z = ROOM_EXTENT_SOUTH + CORRIDOR_LENGTH + ROOM_EXTENT_NORTH - 1; // 25
ROOM_EXTENT_SOUTH + CORRIDOR_LENGTH + ROOM_EXTENT_NORTH - 1; // 25 private static final int STEP_X = ROOM_EXTENT_EAST + CORRIDOR_LENGTH + ROOM_EXTENT_WEST - 1; // 25
private static final int STEP_X =
ROOM_EXTENT_EAST + CORRIDOR_LENGTH + ROOM_EXTENT_WEST - 1; // 25
private static final int ROWS_SOUTH = private static final int ROWS_SOUTH = 40; // rows of rooms south of spawn (spawn room itself is already placed)
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 ChipiDungeonGenerator() {} private ChipiDungeonGenerator() {}
@ -40,8 +38,7 @@ public class ChipiDungeonGenerator {
// Spawn is already placed. Fixed anchors (not relative to portal): // Spawn is already placed. Fixed anchors (not relative to portal):
// first corridor origin, then the first generated room center is south of spawn. // first corridor origin, then the first generated room center is south of spawn.
BlockPos firstCorridorAnchor = new BlockPos(5, CORRIDOR_Y, 11); BlockPos firstCorridorAnchor = new BlockPos(5, CORRIDOR_Y, 11);
BlockPos firstGeneratedRoomCenter = BlockPos firstGeneratedRoomCenter = new BlockPos(5, ROOM_Y, 24); // explicit first floor anchor
new BlockPos(5, ROOM_Y, 24); // explicit first floor anchor
// First room/corridor use direct instances as requested. // First room/corridor use direct instances as requested.
RoomBaseStructure firstRoom = WorldMaster.getDefaultRoom(); RoomBaseStructure firstRoom = WorldMaster.getDefaultRoom();
@ -60,16 +57,14 @@ 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 = int gridX = col; // grid 0,0 is the first generated room; -X -> negative gridX, +X -> positive gridX
col; // grid 0,0 is the first generated room; -X -> negative gridX, +X ->
// positive gridX
int gridY = row; // gridY increases southward only int gridY = row; // gridY increases southward only
BlockPos center = BlockPos center = new BlockPos(
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(ctx(world, gridX, gridY, center, null)); RoomBaseStructure room = WorldMaster.resolveRoom(ctx(world, gridX, gridY, center, null));
room.placeAt(world, center); room.placeAt(world, center);
@ -84,20 +79,19 @@ public class ChipiDungeonGenerator {
int gridX = col; int gridX = col;
int gridY = row; int gridY = row;
BlockPos currentCenter = BlockPos currentCenter = new BlockPos(
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)
);
BlockPos anchorSouth = BlockPos anchorSouth = new BlockPos(
new BlockPos(
currentCenter.getX(), currentCenter.getX(),
CORRIDOR_Y, CORRIDOR_Y,
currentCenter.getZ() + ROOM_EXTENT_SOUTH); currentCenter.getZ() + ROOM_EXTENT_SOUTH
);
CorridorNSStructure corridorNS = CorridorNSStructure corridorNS = WorldMaster.resolveCorridorNS(ctx(world, gridX, gridY, anchorSouth, null));
WorldMaster.resolveCorridorNS(ctx(world, gridX, gridY, anchorSouth, null));
corridorNS.placeAt(world, anchorSouth); corridorNS.placeAt(world, anchorSouth);
WorldMaster.afterPlaceCorridorNS(ctx(world, gridX, gridY, anchorSouth, corridorNS)); WorldMaster.afterPlaceCorridorNS(ctx(world, gridX, gridY, anchorSouth, corridorNS));
} }
@ -109,20 +103,19 @@ public class ChipiDungeonGenerator {
int gridX = col; int gridX = col;
int gridY = row; int gridY = row;
BlockPos currentCenter = BlockPos currentCenter = new BlockPos(
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)
);
BlockPos anchorEast = BlockPos anchorEast = new BlockPos(
new BlockPos(
currentCenter.getX() + ROOM_EXTENT_EAST, currentCenter.getX() + ROOM_EXTENT_EAST,
CORRIDOR_Y, CORRIDOR_Y,
currentCenter.getZ()); currentCenter.getZ()
);
CorridorEWStructure corridorEW = CorridorEWStructure corridorEW = WorldMaster.resolveCorridorEW(ctx(world, gridX, gridY, anchorEast, null));
WorldMaster.resolveCorridorEW(ctx(world, gridX, gridY, anchorEast, null));
corridorEW.placeAt(world, anchorEast); corridorEW.placeAt(world, anchorEast);
WorldMaster.afterPlaceCorridorEW(ctx(world, gridX, gridY, anchorEast, corridorEW)); WorldMaster.afterPlaceCorridorEW(ctx(world, gridX, gridY, anchorEast, corridorEW));
} }
@ -136,18 +129,10 @@ public class ChipiDungeonGenerator {
runInChipi(world, "fill 7 87 15 3 91 16 minecraft:air"); runInChipi(world, "fill 7 87 15 3 91 16 minecraft:air");
runInChipi( runInChipi(world, "setblock 4 88 15 minecraft:deepslate_tile_stairs[facing=west,waterlogged=true]");
world, runInChipi(world, "setblock 4 88 16 minecraft:deepslate_tile_stairs[facing=west,waterlogged=true]");
"setblock 4 88 15 minecraft:deepslate_tile_stairs[facing=west,waterlogged=true]"); runInChipi(world, "setblock 6 88 15 minecraft:deepslate_tile_stairs[facing=east,waterlogged=true]");
runInChipi( runInChipi(world, "setblock 6 88 16 minecraft:deepslate_tile_stairs[facing=east,waterlogged=true]");
world,
"setblock 4 88 16 minecraft:deepslate_tile_stairs[facing=west,waterlogged=true]");
runInChipi(
world,
"setblock 6 88 15 minecraft:deepslate_tile_stairs[facing=east,waterlogged=true]");
runInChipi(
world,
"setblock 6 88 16 minecraft:deepslate_tile_stairs[facing=east,waterlogged=true]");
runInChipi(world, "fill 7 88 15 7 91 16 minecraft:deepslate_tiles"); runInChipi(world, "fill 7 88 15 7 91 16 minecraft:deepslate_tiles");
runInChipi(world, "fill 3 88 16 3 91 15 minecraft:deepslate_tiles"); runInChipi(world, "fill 3 88 16 3 91 15 minecraft:deepslate_tiles");
@ -183,7 +168,8 @@ public class ChipiDungeonGenerator {
.getCommandManager() .getCommandManager()
.executeWithPrefix( .executeWithPrefix(
world.getServer().getCommandSource(), world.getServer().getCommandSource(),
"execute in chipi:chipi_dimension run " + command); "execute in chipi:chipi_dimension run " + command
);
} }
private static DungeonContext ctx(ServerWorld world, int gridX, int gridY, BlockPos origin, ChipiStructure structure) { private static DungeonContext ctx(ServerWorld world, int gridX, int gridY, BlockPos origin, ChipiStructure structure) {

View File

@ -1,6 +1,6 @@
package net.Chipperfluff.chipi.world.gen; package net.Chipperfluff.chipi.world.gen;
import java.util.Optional; import net.minecraft.block.Blocks;
import net.minecraft.block.entity.StructureBlockBlockEntity; import net.minecraft.block.entity.StructureBlockBlockEntity;
import net.minecraft.block.enums.StructureBlockMode; import net.minecraft.block.enums.StructureBlockMode;
import net.minecraft.server.world.ServerWorld; import net.minecraft.server.world.ServerWorld;
@ -9,7 +9,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.util.math.Vec3i; import net.minecraft.util.math.Vec3i;
import net.minecraft.block.Blocks; import java.util.Optional;
public abstract class ChipiStructure { public abstract class ChipiStructure {

View File

@ -1,10 +1,11 @@
package net.Chipperfluff.chipi.world.gen; package net.Chipperfluff.chipi.world.gen;
import net.minecraft.block.Blocks;
import net.minecraft.util.math.BlockPos;
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.Blocks;
import net.minecraft.util.math.BlockPos;
public final class WorldMaster { public final class WorldMaster {

View File

@ -1,11 +1,11 @@
package net.Chipperfluff.chipi.world.gen.struct; package net.Chipperfluff.chipi.world.gen.struct;
import net.Chipperfluff.chipi.world.gen.ChipiStructure; // <-- THIS WAS MISSING
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import net.Chipperfluff.chipi.world.gen.ChipiStructure; // <-- THIS WAS MISSING
public class ChipiStructures { public class ChipiStructures {
private static final Map<String, ChipiStructure> REGISTRY = new HashMap<>(); private static final Map<String, ChipiStructure> REGISTRY = new HashMap<>();

View File

@ -1,8 +1,9 @@
package net.Chipperfluff.chipi.world.gen.struct; package net.Chipperfluff.chipi.world.gen.struct;
import net.Chipperfluff.chipi.world.gen.ChipiStructure;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.world.gen.ChipiStructure;
public class CorridorEWStructure extends ChipiStructure { public class CorridorEWStructure extends ChipiStructure {
public CorridorEWStructure() { public CorridorEWStructure() {

View File

@ -1,8 +1,9 @@
package net.Chipperfluff.chipi.world.gen.struct; package net.Chipperfluff.chipi.world.gen.struct;
import net.Chipperfluff.chipi.world.gen.ChipiStructure;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.world.gen.ChipiStructure;
public class CorridorNSStructure extends ChipiStructure { public class CorridorNSStructure extends ChipiStructure {
public CorridorNSStructure() { public CorridorNSStructure() {

View File

@ -1,8 +1,9 @@
package net.Chipperfluff.chipi.world.gen.struct; package net.Chipperfluff.chipi.world.gen.struct;
import net.Chipperfluff.chipi.world.gen.ChipiStructure;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.world.gen.ChipiStructure;
public class RoomBaseStructure extends ChipiStructure { public class RoomBaseStructure extends ChipiStructure {
public RoomBaseStructure() { public RoomBaseStructure() {

View File

@ -1,8 +1,9 @@
package net.Chipperfluff.chipi.world.gen.struct; package net.Chipperfluff.chipi.world.gen.struct;
import net.Chipperfluff.chipi.world.gen.ChipiStructure;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.Chipperfluff.chipi.world.gen.ChipiStructure;
public class SpawnStructure extends ChipiStructure { public class SpawnStructure extends ChipiStructure {
public SpawnStructure() { public SpawnStructure() {