Skip to content

Commit

Permalink
a humongous amount of bug fixing
Browse files Browse the repository at this point in the history
  • Loading branch information
Thepigcat76 committed Feb 24, 2025
1 parent 3da99ae commit c742dce
Show file tree
Hide file tree
Showing 44 changed files with 478 additions and 160 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ loader_version_range=[4,)
mod_id=nautec
mod_name=NauTec
mod_license=MIT
mod_version=0.2.3
mod_version=0.2.4
mod_group_id=com.portingdeadmods.nautec
mod_authors=Thepigcat76, Leclowndu93150, Ktpatient, Reclipse, Iglee42
mod_description=Mod for the curseforge 2024 modjam
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/com/portingdeadmods/nautec/NautecClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,8 @@ public void modifyFogRender(Camera camera, FogRenderer.FogMode mode, float rende

event.registerItem(new IClientItemExtensions() {
@Override
public @NotNull HumanoidModel<?> getHumanoidArmorModel(LivingEntity livingEntity, ItemStack
itemStack, EquipmentSlot equipmentSlot, HumanoidModel<?> original) {
public @NotNull HumanoidModel<?> getHumanoidArmorModel(@NotNull LivingEntity livingEntity, @NotNull ItemStack
itemStack, @NotNull EquipmentSlot equipmentSlot, @NotNull HumanoidModel<?> original) {
return ArmorModelsHandler.armorModel(ArmorModelsHandler.divingSuit, equipmentSlot);
}
}, NTItems.DIVING_HELMET);
Expand All @@ -158,7 +158,8 @@ private void registerBERenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerBlockEntityRenderer(NTBlockEntityTypes.PRISMARINE_CRYSTAL_PART.get(), LaserBlockEntityRenderer::new);
event.registerBlockEntityRenderer(NTBlockEntityTypes.MIXER.get(), MixerBERenderer::new);
event.registerBlockEntityRenderer(NTBlockEntityTypes.CHARGER.get(), ChargerBERenderer::new);
event.registerBlockEntityRenderer(NTBlockEntityTypes.DRAIN_PART.get(), DrainBERenderer::new);
event.registerBlockEntityRenderer(NTBlockEntityTypes.DRAIN.get(), DrainBERenderer::new);
event.registerBlockEntityRenderer(NTBlockEntityTypes.DRAIN_PART.get(), LaserBlockEntityRenderer::new);
event.registerBlockEntityRenderer(NTBlockEntityTypes.AUGMENTATION_STATION_EXTENSION.get(), AugmentStationExtensionBERenderer::new);
event.registerBlockEntityRenderer(NTBlockEntityTypes.ANCHOR.get(), AnchorBERenderer::new);
event.registerBlockEntityRenderer(NTBlockEntityTypes.BACTERIAL_ANALYZER.get(), BacterialAnalyzerBERenderer::new);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ public int getPower() {
return power;
}

public int getPowerToTransfer() {
return powerToTransfer;
}

public void transmitPower(int amount) {
this.powerToTransfer = amount;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,71 @@
import com.portingdeadmods.nautec.api.blocks.DisplayBlock;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.Component;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SimpleWaterloggedBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Fluids;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.List;
import java.util.Optional;

public abstract class LaserBlock extends ContainerBlock implements DisplayBlock {
public abstract class LaserBlock extends ContainerBlock implements DisplayBlock, SimpleWaterloggedBlock {
public LaserBlock(Properties properties) {
super(properties);
if (waterloggable()) {
registerDefaultState(defaultBlockState().setValue(BlockStateProperties.WATERLOGGED, false));
}
}

@Override
public boolean tickingEnabled() {
return true;
}

public abstract boolean waterloggable();

@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
super.createBlockStateDefinition(waterloggable() ? builder.add(BlockStateProperties.WATERLOGGED) : builder);
}

@Override
protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) {
if (waterloggable() && state.getValue(BlockStateProperties.WATERLOGGED)) {
level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level));
}
return super.updateShape(state, direction, neighborState, level, pos, neighborPos);
}

@Override
public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) {
FluidState fluidstate = context.getLevel().getFluidState(context.getClickedPos());
BlockState state = super.getStateForPlacement(context);
return state != null && waterloggable()
? state.setValue(BlockStateProperties.WATERLOGGED, fluidstate.getType() == Fluids.WATER)
: state;
}

@Override
protected @NotNull FluidState getFluidState(BlockState state) {
return waterloggable() && state.getValue(BlockStateProperties.WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state);
}

@Override
public List<Component> displayText(Level level, BlockPos blockPos, Player player) {
LaserBlockEntity laserBE = (LaserBlockEntity) level.getBlockEntity(blockPos);
Expand All @@ -28,4 +77,36 @@ public List<Component> displayText(Level level, BlockPos blockPos, Player player
Component.literal("Purity: " + laserBE.getPurity()).withStyle(ChatFormatting.WHITE)
);
}

// WATERLOGGED BLOCK METHODS


@Override
public boolean canPlaceLiquid(@Nullable Player player, BlockGetter level, BlockPos pos, BlockState state, Fluid fluid) {
if (waterloggable()) {
return SimpleWaterloggedBlock.super.canPlaceLiquid(player, level, pos, state, fluid);
}
return false;
}

@Override
public boolean placeLiquid(LevelAccessor level, BlockPos pos, BlockState state, FluidState fluidState) {
if (waterloggable()) {
return SimpleWaterloggedBlock.super.placeLiquid(level, pos, state, fluidState);
}
return false;
}

@Override
public ItemStack pickupBlock(@Nullable Player player, LevelAccessor level, BlockPos pos, BlockState state) {
if (waterloggable()) {
return SimpleWaterloggedBlock.super.pickupBlock(player, level, pos, state);
}
return ItemStack.EMPTY;
}

@Override
public Optional<SoundEvent> getPickupSound() {
return waterloggable() ? SimpleWaterloggedBlock.super.getPickupSound() : Optional.empty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,56 +9,50 @@
import com.portingdeadmods.nautec.content.blockentities.multiblock.part.DrainPartBlockEntity;
import com.portingdeadmods.nautec.content.blocks.multiblock.part.DrainPartBlock;
import com.portingdeadmods.nautec.content.multiblocks.DrainMultiblock;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import org.jetbrains.annotations.NotNull;

public class DrainBERenderer extends LaserBlockEntityRenderer<DrainPartBlockEntity> {
public class DrainBERenderer extends LaserBlockEntityRenderer<DrainBlockEntity> {
private final DrainTopModel model;

public DrainBERenderer(BlockEntityRendererProvider.Context ctx) {
super(ctx);
this.model = new DrainTopModel(ctx.bakeLayer(DrainTopModel.LAYER_LOCATION));
this.model.setupAnimation();
}

@Override
public void render(DrainPartBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, int packedOverlay) {
BlockState blockState = blockEntity.getBlockState();
if (blockState.getValue(DrainMultiblock.DRAIN_PART) == 4 && blockState.getValue(DrainPartBlock.TOP)) {
public void render(DrainBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, int packedOverlay) {
if (blockEntity.getBlockState().getValue(DrainMultiblock.FORMED)) {
VertexConsumer consumer = DrainTopModel.DRAIN_TOP_LOCATION.buffer(bufferSource, RenderType::entityTranslucent);
this.model.setupAnimation();
poseStack.pushPose();
{
if (blockEntity.getLevel().getBlockEntity(blockEntity.getBlockPos().below()) instanceof DrainBlockEntity drainBE) {
float lidAngle = drainBE.getLidIndependentAngle(partialTick);
poseStack.translate(0, 1, 0);
float lidAngle = blockEntity.getLidIndependentAngle(partialTick);
int lightColor = LevelRenderer.getLightColor(blockEntity.getLevel(), blockEntity.getBlockPos().above());

poseStack.translate(-0.75, 0, -0.75);
poseStack.mulPose(Axis.YP.rotation(lidAngle));
poseStack.translate(0.75, 0, 0.75);
this.model.renderLid(poseStack, consumer, packedLight, packedOverlay);
poseStack.pushPose();
{
float valveAngle = drainBE.getValveIndependentAngle(partialTick);
poseStack.translate(-0.75, 0, -0.75);
poseStack.mulPose(Axis.YP.rotation(lidAngle));
poseStack.translate(0.75, 0, 0.75);
this.model.renderLid(poseStack, consumer, lightColor, packedOverlay);
float valveAngle = blockEntity.getValveIndependentAngle(partialTick);

poseStack.translate(0.5, 0, 0.5);
poseStack.mulPose(Axis.YP.rotation(valveAngle));
poseStack.translate(-0.5, 0, -0.5);
this.model.renderValve(poseStack, consumer, packedLight, packedOverlay);
}
poseStack.popPose();
}
poseStack.translate(0.5, 0, 0.5);
poseStack.mulPose(Axis.YP.rotation(valveAngle));
poseStack.translate(-0.5, 0, -0.5);
this.model.renderValve(poseStack, consumer, lightColor, packedOverlay);
}
poseStack.popPose();
} else {
super.render(blockEntity, partialTick, poseStack, bufferSource, packedLight, packedOverlay);
}
}

@Override
public @NotNull AABB getRenderBoundingBox(DrainPartBlockEntity blockEntity) {
public @NotNull AABB getRenderBoundingBox(DrainBlockEntity blockEntity) {
return blockEntity.getBlockState().getValue(DrainMultiblock.DRAIN_PART) == 4
? new AABB(blockEntity.getBlockPos()).inflate(1)
: super.getRenderBoundingBox(blockEntity);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,22 @@

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis;
import com.portingdeadmods.nautec.api.client.renderer.blockentities.LaserBlockEntityRenderer;
import com.portingdeadmods.nautec.client.model.block.PrismarineCrystalModel;
import com.portingdeadmods.nautec.content.blockentities.multiblock.semi.PrismarineCrystalBlockEntity;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.util.Mth;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.DecoratedPotBlockEntity;
import net.minecraft.world.phys.AABB;
import net.neoforged.neoforge.client.model.data.ModelData;
import org.jetbrains.annotations.NotNull;

public class PrismarineCrystalBERenderer extends LaserBlockEntityRenderer<PrismarineCrystalBlockEntity> {
Expand All @@ -21,16 +26,28 @@ public class PrismarineCrystalBERenderer extends LaserBlockEntityRenderer<Prisma
public PrismarineCrystalBERenderer(BlockEntityRendererProvider.Context ctx) {
super(ctx);
this.model = new PrismarineCrystalModel(ctx.bakeLayer(PrismarineCrystalModel.LAYER_LOCATION));
model.setupAnim();
}

@Override
public void render(PrismarineCrystalBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, int packedOverlay) {
super.render(blockEntity, partialTick, poseStack, bufferSource, packedLight, packedOverlay);
VertexConsumer consumer = PrismarineCrystalModel.PRISMARINE_CRYSTAL_LOCATION.buffer(bufferSource, RenderType::entitySolid);
model.setupAnim();
poseStack.pushPose();
{
poseStack.translate(0, -2, 0);

if (blockEntity.isBreaking()) {
float f = ((float) (blockEntity.getLevel().getGameTime() - blockEntity.getStartTick()) + partialTick) / (float) blockEntity.getDuration();
if (f >= 0.0F && f <= 1.0F) {
float f2;
f2 = f * 6.2831855F;
float f3 = -1.5F * (Mth.cos(f2) + 0.5F) * Mth.sin(f2 / 2.0F);
poseStack.rotateAround(Axis.XP.rotation(f3 * 0.015625F), 0.5F, 0.0F, 0.5F);
float f4 = Mth.sin(f2);
poseStack.rotateAround(Axis.ZP.rotation(f4 * 0.015625F), 0.5F, 0.0F, 0.5F);
}
}
model.render(poseStack, consumer, getLightLevel(blockEntity.getLevel(), blockEntity.getBlockPos().above()), packedOverlay);
}
poseStack.popPose();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPlugi
if (blockEntity.getCurrentRecipe() != null) {
iTooltip.add(Component.literal("Processing: ").append(Component.literal(blockEntity.getItemHandler().getStackInSlot(0).getCount() +"x ").append(Component.translatable(blockEntity.getProcessingItem().getDescriptionId()))));
iTooltip.add(Component.literal("Remaining Duration: " + blockEntity.getRemainingDuration() + " ticks"));
iTooltip.add(Component.literal("Transferring: " + blockEntity.getPower() + "AP/T"));
iTooltip.add(Component.literal("Transferring: " + blockEntity.getPowerToTransfer() + "AP/T"));
}
} else {
iTooltip.add(Component.literal("Status: Inactive"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ public class ItemEtchingRecipeCategory implements IRecipeCategory<ItemEtchingRec
private final IDrawable icon;
private final IDrawable background;


public ItemEtchingRecipeCategory(IGuiHelper helper) {
this.background = helper.createBlankDrawable(80, 28);
this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(NTFluids.ETCHING_ACID.getBucket()));
Expand Down
Loading

0 comments on commit c742dce

Please sign in to comment.