Skip to content

Commit 7cc1a67

Browse files
committed
upgrade changes
1 parent 8627665 commit 7cc1a67

26 files changed

Lines changed: 256 additions & 77 deletions

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ minecraft_version=1.21
1313
# as they do not follow standard versioning conventions.
1414
minecraft_version_range=[1.21,1.22)
1515
# The Neo version must agree with the Minecraft version to get a valid artifact
16-
neo_version=21.0.146
16+
neo_version=21.1.214
1717
# The Neo version range can use any version of Neo as bounds
18-
neo_version_range=[21.0.82-beta,)
18+
neo_version_range=[21.1.193,)
1919
# The loader version range can only use the major version of FML as bounds
2020
loader_version_range=[2,)
2121

@@ -29,7 +29,7 @@ mod_name=Productive Lib
2929
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
3030
mod_license=All Rights Reserved
3131
# The mod version. See https://semver.org/
32-
mod_version=1.21.0-0.1.26
32+
mod_version=1.21.1-0.2.0
3333
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
3434
# This should match the base package used for the mod sources.
3535
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html

src/main/java/cy/jdkdigital/productivelib/ProductiveLib.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55
import cy.jdkdigital.productivelib.crafting.condition.FluidTagEmptyCondition;
66
import cy.jdkdigital.productivelib.loot.*;
77
import cy.jdkdigital.productivelib.loot.condition.OptionalCopyBlockState;
8-
import cy.jdkdigital.productivelib.registry.ModDataComponents;
98
import cy.jdkdigital.productivelib.registry.LibItems;
9+
import cy.jdkdigital.productivelib.registry.ModDataComponents;
1010
import net.minecraft.core.component.DataComponentType;
1111
import net.minecraft.core.registries.Registries;
12+
import net.minecraft.resources.ResourceLocation;
13+
import net.minecraft.tags.BlockTags;
14+
import net.minecraft.tags.TagKey;
1215
import net.minecraft.world.item.Item;
16+
import net.minecraft.world.level.block.Block;
1317
import net.minecraft.world.level.storage.loot.entries.LootPoolEntryType;
1418
import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType;
1519
import net.minecraft.world.level.storage.loot.predicates.LootItemConditionType;
@@ -49,6 +53,8 @@ public final class ProductiveLib
4953
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<FluidTagEmptyCondition>> FLUID_TAG_EMPTY_CONDITION = CONDITION_CODECS.register("fluid_tag_empty", () -> FluidTagEmptyCondition.CODEC);
5054
public static final DeferredHolder<MapCodec<? extends ICondition>, MapCodec<LazyCondition>> LAZY_CONDITION = CONDITION_CODECS.register("lazy", () -> LazyCondition.CODEC);
5155

56+
public static final TagKey<Block> IGNORED_INTERNAL_MULTIBLOCK_BLOCKS = BlockTags.create(ResourceLocation.fromNamespaceAndPath(MODID, "ignored_internal_multiblock_blocks"));
57+
5258
public ProductiveLib(IEventBus modEventBus, ModContainer container) {
5359
LOOT_SERIALIZERS.register(modEventBus);
5460
LOOT_POOL_ENTRIES.register(modEventBus);
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package cy.jdkdigital.productivelib.client.screen;
2+
3+
import cy.jdkdigital.productivelib.common.block.entity.ICapabilityBlockEntity;
4+
import cy.jdkdigital.productivelib.common.block.entity.IUpgradeableBlockEntity;
5+
import cy.jdkdigital.productivelib.common.block.entity.InventoryHandlerHelper;
6+
import cy.jdkdigital.productivelib.container.AbstractContainer;
7+
import net.minecraft.ChatFormatting;
8+
import net.minecraft.client.gui.GuiGraphics;
9+
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
10+
import net.minecraft.network.chat.Component;
11+
import net.minecraft.util.FormattedCharSequence;
12+
import net.minecraft.world.entity.player.Inventory;
13+
import net.minecraft.world.item.Item;
14+
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
18+
public abstract class AbstractUpgradeableContainerScreen<T extends AbstractContainer<? extends ICapabilityBlockEntity>> extends AbstractContainerScreen<T>
19+
{
20+
public AbstractUpgradeableContainerScreen(T container, Inventory inv, Component titleIn) {
21+
super(container, inv, titleIn);
22+
this.imageWidth = 202;
23+
}
24+
25+
@Override
26+
protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
27+
super.renderLabels(guiGraphics, mouseX, mouseY);
28+
29+
List<FormattedCharSequence> tooltipList = new ArrayList<>();
30+
if (insideUpgradeSlots(mouseX, mouseY) && this.getMenu() instanceof AbstractContainer<? extends ICapabilityBlockEntity> container && container.getBlockEntity() instanceof IUpgradeableBlockEntity upgradeableBlockEntity && upgradeableBlockEntity.getUpgradeHandler() instanceof InventoryHandlerHelper.UpgradeHandler upgradeHandler) {
31+
for (int slot = 0; slot < 4; slot++) {
32+
if (insideUpgradeSlot(slot, mouseX, mouseY) && upgradeHandler.getStackInSlot(slot).isEmpty()) {
33+
tooltipList.add(Component.translatable("Valid upgrades:").getVisualOrderText());
34+
for (Item item : upgradeHandler.getValidUpgrades()) {
35+
tooltipList.add(Component.translatable(item.getDescriptionId()).withStyle(ChatFormatting.GOLD).getVisualOrderText());
36+
}
37+
break;
38+
}
39+
}
40+
}
41+
if (!tooltipList.isEmpty()) {
42+
guiGraphics.renderTooltip(font, tooltipList, mouseX - getGuiLeft(), mouseY - getGuiTop());
43+
}
44+
}
45+
46+
protected boolean insideUpgradeSlots(double mouseX, double mouseY) {
47+
return isHovering(this.imageWidth - 24, 8, 16, 72, mouseX, mouseY);
48+
}
49+
50+
protected boolean insideUpgradeSlot(int slot, double mouseX, double mouseY) {
51+
return isHovering(this.imageWidth - 24, 8 + 16 * slot + 2 * slot, 16, 16, mouseX, mouseY);
52+
}
53+
}

src/main/java/cy/jdkdigital/productivelib/common/block/PickupBlock.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
import com.mojang.serialization.MapCodec;
44
import net.minecraft.core.BlockPos;
55
import net.minecraft.core.Direction;
6-
import net.minecraft.resources.ResourceLocation;
7-
import net.minecraft.world.InteractionHand;
86
import net.minecraft.world.InteractionResult;
97
import net.minecraft.world.entity.player.Player;
108
import net.minecraft.world.item.ItemStack;
119
import net.minecraft.world.item.context.BlockPlaceContext;
1210
import net.minecraft.world.level.Level;
13-
import net.minecraft.world.level.block.*;
11+
import net.minecraft.world.level.block.Block;
12+
import net.minecraft.world.level.block.Blocks;
13+
import net.minecraft.world.level.block.FaceAttachedHorizontalDirectionalBlock;
14+
import net.minecraft.world.level.block.SimpleWaterloggedBlock;
1415
import net.minecraft.world.level.block.state.BlockState;
1516
import net.minecraft.world.level.block.state.StateDefinition;
1617
import net.minecraft.world.level.block.state.properties.AttachFace;

src/main/java/cy/jdkdigital/productivelib/common/block/entity/CapabilityBlockEntity.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import net.neoforged.neoforge.items.IItemHandler;
1515
import net.neoforged.neoforge.items.ItemStackHandler;
1616

17-
public abstract class CapabilityBlockEntity extends AbstractBlockEntity implements Nameable
17+
public abstract class CapabilityBlockEntity extends AbstractBlockEntity implements ICapabilityBlockEntity, Nameable
1818
{
1919
public CapabilityBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
2020
super(type, pos, state);
@@ -30,12 +30,15 @@ public Component getDisplayName() {
3030
return getName();
3131
}
3232

33+
@Override
3334
public IItemHandler getItemHandler() {
3435
return null;
3536
}
37+
@Override
3638
public EnergyStorage getEnergyHandler() {
3739
return null;
3840
}
41+
@Override
3942
public IFluidHandler getFluidHandler() {
4043
return null;
4144
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package cy.jdkdigital.productivelib.common.block.entity;
2+
3+
import net.neoforged.neoforge.energy.EnergyStorage;
4+
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
5+
import net.neoforged.neoforge.items.IItemHandler;
6+
7+
public interface ICapabilityBlockEntity
8+
{
9+
public IItemHandler getItemHandler();
10+
public EnergyStorage getEnergyHandler();
11+
public IFluidHandler getFluidHandler();
12+
}

src/main/java/cy/jdkdigital/productivelib/common/block/entity/InventoryHandlerHelper.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,5 @@
11
package cy.jdkdigital.productivelib.common.block.entity;
22

3-
import java.util.ArrayList;
4-
import java.util.Iterator;
5-
import java.util.LinkedList;
6-
import java.util.List;
7-
8-
import javax.annotation.Nonnull;
9-
import javax.annotation.Nullable;
10-
11-
import cy.jdkdigital.productivelib.ProductiveLib;
123
import cy.jdkdigital.productivelib.common.item.AbstractUpgradeItem;
134
import cy.jdkdigital.productivelib.event.CollectValidUpgradesEvent;
145
import net.minecraft.core.HolderLookup;
@@ -22,6 +13,13 @@
2213
import net.neoforged.neoforge.common.NeoForge;
2314
import net.neoforged.neoforge.items.ItemStackHandler;
2415

16+
import javax.annotation.Nonnull;
17+
import javax.annotation.Nullable;
18+
import java.util.ArrayList;
19+
import java.util.Iterator;
20+
import java.util.LinkedList;
21+
import java.util.List;
22+
2523
public class InventoryHandlerHelper
2624
{
2725
// TODO don't hardcode slot meaning, make abstract
@@ -238,6 +236,7 @@ public int size() {
238236
}
239237
}
240238

239+
// Far modifying valid upgrades in other mods blocks
241240
public static class UpgradeHandler extends BlockEntityItemStackHandler
242241
{
243242
private final List<Item> validUpgrades;
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package cy.jdkdigital.productivelib.common.block.entity;
2+
3+
import net.minecraft.core.BlockPos;
4+
import net.minecraft.core.HolderLookup;
5+
import net.minecraft.nbt.CompoundTag;
6+
import net.minecraft.server.level.ServerLevel;
7+
import net.minecraft.world.level.Level;
8+
import net.minecraft.world.level.block.entity.BlockEntityType;
9+
import net.minecraft.world.level.block.state.BlockState;
10+
11+
public abstract class TickingBlockEntity extends CapabilityBlockEntity
12+
{
13+
int tickCounter = 0;
14+
15+
public TickingBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
16+
super(type, pos, state);
17+
}
18+
19+
abstract int tickRate();
20+
21+
public void tickClient(Level level, BlockPos blockPos, BlockState blockState, TickingBlockEntity blockEntity) {};
22+
23+
public void tickServer(ServerLevel level, BlockPos blockPos, BlockState blockState, TickingBlockEntity blockEntity) {};
24+
25+
boolean shouldTick() {
26+
return tickCounter%tickRate() == 0;
27+
}
28+
29+
public void tickHandler(Level level, BlockPos blockPos, BlockState blockState, TickingBlockEntity blockEntity) {
30+
tickCounter++;
31+
if (shouldTick()) {
32+
tickCounter = 0;
33+
if (level.isClientSide) {
34+
tickClient(level, blockPos, blockState, blockEntity);
35+
} else {
36+
tickServer((ServerLevel) level, blockPos, blockState, blockEntity);
37+
}
38+
}
39+
}
40+
41+
public static void tick(Level level, BlockPos blockPos, BlockState blockState, TickingBlockEntity blockEntity) {
42+
blockEntity.tickHandler(level, blockPos, blockState, blockEntity);
43+
}
44+
45+
@Override
46+
public void savePacketNBT(CompoundTag tag, HolderLookup.Provider provider) {
47+
super.savePacketNBT(tag, provider);
48+
tag.putInt("tickCounter", tickCounter);
49+
}
50+
51+
@Override
52+
public void loadPacketNBT(CompoundTag tag, HolderLookup.Provider provider) {
53+
super.loadPacketNBT(tag, provider);
54+
if (tag.contains("tickCounter")) {
55+
tickCounter = tag.getInt("tickCounter");
56+
}
57+
}
58+
}

src/main/java/cy/jdkdigital/productivelib/common/block/entity/UpgradeableBlockEntity.java

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

src/main/java/cy/jdkdigital/productivelib/common/item/FilterUpgradeItem.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package cy.jdkdigital.productivelib.common.item;
22

3-
import cy.jdkdigital.productivelib.ProductiveLib;
43
import cy.jdkdigital.productivelib.event.AddEntityToFilterEvent;
54
import cy.jdkdigital.productivelib.event.UpgradeTooltipEvent;
65
import cy.jdkdigital.productivelib.registry.ModDataComponents;
@@ -36,26 +35,26 @@ public static void addAllowedEntity(ItemStack stack, ResourceLocation entity) {
3635
}
3736

3837
@Override
39-
public void appendHoverText(ItemStack pStack, TooltipContext pContext, List<Component> pTooltipComponents, TooltipFlag pTooltipFlag) {
40-
super.appendHoverText(pStack, pContext, pTooltipComponents, pTooltipFlag);
38+
public void appendHoverText(ItemStack pStack, TooltipContext pContext, List<Component> tooltipComponents, TooltipFlag pTooltipFlag) {
39+
super.appendHoverText(pStack, pContext, tooltipComponents, pTooltipFlag);
4140

4241
List<ResourceLocation> entities = pStack.getOrDefault(ModDataComponents.ENTITY_TYPE_LIST, new ArrayList<>());
4342

44-
if (entities.size() > 0) {
45-
pTooltipComponents.add(Component.translatable("productivelib.information.upgrade.upgrade_entity_filter.list_header").withStyle(ChatFormatting.WHITE));
43+
if (!entities.isEmpty()) {
44+
tooltipComponents.add(Component.translatable("productivelib.information.upgrade.upgrade_entity_filter.list_header").withStyle(ChatFormatting.WHITE));
4645

47-
var event = NeoForge.EVENT_BUS.post(new UpgradeTooltipEvent(pStack, pContext, pTooltipComponents, new ArrayList<>(entities)));
46+
var event = NeoForge.EVENT_BUS.post(new UpgradeTooltipEvent(pStack, pContext, tooltipComponents, new ArrayList<>(entities)));
4847
if (event.getEntities() != null) {
4948
event.getEntities().forEach(id -> {
50-
pTooltipComponents.add(Component.translatable("productivelib.information.upgrade.upgrade_entity_filter.list_item", Component.translatable("entity." + id.getNamespace() + "." + id.getPath()).getString()).withStyle(ChatFormatting.GOLD));
49+
tooltipComponents.add(Component.translatable("productivelib.information.upgrade.upgrade_entity_filter.list_item", Component.translatable("entity." + id.getNamespace() + "." + id.getPath()).getString()).withStyle(ChatFormatting.GOLD));
5150
});
5251
}
5352
}
5453

5554
if (entities.isEmpty()) {
56-
pTooltipComponents.add(Component.translatable("productivelib.information.upgrade.upgrade_entity_filter.empty").withStyle(ChatFormatting.WHITE));
55+
tooltipComponents.add(Component.translatable("productivelib.information.upgrade.upgrade_entity_filter.empty").withStyle(ChatFormatting.WHITE));
5756
} else {
58-
pTooltipComponents.add(Component.translatable("productivelib.information.upgrade.upgrade_entity_filter.clear").withStyle(ChatFormatting.WHITE));
57+
tooltipComponents.add(Component.translatable("productivelib.information.upgrade.upgrade_entity_filter.clear").withStyle(ChatFormatting.WHITE));
5958
}
6059
}
6160

0 commit comments

Comments
 (0)