Skip to content

Commit

Permalink
salt water in ocean biomes
Browse files Browse the repository at this point in the history
  • Loading branch information
Leclowndu93150 committed Sep 7, 2024
1 parent ab03c88 commit 8380bd3
Show file tree
Hide file tree
Showing 5 changed files with 159 additions and 86 deletions.
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
package com.portingdeadmods.modjam.api.blockentities;

import com.portingdeadmods.modjam.ModJam;
import com.portingdeadmods.modjam.api.blocks.blockentities.LaserBlock;
import com.portingdeadmods.modjam.registries.MJItems;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package com.portingdeadmods.modjam.events;

import com.mojang.blaze3d.shaders.FogShape;
import com.mojang.blaze3d.systems.RenderSystem;
import com.portingdeadmods.modjam.ModJam;
import com.portingdeadmods.modjam.api.fluids.BaseFluidType;
import com.portingdeadmods.modjam.client.hud.PrismMonocleOverlay;
import com.portingdeadmods.modjam.client.renderer.blockentities.AquaticCatalystBERenderer;
import com.portingdeadmods.modjam.registries.MJBlockEntityTypes;
import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.FogRenderer;
import net.minecraft.core.Vec3i;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.FastColor;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent;
import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions;
import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent;
import net.neoforged.neoforge.fluids.FluidType;
import net.neoforged.neoforge.registries.NeoForgeRegistries;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.joml.Vector3f;

public final class MJClientEvents {
@EventBusSubscriber(modid = ModJam.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
public static final class ClientBus {
@SubscribeEvent
public static void registerGuiOverlays(RegisterGuiLayersEvent event) {
event.registerAboveAll(ResourceLocation.fromNamespaceAndPath(ModJam.MODID, "scanner_info_overlay"), PrismMonocleOverlay.HUD);
}

@SubscribeEvent
public static void registerClientExtensions(RegisterClientExtensionsEvent event) {
// Fluid renderers
for (FluidType fluidType : NeoForgeRegistries.FLUID_TYPES) {
if (fluidType instanceof BaseFluidType baseFluidType) {
event.registerFluidType(new IClientFluidTypeExtensions() {
@Override
public @NotNull ResourceLocation getStillTexture() {
return baseFluidType.getStillTexture();
}

@Override
public @NotNull ResourceLocation getFlowingTexture() {
return baseFluidType.getFlowingTexture();
}

@Override
public @Nullable ResourceLocation getOverlayTexture() {
return baseFluidType.getOverlayTexture();
}

@Override
public int getTintColor() {
Vec3i color = baseFluidType.getColor();
return FastColor.ARGB32.color(color.getX(), color.getY(), color.getZ());
}

@Override
public @NotNull Vector3f modifyFogColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, Vector3f fluidFogColor) {
Vec3i color = baseFluidType.getColor();
return new Vector3f(color.getX() / 255f, color.getY() / 255f, color.getZ() / 255f);
}

@Override
public void modifyFogRender(Camera camera, FogRenderer.FogMode mode, float renderDistance, float partialTick, float nearDistance, float farDistance, FogShape shape) {
RenderSystem.setShaderFogStart(1f);
RenderSystem.setShaderFogEnd(6f); // distance when the fog starts
}
}, baseFluidType);
}
}
}

@SubscribeEvent
public static void registerBERenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerBlockEntityRenderer(MJBlockEntityTypes.AQUATIC_CATALYST.get(), AquaticCatalystBERenderer::new);
}
}
}
85 changes: 4 additions & 81 deletions src/main/java/com/portingdeadmods/modjam/events/MJEvents.java
Original file line number Diff line number Diff line change
@@ -1,87 +1,10 @@
package com.portingdeadmods.modjam.events;

import com.mojang.blaze3d.shaders.FogShape;
import com.mojang.blaze3d.systems.RenderSystem;
import com.portingdeadmods.modjam.ModJam;
import com.portingdeadmods.modjam.api.fluids.BaseFluidType;
import com.portingdeadmods.modjam.client.hud.PrismMonocleOverlay;
import com.portingdeadmods.modjam.client.renderer.blockentities.AquaticCatalystBERenderer;
import com.portingdeadmods.modjam.registries.MJBlockEntityTypes;
import com.portingdeadmods.modjam.registries.MJDataAttachments;
import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.FogRenderer;
import net.minecraft.core.Vec3i;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.FastColor;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent;
import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions;
import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent;
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
import net.neoforged.neoforge.fluids.FluidType;
import net.neoforged.neoforge.registries.NeoForgeRegistries;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.joml.Vector3f;
import static net.minecraft.world.item.Item.getPlayerPOVHitResult;

public final class MJEvents {
@EventBusSubscriber(modid = ModJam.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD)
public static final class ClientBus {
@SubscribeEvent
public static void registerGuiOverlays(RegisterGuiLayersEvent event) {
event.registerAboveAll(ResourceLocation.fromNamespaceAndPath(ModJam.MODID, "scanner_info_overlay"), PrismMonocleOverlay.HUD);
}
//@EventBusSubscriber(modid = ModJam.MODID, bus = EventBusSubscriber.Bus.GAME)
public class MJEvents {

@SubscribeEvent
public static void registerClientExtensions(RegisterClientExtensionsEvent event) {
// Fluid renderers
for (FluidType fluidType : NeoForgeRegistries.FLUID_TYPES) {
if (fluidType instanceof BaseFluidType baseFluidType) {
event.registerFluidType(new IClientFluidTypeExtensions() {
@Override
public @NotNull ResourceLocation getStillTexture() {
return baseFluidType.getStillTexture();
}
//Fuck events, im gonna mixin vanilla

@Override
public @NotNull ResourceLocation getFlowingTexture() {
return baseFluidType.getFlowingTexture();
}

@Override
public @Nullable ResourceLocation getOverlayTexture() {
return baseFluidType.getOverlayTexture();
}

@Override
public int getTintColor() {
Vec3i color = baseFluidType.getColor();
return FastColor.ARGB32.color(color.getX(), color.getY(), color.getZ());
}

@Override
public @NotNull Vector3f modifyFogColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, Vector3f fluidFogColor) {
Vec3i color = baseFluidType.getColor();
return new Vector3f(color.getX() / 255f, color.getY() / 255f, color.getZ() / 255f);
}

@Override
public void modifyFogRender(Camera camera, FogRenderer.FogMode mode, float renderDistance, float partialTick, float nearDistance, float farDistance, FogShape shape) {
RenderSystem.setShaderFogStart(1f);
RenderSystem.setShaderFogEnd(6f); // distance when the fog starts
}
}, baseFluidType);
}
}
}

@SubscribeEvent
public static void registerBERenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerBlockEntityRenderer(MJBlockEntityTypes.AQUATIC_CATALYST.get(), AquaticCatalystBERenderer::new);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.portingdeadmods.modjam.mixin;

import com.portingdeadmods.modjam.registries.MJItems;
import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource;
import net.minecraft.stats.Stats;
import net.minecraft.tags.FluidTags;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.ItemUtils;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.BucketPickup;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import static net.minecraft.world.item.Item.getPlayerPOVHitResult;

@Mixin(BucketItem.class)
public abstract class BucketItemMixin {

@Inject(method = "use", at = @At("HEAD"), cancellable = true)
private void onUse(Level level, Player player, InteractionHand hand, CallbackInfoReturnable<InteractionResultHolder<ItemStack>> cir) {
ItemStack itemStack = player.getItemInHand(hand);
BlockHitResult blockHitResult = getPlayerPOVHitResult(
level, player, ClipContext.Fluid.SOURCE_ONLY
);

if (blockHitResult.getType() == HitResult.Type.BLOCK) {
BlockPos blockPos = blockHitResult.getBlockPos();
BlockState blockState = level.getBlockState(blockPos);

if (blockState.getBlock() instanceof BucketPickup bucketPickup) {

if (level.getFluidState(blockPos).is(FluidTags.WATER) && level.getBiome(blockPos).getRegisteredName().contains("ocean")) {

ItemStack filledBucket = bucketPickup.pickupBlock(player, level, blockPos, blockState);
if (!filledBucket.isEmpty()) {

filledBucket = new ItemStack(MJItems.SALT_WATER_BUCKET.asItem());
player.awardStat(Stats.ITEM_USED.get(Items.BUCKET));

bucketPickup.getPickupSound(blockState).ifPresent(soundEvent ->
level.playSound(player, blockPos, soundEvent, SoundSource.BLOCKS, 1.0F, 1.0F)
);

if (!level.isClientSide) {
CriteriaTriggers.FILLED_BUCKET.trigger((ServerPlayer) player, filledBucket);
}

cir.setReturnValue(InteractionResultHolder.sidedSuccess(ItemUtils.createFilledResult(itemStack, player, filledBucket), level.isClientSide()));
cir.cancel();
}
}
}
}
}
}
1 change: 1 addition & 0 deletions src/main/resources/modjam.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"package": "com.portingdeadmods.modjam.mixin",
"compatibilityLevel": "JAVA_21",
"mixins": [
"BucketItemMixin",
"GrowingPlantHeadBlockMixin",
"StructurePieceMixin"
],
Expand Down

0 comments on commit 8380bd3

Please sign in to comment.