obsidian cube and ender update
Some checks failed
Build Minecraft Mod / build (push) Has started running
Build Minecraft Mod / release (push) Has been cancelled

This commit is contained in:
2026-04-13 10:43:28 +02:00
parent 994d2b961b
commit 790ebd2535
41 changed files with 152 additions and 4 deletions

View File

@@ -0,0 +1,65 @@
package dev.tggamesyt.szar;
import com.mojang.serialization.Codec;
import net.minecraft.structure.StructurePlacementData;
import net.minecraft.util.BlockRotation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.Heightmap;
import net.minecraft.world.gen.structure.Structure;
import net.minecraft.world.gen.structure.StructureType;
import java.util.Optional;
public class ObsidianCubeStructure extends Structure {
public static final Codec<ObsidianCubeStructure> CODEC =
Structure.createCodec(ObsidianCubeStructure::new);
public ObsidianCubeStructure(Config config) {
super(config);
}
@Override
protected Optional<StructurePosition> getStructurePosition(Context context) {
return Structure.getStructurePosition(
context,
Heightmap.Type.WORLD_SURFACE_WG,
collector -> {
ChunkPos chunkPos = context.chunkPos();
int x = chunkPos.getCenterX();
int z = chunkPos.getCenterZ();
int y = context.chunkGenerator().getHeightInGround(
x, z,
Heightmap.Type.WORLD_SURFACE_WG,
context.world(),
context.noiseConfig()
);
BlockPos pos = new BlockPos(x, y, z);
StructurePlacementData placement =
new StructurePlacementData()
.setRotation(
BlockRotation.random(context.random())
);
collector.addPiece(
new ObsidianCubeStructurePiece(
context,
pos,
BlockPos.ORIGIN,
placement
)
);
}
);
}
@Override
public StructureType<?> getType() {
return Szar.OBSIDIAN_CUBE_TYPE;
}
}

View File

@@ -0,0 +1,49 @@
package dev.tggamesyt.szar;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.structure.SimpleStructurePiece;
import net.minecraft.structure.StructureContext;
import net.minecraft.structure.StructurePlacementData;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockBox;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.random.Random;
import net.minecraft.world.ServerWorldAccess;
import net.minecraft.world.gen.structure.Structure;
public class ObsidianCubeStructurePiece extends SimpleStructurePiece {
private static final Identifier TEMPLATE_ID =
new Identifier(Szar.MOD_ID, "obsidian_cube");
/* ===== NORMAL CONSTRUCTOR ===== */
public ObsidianCubeStructurePiece(
Structure.Context context,
BlockPos pos,
BlockPos origin,
StructurePlacementData placement
) {
super(
Szar.OBSIDIAN_CUBE_PIECE,
0,
context.structureTemplateManager(),
TEMPLATE_ID,
TEMPLATE_ID.toString(),
placement,
pos
);
}
/* ===== NBT CONSTRUCTOR ===== */
public ObsidianCubeStructurePiece(StructureContext context, NbtCompound nbt) {
super(
Szar.OBSIDIAN_CUBE_PIECE,
nbt,
context.structureTemplateManager(),
identifier -> new StructurePlacementData()
);
}
@Override
protected void handleMetadata(String metadata, BlockPos pos, ServerWorldAccess world, Random random, BlockBox boundingBox) {}
}

View File

@@ -23,10 +23,10 @@ public class ServerCosmetics {
public static final Identifier MOJANG_CAPES_SYNC = new Identifier(Szar.MOD_ID, "mojang_capes_sync");
private static final String CAPES_URL =
"https://raw.githubusercontent.com/tggamesyt/szar/main/capes.json";
"https://gitea.tggamesyt.dev/tggamesyt/szar/raw/main/capes.json";
private static final String USERS_URL =
"https://raw.githubusercontent.com/tggamesyt/szar/main/usercosmetics.json";
"https://gitea.tggamesyt.dev/tggamesyt/szar/raw/main/usercosmetics.json";
public static final Map<String, String> CAPES = new HashMap<>();
public static final Map<UUID, UserCosmetics> USERS = new HashMap<>();
@@ -112,7 +112,7 @@ public class ServerCosmetics {
USERS.put(uuid, user);
}
Szar.LOGGER.info("Loaded server capes & user cosmetics from GitHub");
Szar.LOGGER.info("Loaded server capes & user cosmetics from Gitea");
} catch (Exception e) {
Szar.LOGGER.error("Failed loading cosmetics", e);

View File

@@ -1785,7 +1785,19 @@ public class Szar implements ModInitializer {
new Identifier(MOD_ID, "island_piece"),
IslandStructurePiece::new
);
public static final StructurePieceType OBSIDIAN_CUBE_PIECE =
Registry.register(
Registries.STRUCTURE_PIECE,
new Identifier(MOD_ID, "obsidian_cube_piece"),
ObsidianCubeStructurePiece::new
);
public static final StructureType<ObsidianCubeStructure> OBSIDIAN_CUBE_TYPE =
Registry.register(
Registries.STRUCTURE_TYPE,
new Identifier(MOD_ID, "obsidian_cube"),
() -> ObsidianCubeStructure.CODEC
);
public static final StructureType<IslandStructure> ISLAND_TYPE =
Registry.register(
Registries.STRUCTURE_TYPE,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 581 B

After

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 B

After

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 441 B

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 359 B

View File

@@ -0,0 +1,8 @@
{
"type": "szar:obsidian_cube",
"biomes": "szar:chorus_forest",
"step": "surface_structures",
"terrain_adaptation": "none",
"spawn_overrides": {},
"config": {}
}

View File

@@ -0,0 +1,14 @@
{
"structures": [
{
"structure": "szar:obsidian_cube",
"weight": 1
}
],
"placement": {
"type": "minecraft:random_spread",
"spacing": 20,
"separation": 10,
"salt": 398826349
}
}