Skip to content

Commit b6f0395

Browse files
committed
okay, go 40 files I do not want to commit one by one
1 parent b883810 commit b6f0395

40 files changed

+716
-72
lines changed

src/generated/resources/assets/qstorage/lang/en_us.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
"block.qstorage.storage_matrix": "Storage Matrix",
66
"creative_tab.qstorage.block_group": "QS Blocks",
77
"creative_tab.qstorage.item_group": "QS Items",
8+
"death.attack.qstorage.oxygen_deprivation": "%s could not breath on land",
9+
"effect.qstorage.oxygen_deprivation": "Oxygen Deprivation",
10+
"gas.qstorage.hydrogen": "Hydrogen",
811
"item.qstorage.advanced_circuit": "Advanced Circuit",
912
"item.qstorage.advanced_storage_disk": "Advanced Storage Disk",
1013
"item.qstorage.basic_circuit": "Basic Circuit",

src/main/java/dev/wolfieboy09/qstorage/QSEvents.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
package dev.wolfieboy09.qstorage;
22

33
import dev.wolfieboy09.qstorage.api.registry.QSRegistries;
4-
import dev.wolfieboy09.qstorage.api.registry.gas.GasParticleProvider;
4+
import dev.wolfieboy09.qstorage.particles.GasParticleProvider;
5+
import dev.wolfieboy09.qstorage.registries.QSEffects;
56
import dev.wolfieboy09.qstorage.registries.QSParticleTypes;
7+
import net.minecraft.client.Minecraft;
8+
import net.minecraft.client.renderer.ShaderInstance;
9+
import net.minecraft.world.effect.MobEffectInstance;
10+
import net.minecraft.world.entity.player.Player;
11+
import net.neoforged.neoforge.client.event.ClientTickEvent;
612
import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent;
13+
import net.neoforged.neoforge.client.event.RegisterShadersEvent;
14+
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
15+
import net.neoforged.neoforge.event.entity.living.LivingEvent;
716
import net.neoforged.neoforge.registries.NewRegistryEvent;
817
import org.jetbrains.annotations.NotNull;
918

@@ -15,4 +24,6 @@ public static void registerRegistries(@NotNull NewRegistryEvent event) {
1524
public static void particle(@NotNull RegisterParticleProvidersEvent event) {
1625
event.registerSpriteSet(QSParticleTypes.GAS_PARTICLE.get(), GasParticleProvider::new);
1726
}
27+
28+
1829
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package dev.wolfieboy09.qstorage;
2+
3+
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
4+
import com.mojang.logging.LogUtils;
5+
import dev.wolfieboy09.qstorage.api.util.ResourceHelper;
6+
import net.minecraft.client.renderer.ShaderInstance;
7+
import net.neoforged.api.distmarker.Dist;
8+
import net.neoforged.bus.api.SubscribeEvent;
9+
import net.neoforged.fml.common.EventBusSubscriber;
10+
import net.neoforged.neoforge.client.event.RegisterShadersEvent;
11+
import org.slf4j.Logger;
12+
13+
import java.io.IOException;
14+
15+
@EventBusSubscriber(value = Dist.CLIENT, modid = QuantiumizedStorage.MOD_ID, bus = EventBusSubscriber.Bus.MOD)
16+
public class QSShading {
17+
private static ShaderInstance shaderInstance;
18+
private static final Logger LOGGER = LogUtils.getLogger();
19+
20+
public static ShaderInstance getShaderInstance() {
21+
return shaderInstance;
22+
}
23+
24+
@SubscribeEvent
25+
public static void shaderRegistry(RegisterShadersEvent event) {
26+
try {
27+
event.registerShader(new ShaderInstance(event.getResourceProvider(), ResourceHelper.asResource("oxygen_deprivation"), DefaultVertexFormat.BLIT_SCREEN), instance -> shaderInstance = instance);
28+
} catch (IOException e) {
29+
LOGGER.error("Failed to create shader of type 'oxygen_deprivation'");
30+
throw new RuntimeException(e);
31+
}
32+
}
33+
34+
}

src/main/java/dev/wolfieboy09/qstorage/QuantiumizedStorage.java

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
11
package dev.wolfieboy09.qstorage;
22

33
import com.mojang.logging.LogUtils;
4+
import dev.wolfieboy09.qstorage.api.util.ResourceHelper;
45
import dev.wolfieboy09.qstorage.component.QSDataComponents;
56
import dev.wolfieboy09.qstorage.registries.*;
7+
import net.minecraft.client.Minecraft;
8+
import net.minecraft.client.renderer.ShaderInstance;
9+
import net.minecraft.world.effect.MobEffectInstance;
10+
import net.minecraft.world.entity.player.Player;
11+
import net.neoforged.api.distmarker.Dist;
612
import net.neoforged.bus.api.IEventBus;
13+
import net.neoforged.bus.api.SubscribeEvent;
14+
import net.neoforged.fml.common.EventBusSubscriber;
715
import net.neoforged.fml.common.Mod;
816
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
17+
import net.neoforged.neoforge.client.event.ClientTickEvent;
18+
import net.neoforged.neoforge.common.NeoForge;
919
import org.jetbrains.annotations.NotNull;
1020
import org.slf4j.Logger;
1121

@@ -26,12 +36,13 @@ public QuantiumizedStorage(@NotNull IEventBus modEventBus) {
2636
QSMenuTypes.register(modEventBus);
2737
QSParticleTypes.register(modEventBus);
2838
QSGasses.register(modEventBus);
39+
QSEffects.register(modEventBus);
2940

3041
modEventBus.addListener(QSEvents::registerRegistries);
3142
modEventBus.addListener(QSEvents::particle);
43+
modEventBus.register(QSShading.class);
3244

33-
34-
// NeoForge.EVENT_BUS.register(this);
45+
NeoForge.EVENT_BUS.register(QuantiumizedStorage.ClientEvents.class);
3546

3647
// modEventBus.addListener(this::addCreative);
3748

@@ -41,4 +52,59 @@ public QuantiumizedStorage(@NotNull IEventBus modEventBus) {
4152
private void commonSetup(final FMLCommonSetupEvent event) {
4253
LOGGER.info("Lets dive into getting small");
4354
}
55+
56+
@EventBusSubscriber(value = Dist.CLIENT, bus = EventBusSubscriber.Bus.GAME)
57+
private static class ClientEvents {
58+
private static ShaderInstance oxygenShader = null;
59+
private static boolean appliedShader = false;
60+
61+
@SubscribeEvent
62+
public static void onClientTick(ClientTickEvent.Post event) {
63+
Player player = Minecraft.getInstance().player;
64+
if (player == null) return;
65+
66+
MobEffectInstance effect = player.getEffect(QSEffects.OXYGEN_DEPRIVATION);
67+
if (effect != null) {
68+
applyShader(effect.getDuration());
69+
} else {
70+
removeShader();
71+
}
72+
}
73+
74+
private static void applyShader(int duration) {
75+
Minecraft mc = Minecraft.getInstance();
76+
77+
if (!appliedShader) {
78+
try {
79+
if (oxygenShader == null) {
80+
mc.gameRenderer.loadEffect(ResourceHelper.asResource("shaders/core/oxygen_deprivation.json"));
81+
oxygenShader = mc.gameRenderer.getShader("qstorage:oxygen_deprivation");
82+
}
83+
84+
if (oxygenShader != null) {
85+
appliedShader = true;
86+
} else {
87+
System.out.println("Failed to load shader: oxygen_deprivation");
88+
}
89+
} catch (Exception e) {
90+
appliedShader = false;
91+
System.out.println("Error loading shader: " + e.getMessage());
92+
e.printStackTrace();
93+
}
94+
}
95+
96+
if (appliedShader && oxygenShader != null) {
97+
float severity = Math.min(1.0F, (600.0F - duration) / 600.0F);
98+
oxygenShader.safeGetUniform("Severity").set(severity);
99+
}
100+
}
101+
102+
private static void removeShader() {
103+
if (appliedShader) {
104+
Minecraft.getInstance().gameRenderer.shutdownEffect();
105+
oxygenShader = null;
106+
appliedShader = false;
107+
}
108+
}
109+
}
44110
}

src/main/java/dev/wolfieboy09/qstorage/api/registry/QSRegistries.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@
33
import dev.wolfieboy09.qstorage.QuantiumizedStorage;
44
import dev.wolfieboy09.qstorage.api.registry.gas.Gas;
55
import net.minecraft.core.Registry;
6-
import net.minecraft.core.registries.BuiltInRegistries;
76
import net.minecraft.resources.ResourceKey;
87
import net.minecraft.resources.ResourceLocation;
98
import net.neoforged.neoforge.registries.RegistryBuilder;
109

1110
public class QSRegistries {
1211
public static final ResourceKey<Registry<Gas>> GAS_REGISTRY_KEY = ResourceKey.createRegistryKey(ResourceLocation.fromNamespaceAndPath(QuantiumizedStorage.MOD_ID, "gas"));
1312
public static final Registry<Gas> GAS_REGISTRY = new RegistryBuilder<>(GAS_REGISTRY_KEY)
14-
//.sync(true)
13+
.sync(true)
1514
.create();
1615

1716
}

src/main/java/dev/wolfieboy09/qstorage/api/registry/gas/Gas.java

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,65 @@
22

33
import com.mojang.serialization.Codec;
44
import dev.wolfieboy09.qstorage.api.registry.QSRegistries;
5+
import net.minecraft.Util;
6+
import net.minecraft.core.Holder;
57
import net.minecraft.network.RegistryFriendlyByteBuf;
8+
import net.minecraft.network.chat.Component;
69
import net.minecraft.network.codec.ByteBufCodecs;
710
import net.minecraft.network.codec.StreamCodec;
11+
import net.minecraft.resources.ResourceLocation;
812

9-
public class Gas {
13+
public class Gas implements GasLike {
1014
public static final Codec<Gas> CODEC = QSRegistries.GAS_REGISTRY.byNameCodec();
15+
private String descriptionId;
16+
private ResourceLocation location;
17+
private final Holder<Gas> builtInRegistryHolder;
1118

1219
public static final StreamCodec<RegistryFriendlyByteBuf, Gas> STREAM_CODEC = ByteBufCodecs.registry(QSRegistries.GAS_REGISTRY_KEY);
1320

14-
private final GasBuilder gasBuilder;
21+
protected final GasBuilder gasBuilder;
1522

1623
public Gas(GasBuilder builder) {
17-
this.gasBuilder = builder;
24+
this.gasBuilder = builder;
25+
this.builtInRegistryHolder = QSRegistries.GAS_REGISTRY.wrapAsHolder(this);
1826
}
1927

20-
public GasData getGasData() {
28+
public GasInfo getGasData() {
2129
return this.gasBuilder;
2230
}
31+
32+
protected String getOrCreateDescriptionId() {
33+
if (this.descriptionId == null) {
34+
this.descriptionId = Util.makeDescriptionId("gas", QSRegistries.GAS_REGISTRY.getKey(this));
35+
}
36+
return this.descriptionId;
37+
}
38+
39+
public String getDescriptionId() {
40+
return this.getOrCreateDescriptionId();
41+
}
42+
43+
public Component getName() {
44+
return Component.translatable(this.getDescriptionId());
45+
}
46+
47+
public Gas copy() {
48+
return new Gas(this.gasBuilder);
49+
}
50+
51+
public ResourceLocation getResourceLocation() {
52+
if (this.location == null) {
53+
this.location = QSRegistries.GAS_REGISTRY.getKey(this);
54+
}
55+
return this.location;
56+
}
57+
58+
@Override
59+
public Gas asGas() {
60+
return this;
61+
}
62+
63+
public Holder<Gas> builtInRegistryHolder() {
64+
return this.builtInRegistryHolder;
65+
}
2366
}

src/main/java/dev/wolfieboy09/qstorage/api/registry/gas/GasBuilder.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package dev.wolfieboy09.qstorage.api.registry.gas;
22

3-
public class GasBuilder implements GasData {
3+
import net.minecraft.world.effect.MobEffectInstance;
4+
5+
import java.util.LinkedList;
6+
import java.util.List;
7+
8+
public class GasBuilder implements GasInfo {
49
private boolean isPoisonous = false;
510
private int tint = 0xFFFFFF;
611
private boolean flammable = false;
7-
812
private boolean heavyGas = false;
13+
private List<MobEffectInstance> effects = new LinkedList<>();
914

1015
public GasBuilder() {}
1116

@@ -29,6 +34,11 @@ public GasBuilder flammable(boolean flammable) {
2934
return this;
3035
}
3136

37+
public GasBuilder effects(MobEffectInstance ... effects) {
38+
this.effects = List.of(effects);
39+
return this;
40+
}
41+
3242
/**
3343
* Creates the {@link Gas} instance.
3444
* @return the {@link Gas} data from the builder.
@@ -56,5 +66,9 @@ public boolean isFlammable() {
5666
public int tint() {
5767
return this.tint;
5868
}
59-
}
6069

70+
@Override
71+
public List<MobEffectInstance> effects() {
72+
return this.effects;
73+
}
74+
}

src/main/java/dev/wolfieboy09/qstorage/api/registry/gas/GasData.java renamed to src/main/java/dev/wolfieboy09/qstorage/api/registry/gas/GasInfo.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package dev.wolfieboy09.qstorage.api.registry.gas;
22

3-
public interface GasData {
3+
import net.minecraft.world.effect.MobEffectInstance;
4+
5+
import java.util.List;
6+
7+
public interface GasInfo {
48
default boolean isPoisonous() {
59
return false;
610
}
@@ -16,4 +20,8 @@ default boolean isFlammable() {
1620
default int tint() {
1721
return 0xFFFFFF;
1822
}
23+
24+
default List<MobEffectInstance> effects() {
25+
return List.of();
26+
}
1927
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package dev.wolfieboy09.qstorage.api.registry.gas;
2+
3+
public interface GasLike {
4+
Gas asGas();
5+
}

src/main/java/dev/wolfieboy09/qstorage/api/registry/gas/GasParticleProvider.java

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)