Skip to content

Commit 297055d

Browse files
URANIUM MINING FACILITY AND LOOT!!!!!!!
1 parent bdfbe3d commit 297055d

12 files changed

Lines changed: 202 additions & 4 deletions

File tree

src/main/java/net/tcmfatbird/tutorialmod/TutorialMod.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,16 @@
1515
import net.tcmfatbird.tutorialmod.feature.BlockHighlightTracker;
1616
import net.tcmfatbird.tutorialmod.feature.ChatMentions;
1717
import net.tcmfatbird.tutorialmod.feature.UraniumRadiationHandler;
18-
import net.tcmfatbird.tutorialmod.network.ClockTogglePacket;
18+
import net.tcmfatbird.tutorialmod.network.*;
1919
import net.tcmfatbird.tutorialmod.item.ModItemGroups;
2020
import net.tcmfatbird.tutorialmod.item.ModItems;
21-
import net.tcmfatbird.tutorialmod.network.BlockHighlightPacket;
22-
import net.tcmfatbird.tutorialmod.network.RadiationLevelPacket;
2321
import net.tcmfatbird.tutorialmod.util.ChatFormatter;
2422
import net.minecraft.text.MutableText;
2523
import net.minecraft.text.Text;
2624
import net.minecraft.util.math.BlockPos;
2725
import org.slf4j.Logger;
2826
import org.slf4j.LoggerFactory;
2927
//import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
30-
import net.tcmfatbird.tutorialmod.network.SetTimePacket;
3128
import net.tcmfatbird.tutorialmod.world.ModOreGeneration;
3229

3330
public class TutorialMod implements ModInitializer {
@@ -44,6 +41,7 @@ public void onInitialize() {
4441
MutationEnchantment.register();
4542
PayloadTypeRegistry.playC2S().register(SetTimePacket.ID, SetTimePacket.CODEC);
4643
PayloadTypeRegistry.playS2C().register(RadiationLevelPacket.ID, RadiationLevelPacket.CODEC);
44+
PayloadTypeRegistry.playS2C().register(NearestUraniumPacket.ID, NearestUraniumPacket.CODEC);
4745

4846
ServerPlayNetworking.registerGlobalReceiver(SetTimePacket.ID, (payload, context) -> {
4947
context.server().execute(() -> {

src/main/java/net/tcmfatbird/tutorialmod/TutorialModClient.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import net.minecraft.util.Formatting;
1111
import net.tcmfatbird.tutorialmod.feature.BlockHighlightRenderer;
1212
import net.tcmfatbird.tutorialmod.feature.GeigerCounterClient;
13+
import net.tcmfatbird.tutorialmod.feature.GeigerHud;
1314
import net.tcmfatbird.tutorialmod.gui.ClockScreen;
1415
import net.tcmfatbird.tutorialmod.item.ModItems;
1516
import net.tcmfatbird.tutorialmod.network.BlockHighlightPacket;
1617
import net.tcmfatbird.tutorialmod.network.ClockTogglePacket;
18+
import net.tcmfatbird.tutorialmod.network.NearestUraniumPacket;
1719
import net.tcmfatbird.tutorialmod.network.RadiationLevelPacket;
1820
import org.lwjgl.glfw.GLFW;
1921

@@ -25,6 +27,14 @@ public class TutorialModClient implements ClientModInitializer {
2527

2628
@Override
2729
public void onInitializeClient() {
30+
GeigerHud.register();
31+
32+
ClientPlayNetworking.registerGlobalReceiver(NearestUraniumPacket.ID, (payload, context) -> {
33+
context.client().execute(() -> {
34+
GeigerCounterClient.setNearestDistance(payload.distance());
35+
});
36+
});
37+
2838
// --- KEYBIND (no InputUtil needed, just pass the int key code directly) ---
2939
clockGuiKey = KeyBindingHelper.registerKeyBinding(new KeyBinding(
3040
"key.tutorialmod.clockgui",

src/main/java/net/tcmfatbird/tutorialmod/feature/GeigerCounterClient.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,18 @@ public class GeigerCounterClient {
88

99
private static int radiationLevel = 0;
1010
private static int tickCounter = 0;
11+
private static int nearestDistance = Integer.MAX_VALUE;
12+
13+
public static void setNearestDistance(int distance) {
14+
nearestDistance = distance;
15+
}
16+
17+
public static int getRadiationLevel() {
18+
return radiationLevel;
19+
}
20+
public static int getNearestDistance() {
21+
return nearestDistance;
22+
}
1123

1224
// Beep every N ticks depending on level
1325
private static final int[] BEEP_INTERVALS = {40, 15, 4};
@@ -40,5 +52,6 @@ public static void tick(MinecraftClient client) {
4052
public static void reset() {
4153
radiationLevel = 0;
4254
tickCounter = 0;
55+
nearestDistance = Integer.MAX_VALUE;
4356
}
4457
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package net.tcmfatbird.tutorialmod.feature;
2+
3+
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
4+
import net.minecraft.client.MinecraftClient;
5+
import net.minecraft.client.gui.DrawContext;
6+
import net.minecraft.client.render.RenderTickCounter;
7+
import net.minecraft.item.ItemStack;
8+
import net.tcmfatbird.tutorialmod.item.ModItems;
9+
10+
public class GeigerHud {
11+
12+
public static void register() {
13+
HudRenderCallback.EVENT.register(GeigerHud::render);
14+
}
15+
16+
private static void render(DrawContext context, RenderTickCounter tickCounter) {
17+
MinecraftClient client = MinecraftClient.getInstance();
18+
if (client.player == null || client.world == null) return;
19+
20+
boolean holdingGeiger = client.player.getMainHandStack().isOf(ModItems.GEIGER_COUNTER)
21+
|| client.player.getOffHandStack().isOf(ModItems.GEIGER_COUNTER);
22+
if (!holdingGeiger) return;
23+
24+
int level = GeigerCounterClient.getRadiationLevel();
25+
int screenWidth = context.getScaledWindowWidth();
26+
int x = screenWidth / 2 - 51;
27+
int y = 10;
28+
29+
// Background box
30+
context.fill(x - 2, y - 2, x + 104, y + 24, 0xAA000000);
31+
32+
// Title
33+
context.drawText(client.textRenderer, "§a☢ GEIGER COUNTER", x + 4, y, 0x00FF00, false);
34+
35+
// Bar background
36+
context.fill(x, y + 10, x + 100, y + 18, 0xFF333333);
37+
38+
// Bar fill
39+
int barColor = level == 0 ? 0xFF00FF00 : level == 1 ? 0xFFFFAA00 : 0xFFFF0000;
40+
int barWidth = level == 0 ? 10 : level == 1 ? 55 : 100;
41+
context.fill(x, y + 10, x + barWidth, y + 18, barColor);
42+
43+
// Distance text
44+
int distance = GeigerCounterClient.getNearestDistance();
45+
String distText = distance == Integer.MAX_VALUE ? "§aNO SIGNAL" : "§f" + distance + "m";
46+
context.drawText(client.textRenderer, distText, x + 104 + 4, y + 10, 0xFFFFFF, false);
47+
}
48+
}

src/main/java/net/tcmfatbird/tutorialmod/feature/UraniumRadiationHandler.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
1818
import net.tcmfatbird.tutorialmod.item.ModItems;
19+
import net.tcmfatbird.tutorialmod.network.NearestUraniumPacket;
1920
import net.tcmfatbird.tutorialmod.network.RadiationLevelPacket;
2021

2122
public class UraniumRadiationHandler {
@@ -58,13 +59,33 @@ private static void onWorldTick(ServerWorld world) {
5859

5960
if (holdingGeiger) {
6061
int level = getRadiationLevel(world, player.getBlockPos());
62+
int distance = getNearestUraniumDistance(world, player.getBlockPos());
6163
ServerPlayNetworking.send(player, new RadiationLevelPacket(level));
64+
ServerPlayNetworking.send(player, new NearestUraniumPacket(distance));
6265
}
6366
}
6467

6568
cleanupDisconnectedPlayers(world);
6669
}
6770

71+
private static int getNearestUraniumDistance(ServerWorld world, BlockPos center) {
72+
int nearest = Integer.MAX_VALUE;
73+
BlockPos.Mutable mutablePos = new BlockPos.Mutable();
74+
for (int x = -10; x <= 10; x++) {
75+
for (int y = -10; y <= 10; y++) {
76+
for (int z = -10; z <= 10; z++) {
77+
mutablePos.set(center.getX() + x, center.getY() + y, center.getZ() + z);
78+
Block block = world.getBlockState(mutablePos).getBlock();
79+
if (block == ModBlocks.URANIUM_ORE || block == ModBlocks.URANIUM_DEEPSLATE_ORE) {
80+
int dist = (int) Math.sqrt(mutablePos.getSquaredDistance(center));
81+
if (dist < nearest) nearest = dist;
82+
}
83+
}
84+
}
85+
}
86+
return nearest;
87+
}
88+
6889
private static int getRadiationLevel(ServerWorld world, BlockPos center) {
6990
if (isNearUraniumOreInRadius(world, center, 4)) return 2;
7091
if (isNearUraniumOreInRadius(world, center, 10)) return 1;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package net.tcmfatbird.tutorialmod.network;
2+
3+
import net.minecraft.network.RegistryByteBuf;
4+
import net.minecraft.network.codec.PacketCodec;
5+
import net.minecraft.network.codec.PacketCodecs;
6+
import net.minecraft.network.packet.CustomPayload;
7+
import net.minecraft.util.Identifier;
8+
9+
public record NearestUraniumPacket(int distance) implements CustomPayload {
10+
11+
public static final Id<NearestUraniumPacket> ID =
12+
new Id<>(Identifier.of("tutorialmod", "nearest_uranium"));
13+
14+
public static final PacketCodec<RegistryByteBuf, NearestUraniumPacket> CODEC =
15+
PacketCodecs.INTEGER
16+
.xmap(NearestUraniumPacket::new, NearestUraniumPacket::distance)
17+
.cast();
18+
19+
@Override
20+
public Id<? extends CustomPayload> getId() { return ID; }
21+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"type": "minecraft:chest",
3+
"pools": [
4+
{
5+
"rolls": {
6+
"type": "minecraft:uniform",
7+
"min": 2,
8+
"max": 4
9+
},
10+
"entries": [
11+
{"type": "minecraft:item", "name": "minecraft:diamond", "weight": 5},
12+
{"type": "minecraft:item", "name": "minecraft:gold_ingot", "weight": 8},
13+
{"type": "minecraft:item", "name": "tutorialmod:pink_garnet", "weight": 6},
14+
{"type": "minecraft:item", "name": "tutorialmod:geiger_counter", "weight": 3},
15+
{"type": "minecraft:item", "name": "minecraft:enchanted_book", "weight": 2},
16+
{"type": "minecraft:item", "name": "minecraft:netherite_scrap", "weight": 1}
17+
]
18+
}
19+
]
20+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"type": "minecraft:chest",
3+
"pools": [
4+
{
5+
"rolls": {
6+
"type": "minecraft:uniform",
7+
"min": 3,
8+
"max": 6
9+
},
10+
"entries": [
11+
{"type": "minecraft:item", "name": "minecraft:iron_ingot", "weight": 10},
12+
{"type": "minecraft:item", "name": "minecraft:coal", "weight": 10},
13+
{"type": "minecraft:item", "name": "minecraft:torch", "weight": 8},
14+
{"type": "minecraft:item", "name": "minecraft:bread", "weight": 8},
15+
{"type": "minecraft:item", "name": "tutorialmod:raw_pink_garnet", "weight": 4},
16+
{"type": "minecraft:item", "name": "tutorialmod:starlight_ashes", "weight": 3},
17+
{"type": "minecraft:item", "name": "minecraft:iron_pickaxe", "weight": 3},
18+
{"type": "minecraft:item", "name": "minecraft:tnt", "weight": 2}
19+
]
20+
}
21+
]
22+
}
116 KB
Binary file not shown.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"type": "minecraft:jigsaw",
3+
"biomes": "#minecraft:is_overworld",
4+
"step": "underground_structures",
5+
"terrain_adaptation": "bury",
6+
"spawn_overrides": {},
7+
"start_pool": "tutorialmod:uranium_facility",
8+
"size": 1,
9+
"start_height": {
10+
"type": "minecraft:uniform",
11+
"min_inclusive": {"absolute": -55},
12+
"max_inclusive": {"absolute": -40}
13+
},
14+
"project_start_to_heightmap": "OCEAN_FLOOR_WG",
15+
"max_distance_from_center": 80,
16+
"use_expansion_hack": false
17+
}

0 commit comments

Comments
 (0)