Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ jade = "26.1.1+neoforge"
modDevGradle = "2.0.141"
lombok = "8.7.1"
machete = "1.2.0"
anvillib = "2.0.0+snapshot.485"
anvillib = "2.0.0+snapshot.492"
ageratum = "0.0.1+build.109"
sodium = "mc26.1.2-0.8.10-neoforge"
iris = "1.10.9+26.1-neoforge"
Expand Down
21 changes: 18 additions & 3 deletions src/generated/resources/assets/anvilcraft/lang/en_ud.json
Original file line number Diff line number Diff line change
Expand Up @@ -1778,15 +1778,30 @@
"screen.anvilcraft.smithing_template.transcendium_upgrade_smithing_template.applies_to": "poᴚ uoᵷɐɹᗡ ɹǝqɯƎ 'ɹǝɯɯɐH ꞁᴉʌuⱯ ɹǝqɯƎ 'ꞁᴉʌuⱯ ꞁɐʇǝW ɹǝqɯƎ",
"screen.anvilcraft.smithing_template.transcendium_upgrade_smithing_template.base_slot_description": "ɯǝʇᴉ ǝꞁqɐpɐɹᵷdn ʇnԀ",
"screen.anvilcraft.smithing_template.transcendium_upgrade_smithing_template.upgrade_ingredients": "ʞɔoꞁᗺ ɯnᴉpuǝɔsuɐɹ⟘ ɹo ʇoᵷuI ɯnᴉpuǝɔsuɐɹ⟘",
"screen.anvilcraft.storage.category.add": "ʎɹoᵷǝʇɐɔ ɯoʇsnɔ ppɐ oʇ ɹǝʇꞁᴉℲ ᵷuᴉpꞁoɥ uǝɥʍ ʞɔᴉꞁɔ ʇɟǝꞀ",
"screen.anvilcraft.storage.category.alternate.removable": "ʎɹoᵷǝʇɐɔ sᴉɥʇ ǝʇǝꞁǝp oʇ ʞɔᴉꞁɔ ʇɥᵷᴉɹ 'ʇɔǝꞁǝs oʇ ʞɔᴉꞁɔ ʇɟǝꞀ",
"screen.anvilcraft.storage.category.alternate.unremovable": "ʇɔǝꞁǝs oʇ ʞɔᴉꞁɔ ʇɟǝꞀ",
"screen.anvilcraft.storage.category.add": "ʎɹoᵷǝʇɐɔ ɯoʇsnɔ ppɐ oʇ ɹǝʇꞁᴉℲ ᵷuᴉʇɔǝꞁǝs uǝɥʍ ʞɔᴉꞁɔ ʇɟǝꞀ",
"screen.anvilcraft.storage.category.alternate.removable": "ʎɹoᵷǝʇɐɔ sᴉɥʇ ǝʇǝꞁǝp oʇ ʞɔᴉꞁɔ ʇɥᵷᴉɹ 'ʇsᴉꞁ oʇ ʞɔᴉꞁɔ ʇɟǝꞀ",
"screen.anvilcraft.storage.category.alternate.unremovable": "ʇsᴉꞁ oʇ ʞɔᴉꞁɔ ʇɟǝꞀ",
"screen.anvilcraft.storage.category.mode": "%s :ǝpoW",
"screen.anvilcraft.storage.category.mode.allowlist": "ʎɐꞁdsᴉᗡ ʍoꞁꞁⱯ",
"screen.anvilcraft.storage.category.mode.blocklist": "ʎɐꞁdsᴉᗡ ʞɔoꞁᗺ",
"screen.anvilcraft.storage.category.mode.unlimited": "pǝʇᴉɯᴉꞁu∩",
"screen.anvilcraft.storage.category.name": "%s :ǝɯɐN",
"screen.anvilcraft.storage.category.setting.title": "ᵷuᴉʇʇǝS ʎɹoᵷǝʇɐƆ",
"screen.anvilcraft.storage.category.tooltip": "doʇ oʇ uᴉd oʇ ʞɔᴉꞁɔ ʇɥᵷᴉɹ 'sǝʇɐuɹǝʇꞁɐ oʇ ǝʌoɯ oʇ ʞɔᴉꞁɔ ʇɟǝꞀ",
"screen.anvilcraft.storage.nbt": "%s ʎꞁʇuǝɹɹnƆ :⟘ᗺN ˙ɟɟᴉᗡ ɥʇᴉʍ sɯǝʇI pꞁoℲ pꞁnoɥS",
"screen.anvilcraft.storage.nbt.fold": "ǝnɹ⟘",
"screen.anvilcraft.storage.nbt.unfold": "ǝsꞁɐℲ",
"screen.anvilcraft.storage.order": "%s ʎꞁʇuǝɹɹnƆ :ɹǝpɹO ʇɹoS",
"screen.anvilcraft.storage.order.reverse": "ǝsɹǝʌǝᴚ",
"screen.anvilcraft.storage.order.sequential": "ꞁɐᴉʇuǝnbǝS",
"screen.anvilcraft.storage.search": "%s ʎꞁʇuǝɹɹnƆ :ǝpoW ɥɔɹɐǝS",
"screen.anvilcraft.storage.search.clear": "ɹɐǝꞁƆ",
"screen.anvilcraft.storage.search.edit": "ɥɔɹɐǝS",
"screen.anvilcraft.storage.search.retention": "uoᴉʇuǝʇǝᴚ",
"screen.anvilcraft.storage.sort": "%s ʎꞁʇuǝɹɹnƆ :ǝpoW ʇɹoS",
"screen.anvilcraft.storage.sort.count": "ʇunoƆ ʎq",
"screen.anvilcraft.storage.sort.mod": "ᗡI poW ʎq",
"screen.anvilcraft.storage.sort.name": "ǝɯɐN ʎɐꞁdsᴉᗡ ʎq",
"screen.anvilcraft.structure_scanner.info_title": "oɟuI ǝɹnʇɔnɹʇS",
"screen.anvilcraft.structure_scanner.ready": "ʎpɐǝɹ uɐɔS",
"screen.anvilcraft.structure_scanner.tooltip.large_structure": "pǝʌɐs ǝq ꞁꞁᴉʇs uɐɔ ʇnq 'ɹǝɔɐꞁԀ ʞɔoꞁᗺ ʇɹɐɯS ǝɥʇ ʎq pǝɔɐꞁd ǝq ʇouuɐɔ puɐ ǝᵷɹɐꞁ sᴉ ǝɹnʇɔnɹʇs sᴉɥ⟘",
Expand Down
21 changes: 18 additions & 3 deletions src/generated/resources/assets/anvilcraft/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -1778,15 +1778,30 @@
"screen.anvilcraft.smithing_template.transcendium_upgrade_smithing_template.applies_to": "Ember Metal Anvil, Ember Anvil Hammer, Ember Dragon Rod",
"screen.anvilcraft.smithing_template.transcendium_upgrade_smithing_template.base_slot_description": "Put upgradable item",
"screen.anvilcraft.smithing_template.transcendium_upgrade_smithing_template.upgrade_ingredients": "Transcendium Ingot or Transcendium Block",
"screen.anvilcraft.storage.category.add": "Left click when holding Filter to add custom category",
"screen.anvilcraft.storage.category.alternate.removable": "Left click to select, right click to delete this category",
"screen.anvilcraft.storage.category.alternate.unremovable": "Left click to select",
"screen.anvilcraft.storage.category.add": "Left click when selecting Filter to add custom category",
"screen.anvilcraft.storage.category.alternate.removable": "Left click to list, right click to delete this category",
"screen.anvilcraft.storage.category.alternate.unremovable": "Left click to list",
"screen.anvilcraft.storage.category.mode": "Mode: %s",
"screen.anvilcraft.storage.category.mode.allowlist": "Allow Display",
"screen.anvilcraft.storage.category.mode.blocklist": "Block Display",
"screen.anvilcraft.storage.category.mode.unlimited": "Unlimited",
"screen.anvilcraft.storage.category.name": "Name: %s",
"screen.anvilcraft.storage.category.setting.title": "Category Setting",
"screen.anvilcraft.storage.category.tooltip": "Left click to move to alternates, right click to pin to top",
"screen.anvilcraft.storage.nbt": "Should Fold Items with Diff. NBT: Currently %s",
"screen.anvilcraft.storage.nbt.fold": "True",
"screen.anvilcraft.storage.nbt.unfold": "False",
"screen.anvilcraft.storage.order": "Sort Order: Currently %s",
"screen.anvilcraft.storage.order.reverse": "Reverse",
"screen.anvilcraft.storage.order.sequential": "Sequential",
"screen.anvilcraft.storage.search": "Search Mode: Currently %s",
"screen.anvilcraft.storage.search.clear": "Clear",
"screen.anvilcraft.storage.search.edit": "Search",
"screen.anvilcraft.storage.search.retention": "Retention",
"screen.anvilcraft.storage.sort": "Sort Mode: Currently %s",
"screen.anvilcraft.storage.sort.count": "by Count",
"screen.anvilcraft.storage.sort.mod": "by Mod ID",
"screen.anvilcraft.storage.sort.name": "by Display Name",
"screen.anvilcraft.structure_scanner.info_title": "Structure Info",
"screen.anvilcraft.structure_scanner.ready": "Scan ready",
"screen.anvilcraft.structure_scanner.tooltip.large_structure": "This structure is large and cannot be placed by the Smart Block Placer, but can still be saved",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ private void initStacks(NonNullList<UnlimitedItemStack> stacks) {
}
// 找不到不塞,下一个
}
this.updateStacksSize();
}

public void addSpaceSize(IntUnaryOperator adder) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@
package dev.dubhe.anvilcraft.block.container.storage;

import dev.anvilcraft.lib.v2.util.DistExecutor;
import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable;
import dev.dubhe.anvilcraft.block.entity.storage.CrateBlockEntity;
import dev.dubhe.anvilcraft.init.ModMenuTypes;
import dev.dubhe.anvilcraft.client.gui.screen.StorageScreen;
import dev.dubhe.anvilcraft.init.block.ModBlockEntities;
import dev.dubhe.anvilcraft.network.multiple.StoragePackets;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.neoforged.api.distmarker.Dist;
import org.jspecify.annotations.Nullable;

import java.util.ArrayList;
import java.util.List;

public class CrateBlock extends Block implements EntityBlock, IHammerRemovable {
public CrateBlock(Properties properties) {
super(properties);
Expand All @@ -30,6 +33,25 @@ public CrateBlock(Properties properties) {
return ModBlockEntities.CRATE.create(pos, state);
}

public static List<CrateBlockEntity> getNearbyCrates(Level level, BlockPos sourcePos) {
List<CrateBlockEntity> crates = new ArrayList<>();
CrateBlockEntity source = null;
for (BlockPos pos : BlockPos.betweenClosed(sourcePos.offset(-1, -1, -1), sourcePos.offset(1, 1, 1))) {
if (!(level.getBlockEntity(pos) instanceof CrateBlockEntity crate)) {
continue;
}
if (pos.equals(sourcePos)) {
source = crate;
} else {
crates.add(crate);
}
}
if (source != null) {
crates.add(source);
}
return crates;
}

@Override
public BlockState playerWillDestroy(Level level, BlockPos pos, BlockState state, Player player) {
BlockEntity blockEntity = level.getBlockEntity(pos);
Expand All @@ -52,12 +74,11 @@ protected InteractionResult useItemOn(
) {
BlockEntity blockEntity = level.getBlockEntity(pos);
if (blockEntity instanceof CrateBlockEntity entity) {
if (player instanceof ServerPlayer serverPlayer) {
if (serverPlayer.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) return InteractionResult.PASS;
StoragePackets.sync(serverPlayer, entity.getId(), serverPlayer.registryAccess());
ModMenuTypes.open(serverPlayer, entity, pos);
if (player.isSpectator()) return InteractionResult.PASS;
if (player instanceof ServerPlayer) {
return InteractionResult.SUCCESS_SERVER;
} else {
} else if (level.isClientSide()) {
DistExecutor.run(Dist.CLIENT, () -> () -> StorageScreen.openScreen(entity.getBlockPos()));
return InteractionResult.SUCCESS;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package dev.dubhe.anvilcraft.block.container.storage;

import dev.anvilcraft.lib.v2.util.DistExecutor;
import dev.anvilcraft.lib.v2.util.ShapeUtil;
import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable;
import dev.dubhe.anvilcraft.block.entity.storage.HyperdimensionStorageStationBlockEntity;
import dev.dubhe.anvilcraft.block.multipart.MultiPartBlockEntity;
import dev.dubhe.anvilcraft.block.multipart.SimpleMultiPartBlock;
import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf;
import dev.dubhe.anvilcraft.init.ModMenuTypes;
import dev.dubhe.anvilcraft.client.gui.screen.StorageScreen;
import dev.dubhe.anvilcraft.init.block.ModBlockEntities;
import dev.dubhe.anvilcraft.network.multiple.StoragePackets;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerPlayer;
Expand All @@ -17,7 +17,6 @@
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
Expand All @@ -30,6 +29,7 @@
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.api.distmarker.Dist;

public class HyperdimensionStorageStationBlock
extends SimpleMultiPartBlock<Cube3x3PartHalf>
Expand Down Expand Up @@ -95,14 +95,13 @@ protected InteractionResult useItemOn(
InteractionHand hand,
BlockHitResult hitResult
) {
BlockEntity blockEntity = level.getBlockEntity(pos);
BlockEntity blockEntity = level.getBlockEntity(this.getMainPartPos(pos, state));
if (blockEntity instanceof HyperdimensionStorageStationBlockEntity entity) {
if (player instanceof ServerPlayer serverPlayer) {
if (serverPlayer.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) return InteractionResult.PASS;
StoragePackets.sync(serverPlayer, entity.getId(), serverPlayer.registryAccess());
ModMenuTypes.open(serverPlayer, entity, pos);
if (player.isSpectator()) return InteractionResult.PASS;
if (player instanceof ServerPlayer) {
return InteractionResult.SUCCESS_SERVER;
} else {
} else if (level.isClientSide()) {
DistExecutor.run(Dist.CLIENT, () -> () -> StorageScreen.openScreen(entity.getBlockPos()));
return InteractionResult.SUCCESS;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package dev.dubhe.anvilcraft.block.container.storage;

import dev.anvilcraft.lib.v2.util.DistExecutor;
import dev.anvilcraft.lib.v2.util.ShapeUtil;
import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable;
import dev.dubhe.anvilcraft.block.entity.storage.LargeCrateBlockEntity;
import dev.dubhe.anvilcraft.block.multipart.MultiPartBlockEntity;
import dev.dubhe.anvilcraft.block.multipart.SimpleMultiPartBlock;
import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf;
import dev.dubhe.anvilcraft.init.ModMenuTypes;
import dev.dubhe.anvilcraft.client.gui.screen.StorageScreen;
import dev.dubhe.anvilcraft.init.block.ModBlockEntities;
import dev.dubhe.anvilcraft.network.multiple.StoragePackets;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerPlayer;
Expand All @@ -17,7 +17,6 @@
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
Expand All @@ -30,6 +29,7 @@
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.api.distmarker.Dist;

public class LargeCrateBlock
extends SimpleMultiPartBlock<Cube3x3PartHalf>
Expand Down Expand Up @@ -95,14 +95,13 @@ protected InteractionResult useItemOn(
InteractionHand hand,
BlockHitResult hitResult
) {
BlockEntity blockEntity = level.getBlockEntity(pos);
BlockEntity blockEntity = level.getBlockEntity(this.getMainPartPos(pos, state));
if (blockEntity instanceof LargeCrateBlockEntity entity) {
if (player instanceof ServerPlayer serverPlayer) {
if (serverPlayer.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) return InteractionResult.PASS;
StoragePackets.sync(serverPlayer, entity.getId(), serverPlayer.registryAccess());
ModMenuTypes.open(serverPlayer, entity, pos);
if (player.isSpectator()) return InteractionResult.PASS;
if (player instanceof ServerPlayer) {
return InteractionResult.SUCCESS_SERVER;
} else {
} else if (level.isClientSide()) {
DistExecutor.run(Dist.CLIENT, () -> () -> StorageScreen.openScreen(entity.getBlockPos()));
return InteractionResult.SUCCESS;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package dev.dubhe.anvilcraft.block.container.storage;

import dev.anvilcraft.lib.v2.util.DistExecutor;
import dev.anvilcraft.lib.v2.util.ShapeUtil;
import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable;
import dev.dubhe.anvilcraft.block.entity.storage.ShulkerContainerBlockEntity;
import dev.dubhe.anvilcraft.block.multipart.FlexibleMultiPartBlock;
import dev.dubhe.anvilcraft.block.multipart.MultiPartBlockEntity;
import dev.dubhe.anvilcraft.block.state.OpenedCube3x3PartHalf;
import dev.dubhe.anvilcraft.init.ModMenuTypes;
import dev.dubhe.anvilcraft.client.gui.screen.StorageScreen;
import dev.dubhe.anvilcraft.init.block.ModBlockEntities;
import dev.dubhe.anvilcraft.network.multiple.StoragePackets;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerPlayer;
Expand All @@ -17,7 +17,6 @@
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Mirror;
Expand All @@ -33,6 +32,7 @@
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.api.distmarker.Dist;

public class ShulkerContainerBlock
extends FlexibleMultiPartBlock<OpenedCube3x3PartHalf, BooleanProperty, Boolean>
Expand Down Expand Up @@ -119,14 +119,13 @@ protected InteractionResult useItemOn(
InteractionHand hand,
BlockHitResult hitResult
) {
BlockEntity blockEntity = level.getBlockEntity(pos);
BlockEntity blockEntity = level.getBlockEntity(this.getMainPartPos(pos, state));
if (blockEntity instanceof ShulkerContainerBlockEntity entity) {
if (player instanceof ServerPlayer serverPlayer) {
if (serverPlayer.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) return InteractionResult.PASS;
StoragePackets.sync(serverPlayer, entity.getId(), serverPlayer.registryAccess());
ModMenuTypes.open(serverPlayer, entity, pos);
if (player.isSpectator()) return InteractionResult.PASS;
if (player instanceof ServerPlayer) {
return InteractionResult.SUCCESS_SERVER;
} else {
} else if (level.isClientSide()) {
DistExecutor.run(Dist.CLIENT, () -> () -> StorageScreen.openScreen(entity.getBlockPos()));
return InteractionResult.SUCCESS;
}
}
Expand Down
Loading
Loading