Skip to content

Commit

Permalink
Initial 1.20.4 work
Browse files Browse the repository at this point in the history
  • Loading branch information
GirafiStudios committed Dec 15, 2023
1 parent ad0dcf3 commit 149e1d1
Show file tree
Hide file tree
Showing 21 changed files with 203 additions and 286 deletions.
8 changes: 4 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
minecraft_version=1.20.2
minecraft_version_range=[1.20.2,1.21)
neo_version=20.2.86
neo_version_range=[20.2,)
minecraft_version=1.20.40
minecraft_version_range=[1.20.4,1.21)
neo_version=20.4.29-beta
neo_version_range=[20.4.29-beta,)
loader_version_range=[1,)
pack_format_number=18
mod_id=aquaculture
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/teammetallurgy/aquaculture/Aquaculture.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import com.teammetallurgy.aquaculture.api.AquacultureAPI;
import com.teammetallurgy.aquaculture.api.fishing.Hooks;
import com.teammetallurgy.aquaculture.block.WormFarmBlock;
import com.teammetallurgy.aquaculture.block.blockentity.TackleBoxBlockEntity;
import com.teammetallurgy.aquaculture.client.ClientHandler;
import com.teammetallurgy.aquaculture.entity.AquaFishEntity;
import com.teammetallurgy.aquaculture.init.*;
import com.teammetallurgy.aquaculture.item.AquaFishingRodItem;
import com.teammetallurgy.aquaculture.item.crafting.ConditionFactory;
import com.teammetallurgy.aquaculture.item.crafting.FishFilletRecipe;
import com.teammetallurgy.aquaculture.loot.AquaBiomeModifiers;
Expand All @@ -28,6 +30,8 @@
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
Expand Down Expand Up @@ -55,6 +59,7 @@ public Aquaculture() {
modBus.addListener(this::setupCommon);
modBus.addListener(this::setupClient);
this.registerDeferredRegistries(modBus);
modBus.addListener(this::registerCapabilities);
modBus.addListener(this::addItemsToTabs);
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, AquaConfig.spec);
AquacultureAPI.Tags.init();
Expand Down Expand Up @@ -101,4 +106,9 @@ private void addItemsToTabs(BuildCreativeModeTabContentsEvent event) {
AquaItems.SPAWN_EGGS.forEach(registryObject -> event.accept(new ItemStack(registryObject.get())));
}
}

public void registerCapabilities(RegisterCapabilitiesEvent event) {
event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, AquaBlockEntities.TACKLE_BOX.get(), (blockEntity, side) -> TackleBoxBlockEntity.createItemHandler(blockEntity));
event.registerItem(Capabilities.ItemHandler.ITEM, (stack, context) -> AquaFishingRodItem.getHandler(stack), AquaItems.IRON_FISHING_ROD, AquaItems.GOLD_FISHING_ROD, AquaItems.DIAMOND_FISHING_ROD, AquaItems.NEPTUNIUM_FISHING_ROD);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.teammetallurgy.aquaculture.block;

import com.mojang.serialization.MapCodec;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.BlockGetter;
Expand All @@ -14,12 +15,19 @@
import javax.annotation.Nonnull;

public class FarmlandMoistBlock extends FarmBlock {
public static final MapCodec<FarmBlock> CODEC = simpleCodec(p -> new FarmlandMoistBlock());

public FarmlandMoistBlock() {
super(Block.Properties.of().mapColor(MapColor.DIRT).strength(0.6F).sound(SoundType.GRAVEL));
this.registerDefaultState(this.stateDefinition.any().setValue(MOISTURE, 7));
}

@Override
@Nonnull
public MapCodec<FarmBlock> codec() {
return CODEC;
}

@Override
public boolean canSustainPlant(@Nonnull BlockState state, @Nonnull BlockGetter world, BlockPos pos, @Nonnull Direction facing, IPlantable plantable) {
PlantType type = plantable.getPlantType(world, pos.relative(facing));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.teammetallurgy.aquaculture.block;

import com.mojang.serialization.MapCodec;
import com.teammetallurgy.aquaculture.block.blockentity.NeptunesBountyBlockEntity;
import com.teammetallurgy.aquaculture.init.AquaBlockEntities;
import net.minecraft.ChatFormatting;
Expand All @@ -16,6 +17,7 @@
import net.minecraft.world.level.block.ChestBlock;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.ChestType;
import net.minecraft.world.level.material.FluidState;
Expand All @@ -29,6 +31,7 @@
import java.util.List;

public class NeptunesBountyBlock extends ChestBlock {
public static final MapCodec<NeptunesBountyBlock> CODEC = simpleCodec(p -> new NeptunesBountyBlock());

public NeptunesBountyBlock() {
super(Block.Properties.of().mapColor(MapColor.METAL).strength(3.5F, 8.0F).sound(SoundType.METAL), AquaBlockEntities.NEPTUNES_BOUNTY::get);
Expand All @@ -39,6 +42,12 @@ public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState sta
return new NeptunesBountyBlockEntity(pos, state);
}

@Override
@Nonnull
public MapCodec<? extends NeptunesBountyBlock> codec() {
return CODEC;
}

@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
FluidState fluidState = context.getLevel().getFluidState(context.getClickedPos());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.teammetallurgy.aquaculture.block;

import com.mojang.serialization.MapCodec;
import com.teammetallurgy.aquaculture.block.blockentity.TackleBoxBlockEntity;
import com.teammetallurgy.aquaculture.init.AquaBlockEntities;
import com.teammetallurgy.aquaculture.misc.StackHelper;
Expand All @@ -19,10 +20,7 @@
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.Explosion;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.*;
import net.minecraft.world.level.block.*;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityTicker;
Expand All @@ -40,7 +38,8 @@
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.neoforge.common.capabilities.Capabilities;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.items.IItemHandler;
import net.neoforged.neoforge.items.ItemHandlerHelper;
import net.neoforged.neoforge.network.NetworkHooks;

Expand All @@ -49,6 +48,7 @@
import java.util.Optional;

public class TackleBoxBlock extends BaseEntityBlock implements SimpleWaterloggedBlock {
public static final MapCodec<TackleBoxBlock> CODEC = simpleCodec(p -> new TackleBoxBlock());
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
private static final VoxelShape NORTH_SOUTH = Block.box(0.8D, 0.0D, 3.9D, 15.2D, 9.0D, 12.2D);
Expand All @@ -64,6 +64,12 @@ public BlockEntity newBlockEntity(@Nonnull BlockPos pos, @Nonnull BlockState sta
return new TackleBoxBlockEntity(pos, state);
}

@Override
@Nonnull
protected MapCodec<? extends BaseEntityBlock> codec() {
return CODEC;
}

@Override
@Nonnull
public RenderShape getRenderShape(@Nonnull BlockState state) {
Expand Down Expand Up @@ -148,11 +154,13 @@ public boolean hasAnalogOutputSignal(@Nonnull BlockState state) {
}

@Override
public int getAnalogOutputSignal(@Nonnull BlockState state, Level world, @Nonnull BlockPos pos) {
BlockEntity tileEntity = world.getBlockEntity(pos);
public int getAnalogOutputSignal(@Nonnull BlockState state, Level level, @Nonnull BlockPos pos) {
BlockEntity tileEntity = level.getBlockEntity(pos);
if (tileEntity instanceof TackleBoxBlockEntity) {
Optional<Integer> redstone = tileEntity.getCapability(Capabilities.ITEM_HANDLER, null).map(ItemHandlerHelper::calcRedstoneFromInventory);
return redstone.orElse(0);
IItemHandler handler = level.getCapability(Capabilities.ItemHandler.BLOCK, pos, null);
if (handler != null) {
return ItemHandlerHelper.calcRedstoneFromInventory(handler);
}
}
return 0;
}
Expand Down Expand Up @@ -206,7 +214,7 @@ public boolean onDestroyedByPlayer(BlockState state, Level level, BlockPos pos,
}

@Override
public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGetter level, BlockPos pos, Player player) {
public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) {
ItemStack cloneItemStack = super.getCloneItemStack(state, target, level, pos, player);
level.getBlockEntity(pos, AquaBlockEntities.TACKLE_BOX.get()).ifPresent((blockEntity) -> {
blockEntity.saveToItem(cloneItemStack);
Expand All @@ -217,18 +225,14 @@ public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGett
@Override
public void onBlockExploded(BlockState state, Level level, BlockPos pos, Explosion explosion) {
if (!level.isClientSide) {
this.dropInventory(level, pos);
IItemHandler handler = level.getCapability(Capabilities.ItemHandler.BLOCK, pos, null);
if (handler != null) {
StackHelper.dropInventory(level, pos, handler);
}
}
super.onBlockExploded(state, level, pos, explosion);
}

private void dropInventory(Level level, BlockPos pos) {
BlockEntity tileEntity = level.getBlockEntity(pos);
if (tileEntity != null) {
tileEntity.getCapability(Capabilities.ITEM_HANDLER, null).ifPresent(handler -> StackHelper.dropInventory(level, pos, handler));
}
}

@Override
@Nullable
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, @Nonnull BlockState state, @Nonnull BlockEntityType<T> blockEntityType) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.teammetallurgy.aquaculture.block;

import com.mojang.serialization.MapCodec;
import com.teammetallurgy.aquaculture.api.AquacultureAPI;
import com.teammetallurgy.aquaculture.api.fish.FishData;
import com.teammetallurgy.aquaculture.init.AquaItems;
Expand Down Expand Up @@ -33,11 +34,18 @@
import javax.annotation.Nullable;

public class WormFarmBlock extends ComposterBlock {
public static final MapCodec<ComposterBlock> CODEC = simpleCodec(p -> new WormFarmBlock());

public WormFarmBlock() {
super(Block.Properties.of().mapColor(MapColor.WOOD).ignitedByLava().instrument(NoteBlockInstrument.BASS).strength(0.6F).sound(SoundType.WOOD));
}

@Override
@Nonnull
public MapCodec<ComposterBlock> codec() {
return CODEC;
}

public static void addCompostables() {
registerCompostable(AquaItems.ALGAE.get().asItem(), 0.3F);
if (AquaConfig.BASIC_OPTIONS.compostableFish.get()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,37 +1,25 @@
package com.teammetallurgy.aquaculture.block.blockentity;

import com.mojang.serialization.MapCodec;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.Nameable;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.common.capabilities.Capabilities;
import net.neoforged.neoforge.common.capabilities.Capability;
import net.neoforged.neoforge.common.util.INBTSerializable;
import net.neoforged.neoforge.common.util.LazyOptional;
import net.neoforged.neoforge.items.IItemHandler;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public abstract class IItemHandlerBEBase extends BlockEntity implements Nameable {
public abstract class IItemHandlerBEBase extends BlockEntity implements Nameable { //TODO Reimplement Capabilities
private Component customName;
private LazyOptional<IItemHandler> handler = LazyOptional.of(this::createItemHandler);

public IItemHandlerBEBase(BlockEntityType<?> tileEntityType, BlockPos pos, BlockState state) {
super(tileEntityType, pos, state);
}

@Nonnull
protected abstract IItemHandler createItemHandler();

@Override
public void load(@Nonnull CompoundTag tag) {
CompoundTag invTag = tag.getCompound("inv");
this.handler.ifPresent(stack -> ((INBTSerializable<CompoundTag>) stack).deserializeNBT(invTag));
if (tag.contains("CustomName", 8)) {
this.customName = Component.Serializer.fromJson(tag.getString("CustomName"));
}
Expand All @@ -40,37 +28,12 @@ public void load(@Nonnull CompoundTag tag) {

@Override
public void saveAdditional(@Nonnull CompoundTag tag) {
this.handler.ifPresent(stack -> {
CompoundTag compound = ((INBTSerializable<CompoundTag>) stack).serializeNBT();
tag.put("inv", compound);
});
if (this.customName != null) {
tag.putString("CustomName", Component.Serializer.toJson(this.customName));
}
super.saveAdditional(tag);
}

@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (!this.remove && cap == Capabilities.ITEM_HANDLER) {
return handler.cast();
}
return super.getCapability(cap, side);
}

@Override
public void invalidateCaps() {
super.invalidateCaps();
this.handler.invalidate();
}

@Override
public void reviveCaps() {
super.reviveCaps();
this.handler = LazyOptional.of(this::createItemHandler);
}

@Override
@Nonnull
public Component getName() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.teammetallurgy.aquaculture.block.blockentity;

import com.teammetallurgy.aquaculture.Aquaculture;
import com.teammetallurgy.aquaculture.api.AquacultureAPI;
import com.teammetallurgy.aquaculture.init.AquaBlockEntities;
import com.teammetallurgy.aquaculture.init.AquaSounds;
Expand All @@ -8,6 +9,8 @@
import com.teammetallurgy.aquaculture.item.BaitItem;
import com.teammetallurgy.aquaculture.item.HookItem;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.MenuProvider;
Expand All @@ -19,9 +22,11 @@
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.ChestLidController;
import net.minecraft.world.level.block.entity.ContainerOpenersCounter;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.capabilities.BlockCapability;
import net.neoforged.neoforge.items.IItemHandler;
import net.neoforged.neoforge.items.ItemStackHandler;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -52,19 +57,20 @@ protected boolean isOwnContainer(Player player) {
}
};
private final ChestLidController lidController = new ChestLidController();
public static final BlockCapability<IItemHandler, Direction> ITEM_HANDLER_BLOCK =
BlockCapability.createSided(new ResourceLocation(Aquaculture.MOD_ID, "tackle_box_item_handler"), IItemHandler.class);

public TackleBoxBlockEntity(BlockPos pos, BlockState state) {
super(AquaBlockEntities.TACKLE_BOX.get(), pos, state);
}

@Override
@Nonnull
protected IItemHandler createItemHandler() {
public static IItemHandler createItemHandler(BlockEntity blockEntity) {
return new ItemStackHandler(17) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
setChanged();
blockEntity.setChanged();
}

@Override
Expand All @@ -89,7 +95,7 @@ public static boolean canBePutInTackleBox(@Nonnull ItemStack stack) {
@Nullable
@Override
public AbstractContainerMenu createMenu(int windowID, @Nonnull Inventory playerInventory, @Nonnull Player player) {
return new TackleBoxContainer(windowID, worldPosition, playerInventory);
return new TackleBoxContainer(windowID, this.worldPosition, playerInventory);
}

public static void lidAnimateTick(Level level, BlockPos pos, BlockState state, TackleBoxBlockEntity tackleBox) {
Expand Down

0 comments on commit 149e1d1

Please sign in to comment.