Merge remote-tracking branch 'concealed/mc1.20.1/feature-dev' into mc1.20.1/feature-dev

This commit is contained in:
IThundxr 2025-02-12 15:13:39 -05:00
commit 88a190fb95
Failed to generate hash of commit
17 changed files with 114 additions and 50 deletions

View file

@ -1,4 +1,4 @@
// 1.20.1 2025-02-07T14:33:10.4318818 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] // 1.20.1 2025-02-12T10:49:57.1047644 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)]
60bbdf92d2ac9824ea6144955c74043a6005f79d assets/create/blockstates/acacia_window.json 60bbdf92d2ac9824ea6144955c74043a6005f79d assets/create/blockstates/acacia_window.json
6a67703c2697d81b7dc83e9d72a66f9c9ff08383 assets/create/blockstates/acacia_window_pane.json 6a67703c2697d81b7dc83e9d72a66f9c9ff08383 assets/create/blockstates/acacia_window_pane.json
c3ae87b62e81d8e9476eccd793bb1548d74c66a1 assets/create/blockstates/adjustable_chain_gearshift.json c3ae87b62e81d8e9476eccd793bb1548d74c66a1 assets/create/blockstates/adjustable_chain_gearshift.json
@ -642,8 +642,8 @@ b0d8f08968763a5f74e5cd5644377a76a9f39753 assets/create/blockstates/yellow_toolbo
fe8c497aacc641c2f01cec90bba9f19e59cc2ed2 assets/create/blockstates/yellow_valve_handle.json fe8c497aacc641c2f01cec90bba9f19e59cc2ed2 assets/create/blockstates/yellow_valve_handle.json
e819e93fdcbe9fd9c050a052d2718ff3b3539365 assets/create/blockstates/zinc_block.json e819e93fdcbe9fd9c050a052d2718ff3b3539365 assets/create/blockstates/zinc_block.json
64121dcb216381c83b4fe28aa361ea07c24c9ad0 assets/create/blockstates/zinc_ore.json 64121dcb216381c83b4fe28aa361ea07c24c9ad0 assets/create/blockstates/zinc_ore.json
99c03ec65894ea7d88e3346c5e0c086a7acec6af assets/create/lang/en_ud.json 443742f2bb4fc520ec7db483fd22425884cb95be assets/create/lang/en_ud.json
5f0262b9f6c1139659f6dab4d9c371be50503c0b assets/create/lang/en_us.json 282779fe7ecc64cd99c08e3a7397646af9f500c4 assets/create/lang/en_us.json
a97e1060e00ae701a02e39cd4ef8054cf345fac4 assets/create/models/block/acacia_window.json a97e1060e00ae701a02e39cd4ef8054cf345fac4 assets/create/models/block/acacia_window.json
103e032c0b1a0a6a27c67da8c91179a564bd281c assets/create/models/block/acacia_window_pane_noside.json 103e032c0b1a0a6a27c67da8c91179a564bd281c assets/create/models/block/acacia_window_pane_noside.json
fb00b627abda76ad4fea867ca57dbfadd24fffa3 assets/create/models/block/acacia_window_pane_noside_alt.json fb00b627abda76ad4fea867ca57dbfadd24fffa3 assets/create/models/block/acacia_window_pane_noside_alt.json

View file

@ -1,4 +1,4 @@
// 1.20.1 2025-02-07T11:36:36.6037564 Create's Standard Recipes // 1.20.1 2025-02-12T10:49:57.1801346 Create's Standard Recipes
a8cc4af26f6c7c45a9eef12e92af1452fe042454 data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank.json a8cc4af26f6c7c45a9eef12e92af1452fe042454 data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank.json
2c2639c7b307ee7c7a4e97e5efebf496788998ad data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank_from_netherite.json 2c2639c7b307ee7c7a4e97e5efebf496788998ad data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank_from_netherite.json
81dcf0cb1aa99e39bc7d1a386e07cad4cee7d8b9 data/create/advancements/recipes/combat/crafting/appliances/netherite_diving_boots.json 81dcf0cb1aa99e39bc7d1a386e07cad4cee7d8b9 data/create/advancements/recipes/combat/crafting/appliances/netherite_diving_boots.json
@ -466,7 +466,7 @@ d994ef262b16357984d3ed62f6563d2f37266193 data/create/recipes/crafting/logistics/
4daadd2c67fe8bbf5594fb50dcf051dad7f9997a data/create/recipes/crafting/logistics/factory_gauge.json 4daadd2c67fe8bbf5594fb50dcf051dad7f9997a data/create/recipes/crafting/logistics/factory_gauge.json
2fb7722137990b9b9be967a1f766e138678d0573 data/create/recipes/crafting/logistics/factory_gauge_clear.json 2fb7722137990b9b9be967a1f766e138678d0573 data/create/recipes/crafting/logistics/factory_gauge_clear.json
f3ba21e8979256fb78cd618ac4f1082b0b2f9e0c data/create/recipes/crafting/logistics/item_hatch.json f3ba21e8979256fb78cd618ac4f1082b0b2f9e0c data/create/recipes/crafting/logistics/item_hatch.json
38c6236d7ac157a75ac5a98ab9b712eabb0c78c4 data/create/recipes/crafting/logistics/packager.json 7d66c3b5d704f583e32617b37620e749462eaa1f data/create/recipes/crafting/logistics/packager.json
6b51fa6a5bd1e9dc8e7387269d985cd622ab8ada data/create/recipes/crafting/logistics/packager_from_conversion.json 6b51fa6a5bd1e9dc8e7387269d985cd622ab8ada data/create/recipes/crafting/logistics/packager_from_conversion.json
6852cb8ff6916981920ab9c987c6e357e9236511 data/create/recipes/crafting/logistics/package_frogport.json 6852cb8ff6916981920ab9c987c6e357e9236511 data/create/recipes/crafting/logistics/package_frogport.json
dd28b63ceb46a1e9071549c4f8ff32f520c667f6 data/create/recipes/crafting/logistics/powered_latch.json dd28b63ceb46a1e9071549c4f8ff32f520c667f6 data/create/recipes/crafting/logistics/powered_latch.json

View file

@ -1580,6 +1580,7 @@
"create.package_port.cannot_reach_down": "pɹɐʍuʍop ʇɔǝuuoɔ ʇouuɐƆ", "create.package_port.cannot_reach_down": "pɹɐʍuʍop ʇɔǝuuoɔ ʇouuɐƆ",
"create.package_port.too_far": "ʎɐʍɐ ɹɐɟ oo⟘", "create.package_port.too_far": "ʎɐʍɐ ɹɐɟ oo⟘",
"create.package_port.valid": "✔ ʇɔǝuuoƆ uɐƆ", "create.package_port.valid": "✔ ʇɔǝuuoƆ uɐƆ",
"create.packager.no_portable_storage": ןʇɔǝɹıp ǝbɐɹoʇS ǝןqɐʇɹoԀ ɥʇıʍ ǝɔɐɟɹǝʇuı ʇouuɐɔ sɹǝbɐʞɔɐԀ",
"create.packager_link.clear": "uoıʇɔǝןǝs pǝɹɐǝןƆ", "create.packager_link.clear": "uoıʇɔǝןǝs pǝɹɐǝןƆ",
"create.packager_link.set": "pǝʇɔǝןǝs ʇǝbɹɐ⟘", "create.packager_link.set": "pǝʇɔǝןǝs ʇǝbɹɐ⟘",
"create.packager_link.success": "ʇǝbɹɐʇ oʇ punoq ʎןןnɟssǝɔɔnS", "create.packager_link.success": "ʇǝbɹɐʇ oʇ punoq ʎןןnɟssǝɔɔnS",

View file

@ -1580,6 +1580,7 @@
"create.package_port.cannot_reach_down": "Cannot connect downward", "create.package_port.cannot_reach_down": "Cannot connect downward",
"create.package_port.too_far": "Too far away", "create.package_port.too_far": "Too far away",
"create.package_port.valid": "Can Connect ✔", "create.package_port.valid": "Can Connect ✔",
"create.packager.no_portable_storage": "Packagers cannot interface with Portable Storage directly",
"create.packager_link.clear": "Cleared selection", "create.packager_link.clear": "Cleared selection",
"create.packager_link.set": "Target selected", "create.packager_link.set": "Target selected",
"create.packager_link.success": "Successfully bound to target", "create.packager_link.success": "Successfully bound to target",

View file

@ -7,12 +7,15 @@
}, },
"C": { "C": {
"tag": "forge:ingots/iron" "tag": "forge:ingots/iron"
},
"R": {
"tag": "forge:dusts/redstone"
} }
}, },
"pattern": [ "pattern": [
" C ", " C ",
"CAC", "CAC",
" C " "RCR"
], ],
"result": { "result": {
"item": "create:packager" "item": "create:packager"

View file

@ -91,7 +91,6 @@ import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.NbtUtils;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
import net.minecraft.network.protocol.game.DebugPackets; import net.minecraft.network.protocol.game.DebugPackets;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.ai.village.poi.PoiTypes; import net.minecraft.world.entity.ai.village.poi.PoiTypes;
@ -103,11 +102,11 @@ import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.ButtonBlock; import net.minecraft.world.level.block.ButtonBlock;
import net.minecraft.world.level.block.ChestBlock; import net.minecraft.world.level.block.ChestBlock;
import net.minecraft.world.level.block.DoorBlock; import net.minecraft.world.level.block.DoorBlock;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.PressurePlateBlock; import net.minecraft.world.level.block.PressurePlateBlock;
import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.level.block.SimpleWaterloggedBlock; import net.minecraft.world.level.block.SimpleWaterloggedBlock;
import net.minecraft.world.level.block.entity.BlockEntity; 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.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.ChestType; import net.minecraft.world.level.block.state.properties.ChestType;
@ -652,9 +651,8 @@ public abstract class Contraption {
if (be != null) { if (be != null) {
CompoundTag updateTag = be.getUpdateTag(); CompoundTag updateTag = be.getUpdateTag();
// the ID needs to be in the tag so the client can properly add the BlockEntity // empty tags are intentionally kept, see writeBlocksCompound
ResourceLocation id = Objects.requireNonNull(BlockEntityType.getKey(be.getType())); // for testing, this line can be commented to emulate legacy behavior
updateTag.putString("id", id.toString());
updateTags.put(localPos, updateTag); updateTags.put(localPos, updateTag);
} }
@ -904,10 +902,12 @@ public abstract class Contraption {
// for client sync, treat the updateTag as the data // for client sync, treat the updateTag as the data
if (updateTag != null) { if (updateTag != null) {
c.put("Data", updateTag); c.put("Data", updateTag);
} } else if (block.nbt() != null) {
// legacy: use full data if update tag is not available // an updateTag is saved for all BlockEntities, even when empty.
if (updateTag == null && block.nbt() != null) { // this case means that the contraption was assembled pre-updateTags.
// in this case, we need to use the full BlockEntity data.
c.put("Data", block.nbt()); c.put("Data", block.nbt());
NBTHelper.putMarker(c, "Legacy");
} }
} else { } else {
// otherwise, write actual data as the data, save updateTag on its own // otherwise, write actual data as the data, save updateTag on its own
@ -962,29 +962,17 @@ public abstract class Contraption {
if (c.contains("UpdateTag", Tag.TAG_COMPOUND)) { if (c.contains("UpdateTag", Tag.TAG_COMPOUND)) {
CompoundTag updateTag = c.getCompound("UpdateTag"); CompoundTag updateTag = c.getCompound("UpdateTag");
if (!updateTag.isEmpty()) { // it's very important that empty tags are read here. see writeBlocksCompound
this.updateTags.put(info.pos(), updateTag); this.updateTags.put(info.pos(), updateTag);
}
} }
if (!world.isClientSide) if (!world.isClientSide)
return; return;
CompoundTag tag = info.nbt(); // create the BlockEntity client-side for rendering
if (tag == null) BlockEntity be = readBlockEntity(world, info, c);
return;
tag.putInt("x", info.pos().getX());
tag.putInt("y", info.pos().getY());
tag.putInt("z", info.pos().getZ());
BlockEntity be = BlockEntity.loadStatic(info.pos(), info.state(), tag);
if (be == null) if (be == null)
return; return;
be.setLevel(world);
if (be instanceof KineticBlockEntity kbe)
kbe.setSpeed(0);
be.getBlockState();
presentBlockEntities.put(info.pos(), be); presentBlockEntities.put(info.pos(), be);
modelData.put(info.pos(), be.getModelData()); modelData.put(info.pos(), be.getModelData());
@ -996,6 +984,47 @@ public abstract class Contraption {
}); });
} }
@Nullable
private static BlockEntity readBlockEntity(Level level, StructureBlockInfo info, CompoundTag tag) {
BlockState state = info.state();
BlockPos pos = info.pos();
CompoundTag nbt = info.nbt();
if (tag.contains("Legacy")) {
// for contraptions that were assembled pre-updateTags, we need to use the old strategy.
if (nbt == null)
return null;
nbt.putInt("x", pos.getX());
nbt.putInt("y", pos.getY());
nbt.putInt("z", pos.getZ());
BlockEntity be = BlockEntity.loadStatic(pos, state, nbt);
postprocessReadBlockEntity(level, be);
return be;
}
if (!state.hasBlockEntity() || !(state.getBlock() instanceof EntityBlock entityBlock))
return null;
BlockEntity be = entityBlock.newBlockEntity(pos, state);
postprocessReadBlockEntity(level, be);
if (be != null && nbt != null) {
be.handleUpdateTag(nbt);
}
return be;
}
private static void postprocessReadBlockEntity(Level level, @Nullable BlockEntity be) {
if (be != null) {
be.setLevel(level);
if (be instanceof KineticBlockEntity kbe) {
kbe.setSpeed(0);
}
}
}
private static StructureBlockInfo readStructureBlockInfo(CompoundTag blockListEntry, private static StructureBlockInfo readStructureBlockInfo(CompoundTag blockListEntry,
HashMapPalette<BlockState> palette) { HashMapPalette<BlockState> palette) {
return new StructureBlockInfo(BlockPos.of(blockListEntry.getLong("Pos")), return new StructureBlockInfo(BlockPos.of(blockListEntry.getLong("Pos")),

View file

@ -48,6 +48,7 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.client.model.data.ModelData;
public class ContraptionVisual<E extends AbstractContraptionEntity> extends AbstractEntityVisual<E> implements DynamicVisual, TickableVisual, LightUpdatedVisual, ShaderLightVisual { public class ContraptionVisual<E extends AbstractContraptionEntity> extends AbstractEntityVisual<E> implements DynamicVisual, TickableVisual, LightUpdatedVisual, ShaderLightVisual {
@ -74,6 +75,9 @@ public class ContraptionVisual<E extends AbstractContraptionEntity> extends Abst
setEmbeddingMatrices(partialTick); setEmbeddingMatrices(partialTick);
Contraption contraption = entity.getContraption(); Contraption contraption = entity.getContraption();
// The contraption could be null if it wasn't synced (ex. too much data)
if (contraption == null)
return;
setupModel(contraption); setupModel(contraption);

View file

@ -214,7 +214,7 @@ public class FactoryPanelBehaviour extends FilteringBehaviour implements MenuPro
SmartBlockEntity oldBE = blockEntity; SmartBlockEntity oldBE = blockEntity;
FactoryPanelPosition oldPos = getPanelPosition(); FactoryPanelPosition oldPos = getPanelPosition();
slot = newPos.slot(); moveToSlot(newPos.slot());
// Add to new BE // Add to new BE
if (level.getBlockEntity(newPos.pos()) instanceof FactoryPanelBlockEntity fpbe) { if (level.getBlockEntity(newPos.pos()) instanceof FactoryPanelBlockEntity fpbe) {
@ -268,6 +268,12 @@ public class FactoryPanelBehaviour extends FilteringBehaviour implements MenuPro
player.level() player.level()
.playSound(null, newPos.pos(), SoundEvents.COPPER_BREAK, SoundSource.BLOCKS, 1.0f, 1.0f); .playSound(null, newPos.pos(), SoundEvents.COPPER_BREAK, SoundSource.BLOCKS, 1.0f, 1.0f);
} }
private void moveToSlot(PanelSlot slot) {
this.slot = slot;
if (this.getSlotPositioning() instanceof FactoryPanelSlotPositioning fpsp)
fpsp.slot = slot;
}
@Override @Override
public void initialize() { public void initialize() {

View file

@ -16,7 +16,7 @@ import net.minecraft.world.phys.Vec3;
class FactoryPanelSlotPositioning extends ValueBoxTransform { class FactoryPanelSlotPositioning extends ValueBoxTransform {
private PanelSlot slot; public PanelSlot slot;
public FactoryPanelSlotPositioning(PanelSlot slot) { public FactoryPanelSlotPositioning(PanelSlot slot) {
this.slot = slot; this.slot = slot;

View file

@ -9,6 +9,7 @@ import com.simibubi.create.content.logistics.box.PackageItem;
import com.simibubi.create.foundation.advancement.AdvancementBehaviour; import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
import com.simibubi.create.foundation.block.IBE; import com.simibubi.create.foundation.block.IBE;
import com.simibubi.create.foundation.block.WrenchableDirectionalBlock; import com.simibubi.create.foundation.block.WrenchableDirectionalBlock;
import com.simibubi.create.foundation.utility.CreateLang;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -33,6 +34,7 @@ import net.minecraft.world.level.pathfinder.PathComputationType;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.util.FakePlayer;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
public class PackagerBlock extends WrenchableDirectionalBlock implements IBE<PackagerBlockEntity>, IWrenchable { public class PackagerBlock extends WrenchableDirectionalBlock implements IBE<PackagerBlockEntity>, IWrenchable {
@ -70,13 +72,24 @@ public class PackagerBlock extends WrenchableDirectionalBlock implements IBE<Pac
break; break;
} }
} }
Player player = context.getPlayer();
if (preferredFacing == null) { if (preferredFacing == null) {
Direction facing = context.getNearestLookingDirection(); Direction facing = context.getNearestLookingDirection();
preferredFacing = context.getPlayer() != null && context.getPlayer() preferredFacing = player != null && player
.isShiftKeyDown() ? facing : facing.getOpposite(); .isShiftKeyDown() ? facing : facing.getOpposite();
} }
if (player != null && !(player instanceof FakePlayer)) {
if (AllBlocks.PORTABLE_STORAGE_INTERFACE.has(context.getLevel()
.getBlockState(context.getClickedPos()
.relative(preferredFacing.getOpposite())))) {
CreateLang.translate("packager.no_portable_storage")
.sendStatus(player);
return null;
}
}
return super.getStateForPlacement(context).setValue(POWERED, context.getLevel() return super.getStateForPlacement(context).setValue(POWERED, context.getLevel()
.hasNeighborSignal(context.getClickedPos())) .hasNeighborSignal(context.getClickedPos()))
.setValue(FACING, preferredFacing); .setValue(FACING, preferredFacing);

View file

@ -6,8 +6,6 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import org.jetbrains.annotations.NotNull;
import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllSoundEvents; import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.Create; import com.simibubi.create.Create;

View file

@ -30,7 +30,7 @@ public class RepackagerBlockEntity extends PackagerBlockEntity {
return false; return false;
IItemHandler targetInv = targetInventory.getInventory(); IItemHandler targetInv = targetInventory.getInventory();
if (targetInv == null) if (targetInv == null || targetInv instanceof PackagerItemHandler)
return false; return false;
boolean targetIsCreativeCrate = targetInv instanceof BottomlessItemHandler; boolean targetIsCreativeCrate = targetInv instanceof BottomlessItemHandler;

View file

@ -82,13 +82,13 @@ public class StockKeeperRequestScreen extends AbstractSimiContainerScreen<StockK
implements ScreenWithStencils { implements ScreenWithStencils {
public static class CategoryEntry { public static class CategoryEntry {
ItemStack filterStack;
boolean hidden; boolean hidden;
String name; String name;
int y; int y;
int targetBECategory;
public CategoryEntry(ItemStack filterStack, String name, int y) { public CategoryEntry(int targetBECategory, String name, int y) {
this.filterStack = filterStack; this.targetBECategory = targetBECategory;
this.name = name; this.name = name;
hidden = false; hidden = false;
this.y = y; this.y = y;
@ -289,15 +289,15 @@ public class StockKeeperRequestScreen extends AbstractSimiContainerScreen<StockK
categories = new ArrayList<>(); categories = new ArrayList<>();
for (int i = 0; i < blockEntity.categories.size(); i++) { for (int i = 0; i < blockEntity.categories.size(); i++) {
ItemStack stack = blockEntity.categories.get(i); ItemStack stack = blockEntity.categories.get(i);
CategoryEntry entry = new CategoryEntry(stack, stack.isEmpty() ? "" CategoryEntry entry = new CategoryEntry(i, stack.isEmpty() ? ""
: stack.getHoverName() : stack.getHoverName()
.getString(), .getString(),
0); 0);
entry.hidden = hiddenCategories.contains(i); entry.hidden = hiddenCategories.contains(i);
categories.add(entry); categories.add(entry);
} }
CategoryEntry unsorted = new CategoryEntry(null, CreateLang.translate("gui.stock_keeper.unsorted_category") CategoryEntry unsorted = new CategoryEntry(-1, CreateLang.translate("gui.stock_keeper.unsorted_category")
.string(), 0); .string(), 0);
unsorted.hidden = hiddenCategories.contains(-1); unsorted.hidden = hiddenCategories.contains(-1);
categories.add(unsorted); categories.add(unsorted);
@ -953,7 +953,7 @@ public class StockKeeperRequestScreen extends AbstractSimiContainerScreen<StockK
int localY = y - itemsY; int localY = y - itemsY;
for (int categoryIndex = 0; categoryIndex < displayedItems.size(); categoryIndex++) { for (int categoryIndex = 0; categoryIndex < displayedItems.size(); categoryIndex++) {
CategoryEntry entry = categories.isEmpty() ? new CategoryEntry(null, "", 0) : categories.get(categoryIndex); CategoryEntry entry = categories.isEmpty() ? new CategoryEntry(0, "", 0) : categories.get(categoryIndex);
if (entry.hidden) if (entry.hidden)
continue; continue;
@ -1074,7 +1074,10 @@ public class StockKeeperRequestScreen extends AbstractSimiContainerScreen<StockK
if (displayedItems.get(categoryIndex) if (displayedItems.get(categoryIndex)
.isEmpty()) .isEmpty())
continue; continue;
int indexOf = entry.filterStack == null ? -1 : blockEntity.categories.indexOf(entry.filterStack); int indexOf = entry.targetBECategory;
if (indexOf >= blockEntity.categories.size())
continue;
hiddenCategories.remove(indexOf); hiddenCategories.remove(indexOf);
if (!entry.hidden) if (!entry.hidden)
hiddenCategories.add(indexOf); hiddenCategories.add(indexOf);

View file

@ -212,9 +212,12 @@ public class DisplayLinkBlockEntity extends LinkWithBulbBlockEntity {
} }
private static final Vec3 bulbOffset = VecHelper.voxelSpace(11, 7, 5); private static final Vec3 bulbOffset = VecHelper.voxelSpace(11, 7, 5);
private static final Vec3 bulbOffsetVertical = VecHelper.voxelSpace(5, 7, 11);
@Override @Override
public Vec3 getBulbOffset(BlockState state) { public Vec3 getBulbOffset(BlockState state) {
if (state.getOptionalValue(DisplayLinkBlock.FACING).orElse(Direction.UP).getAxis().isVertical())
return bulbOffsetVertical;
return bulbOffset; return bulbOffset;
} }

View file

@ -1064,9 +1064,10 @@ public class StandardRecipeGen extends CreateRecipeProvider {
PACKAGER = create(AllBlocks.PACKAGER).unlockedBy(I::cardboard) PACKAGER = create(AllBlocks.PACKAGER).unlockedBy(I::cardboard)
.viaShaped(b -> b.define('C', I.iron()) .viaShaped(b -> b.define('C', I.iron())
.define('A', AllBlocks.CARDBOARD_BLOCK) .define('A', AllBlocks.CARDBOARD_BLOCK)
.define('R', I.redstone())
.pattern(" C ") .pattern(" C ")
.pattern("CAC") .pattern("CAC")
.pattern(" C ")), .pattern("RCR")),
PACKAGER_CYCLE = conversionCycle(ImmutableList.of(AllBlocks.PACKAGER, AllBlocks.REPACKAGER)), PACKAGER_CYCLE = conversionCycle(ImmutableList.of(AllBlocks.PACKAGER, AllBlocks.REPACKAGER)),

View file

@ -6,7 +6,8 @@ import java.util.List;
import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;
import com.mojang.blaze3d.platform.InputConstants; import org.lwjgl.glfw.GLFW;
import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.AllGuiTextures;
import net.createmod.catnip.gui.TickableGuiEventListener; import net.createmod.catnip.gui.TickableGuiEventListener;
@ -140,9 +141,8 @@ public abstract class AbstractSimiContainerScreen<T extends AbstractContainerMen
@Override @Override
public boolean keyPressed(int pKeyCode, int pScanCode, int pModifiers) { public boolean keyPressed(int pKeyCode, int pScanCode, int pModifiers) {
InputConstants.Key mouseKey = InputConstants.getKey(pKeyCode, pScanCode); if (getFocused() instanceof EditBox && pKeyCode != GLFW.GLFW_KEY_ESCAPE)
if (getFocused() instanceof EditBox && this.minecraft.options.keyInventory.isActiveAndMatches(mouseKey)) return getFocused().keyPressed(pKeyCode, pScanCode, pModifiers);
return false;
return super.keyPressed(pKeyCode, pScanCode, pModifiers); return super.keyPressed(pKeyCode, pScanCode, pModifiers);
} }

View file

@ -1023,6 +1023,8 @@
"create.contraption.door_control.none.short": "None", "create.contraption.door_control.none.short": "None",
"create.contraption.door_control.player_facing": "You are facing: %1$s", "create.contraption.door_control.player_facing": "You are facing: %1$s",
"create.packager.no_portable_storage": "Packagers cannot interface with Portable Storage directly",
"create.packager_link.set": "Target selected", "create.packager_link.set": "Target selected",
"create.packager_link.success": "Successfully bound to target", "create.packager_link.success": "Successfully bound to target",
"create.packager_link.clear": "Cleared selection", "create.packager_link.clear": "Cleared selection",