Skip to content

Commit ff4eb58

Browse files
authored
Merge branch 'Creators-of-Create:mc1.18/dev' into mc1.18/fixSignalNPE
2 parents fbc62d4 + 2201d87 commit ff4eb58

File tree

74 files changed

+1849
-1636
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+1849
-1636
lines changed

.github/ISSUE_TEMPLATE/bug_report.yml

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ body:
4949
label: Mod Version
5050
description: The version of the mod you were using when the bug occured
5151
options:
52+
- "0.5.1f"
5253
- "0.5.1e"
5354
- "0.5.1d"
5455
- "0.5.1c"

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G
44
org.gradle.daemon = false
55

66
# mod version info
7-
mod_version = 0.5.1.e
7+
mod_version = 0.5.1.f
88
artifact_minecraft_version = 1.18.2
99

1010
minecraft_version = 1.18.2

src/main/java/com/simibubi/create/Create.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public class Create {
6161

6262
public static final String ID = "create";
6363
public static final String NAME = "Create";
64-
public static final String VERSION = "0.5.1e";
64+
public static final String VERSION = "0.5.1f";
6565

6666
public static final Logger LOGGER = LogUtils.getLogger();
6767

src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java

+4
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ public void positionRider(Entity passenger, MoveFunction callback) {
217217
}
218218

219219
public Vec3 getPassengerPosition(Entity passenger, float partialTicks) {
220+
if (contraption == null)
221+
return null;
222+
220223
UUID id = passenger.getUUID();
221224
if (passenger instanceof OrientedContraptionEntity) {
222225
BlockPos localPos = contraption.getBearingPosOf(id);
@@ -231,6 +234,7 @@ public Vec3 getPassengerPosition(Entity passenger, float partialTicks) {
231234
BlockPos seat = contraption.getSeatOf(id);
232235
if (seat == null)
233236
return null;
237+
234238
Vec3 transformedVector = toGlobalVector(Vec3.atLowerCornerOf(seat)
235239
.add(.5, passenger.getMyRidingOffset() + ySize - .15f, .5), partialTicks)
236240
.add(VecHelper.getCenterOf(BlockPos.ZERO))

src/main/java/com/simibubi/create/content/contraptions/OrientedContraptionEntity.java

+3
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,9 @@ private void repositionOnCart(PoseStack matrixStack, float partialTicks, Entity
569569
private Vec3 getContraptionOffset(float partialTicks, Entity ridingEntity) {
570570
AbstractContraptionEntity parent = (AbstractContraptionEntity) ridingEntity;
571571
Vec3 passengerPosition = parent.getPassengerPosition(this, partialTicks);
572+
if (passengerPosition == null)
573+
return Vec3.ZERO;
574+
572575
double x = passengerPosition.x - Mth.lerp(partialTicks, this.xOld, this.getX());
573576
double y = passengerPosition.y - Mth.lerp(partialTicks, this.yOld, this.getY());
574577
double z = passengerPosition.z - Mth.lerp(partialTicks, this.zOld, this.getZ());

src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerBlockEntity.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public void searchForSharedValues() {
117117

118118
protected void acceptSharedValues(int mode, ItemStack filter) {
119119
dontPropagate = true;
120-
this.filtering.setFilter(filter);
120+
this.filtering.setFilter(filter.copy());
121121
this.mode.setValue(mode);
122122
dontPropagate = false;
123123
notifyUpdate();

src/main/java/com/simibubi/create/content/contraptions/actors/roller/RollerMovementBehaviour.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import com.simibubi.create.content.contraptions.render.ContraptionMatrices;
2020
import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher;
2121
import com.simibubi.create.content.kinetics.base.BlockBreakingMovementBehaviour;
22-
import com.simibubi.create.content.logistics.filter.FilterItem;
22+
import com.simibubi.create.content.logistics.filter.FilterItemStack;
2323
import com.simibubi.create.content.trains.bogey.StandardBogeyBlock;
2424
import com.simibubi.create.content.trains.entity.Carriage;
2525
import com.simibubi.create.content.trains.entity.CarriageBogey;
@@ -193,10 +193,10 @@ protected List<BlockPos> getPositionsToBreak(MovementContext context, BlockPos v
193193

194194
int startingY = 1;
195195
if (!getStateToPaveWith(context).isAir()) {
196-
ItemStack filter = ItemStack.of(context.blockEntityData.getCompound("Filter"));
197-
if (!ItemHelper
196+
FilterItemStack filter = context.getFilterFromBE();
197+
if (!ItemHelper
198198
.extract(context.contraption.getSharedInventory(),
199-
stack -> FilterItem.test(context.world, stack, filter), 1, true)
199+
stack -> filter.test(context.world, stack), 1, true)
200200
.isEmpty())
201201
startingY = 0;
202202
}
@@ -473,9 +473,9 @@ protected PaveResult tryFill(MovementContext context, BlockPos targetPos, BlockS
473473
.isEmpty())
474474
return PaveResult.FAIL;
475475

476-
ItemStack filter = ItemStack.of(context.blockEntityData.getCompound("Filter"));
476+
FilterItemStack filter = context.getFilterFromBE();
477477
ItemStack held = ItemHelper.extract(context.contraption.getSharedInventory(),
478-
stack -> FilterItem.test(context.world, stack, filter), 1, false);
478+
stack -> filter.test(context.world, stack), 1, false);
479479
if (held.isEmpty())
480480
return PaveResult.FAIL;
481481

src/main/java/com/simibubi/create/content/contraptions/behaviour/MovementContext.java

+10
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.function.UnaryOperator;
44

55
import com.simibubi.create.content.contraptions.Contraption;
6+
import com.simibubi.create.content.logistics.filter.FilterItemStack;
67
import com.simibubi.create.foundation.utility.VecHelper;
78

89
import net.minecraft.core.BlockPos;
@@ -31,6 +32,8 @@ public class MovementContext {
3132
public CompoundTag data;
3233
public Contraption contraption;
3334
public Object temporaryData;
35+
36+
private FilterItemStack filter;
3437

3538
public MovementContext(Level world, StructureBlockInfo info, Contraption contraption) {
3639
this.world = world;
@@ -47,6 +50,7 @@ public MovementContext(Level world, StructureBlockInfo info, Contraption contrap
4750
position = null;
4851
data = new CompoundTag();
4952
stall = false;
53+
filter = null;
5054
}
5155

5256
public float getAnimationSpeed() {
@@ -83,5 +87,11 @@ public CompoundTag writeToNBT(CompoundTag nbt) {
8387
nbt.put("Data", data.copy());
8488
return nbt;
8589
}
90+
91+
public FilterItemStack getFilterFromBE() {
92+
if (filter != null)
93+
return filter;
94+
return filter = FilterItemStack.of(blockEntityData.getCompound("Filter"));
95+
}
8696

8797
}

src/main/java/com/simibubi/create/content/decoration/placard/PlacardBlock.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.simibubi.create.AllSoundEvents;
99
import com.simibubi.create.content.equipment.wrench.IWrenchable;
1010
import com.simibubi.create.content.logistics.filter.FilterItem;
11+
import com.simibubi.create.content.logistics.filter.FilterItemStack;
1112
import com.simibubi.create.content.schematics.requirement.ISpecialBlockItemRequirement;
1213
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
1314
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
@@ -132,9 +133,9 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla
132133
return InteractionResult.FAIL;
133134
if (pState.getValue(POWERED))
134135
return InteractionResult.FAIL;
135-
136-
boolean test = inBlock.getItem() instanceof FilterItem ? FilterItem.test(pLevel, inHand, inBlock)
137-
: ItemHandlerHelper.canItemStacksStack(inHand, inBlock);
136+
137+
boolean test = inBlock.getItem() instanceof FilterItem ? FilterItemStack.of(inBlock)
138+
.test(pLevel, inHand) : ItemHandlerHelper.canItemStacksStack(inHand, inBlock);
138139
if (!test) {
139140
AllSoundEvents.DENY.play(pLevel, null, pPos, 1, 1);
140141
return InteractionResult.SUCCESS;

src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintEntity.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.simibubi.create.AllItems;
1414
import com.simibubi.create.Create;
1515
import com.simibubi.create.content.logistics.filter.FilterItem;
16+
import com.simibubi.create.content.logistics.filter.FilterItemStack;
1617
import com.simibubi.create.content.schematics.requirement.ISpecialEntityItemRequirement;
1718
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
1819
import com.simibubi.create.content.schematics.requirement.ItemRequirement.ItemUseType;
@@ -365,14 +366,14 @@ public InteractionResult interactAt(Player player, Vec3 vec, InteractionHand han
365366
boolean success = true;
366367

367368
Search: for (int i = 0; i < 9; i++) {
368-
ItemStack requestedItem = items.getStackInSlot(i);
369+
FilterItemStack requestedItem = FilterItemStack.of(items.getStackInSlot(i));
369370
if (requestedItem.isEmpty()) {
370371
craftingGrid.put(i, ItemStack.EMPTY);
371372
continue;
372373
}
373374

374375
for (int slot = 0; slot < playerInv.getSlots(); slot++) {
375-
if (!FilterItem.test(level, playerInv.getStackInSlot(slot), requestedItem))
376+
if (!requestedItem.test(level, playerInv.getStackInSlot(slot)))
376377
continue;
377378
ItemStack currentItem = playerInv.extractItem(slot, 1, false);
378379
if (stacksTaken.containsKey(slot))

src/main/java/com/simibubi/create/content/equipment/blueprint/BlueprintOverlayRenderer.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.simibubi.create.content.equipment.blueprint.BlueprintEntity.BlueprintSection;
1515
import com.simibubi.create.content.logistics.filter.AttributeFilterMenu.WhitelistMode;
1616
import com.simibubi.create.content.logistics.filter.FilterItem;
17+
import com.simibubi.create.content.logistics.filter.FilterItemStack;
1718
import com.simibubi.create.content.logistics.filter.ItemAttribute;
1819
import com.simibubi.create.content.trains.track.TrackPlacement.PlacementInfo;
1920
import com.simibubi.create.foundation.gui.AllGuiTextures;
@@ -161,14 +162,14 @@ public static void rebuild(BlueprintSection sectionAt, boolean sneak) {
161162
newlyMissing.clear();
162163

163164
Search: for (int i = 0; i < 9; i++) {
164-
ItemStack requestedItem = items.getStackInSlot(i);
165+
FilterItemStack requestedItem = FilterItemStack.of(items.getStackInSlot(i));
165166
if (requestedItem.isEmpty()) {
166167
craftingGrid.put(i, ItemStack.EMPTY);
167168
continue;
168169
}
169170

170171
for (int slot = 0; slot < playerInv.getSlots(); slot++) {
171-
if (!FilterItem.test(mc.level, playerInv.getStackInSlot(slot), requestedItem))
172+
if (!requestedItem.test(mc.level, playerInv.getStackInSlot(slot)))
172173
continue;
173174
ItemStack currentItem = playerInv.extractItem(slot, 1, false);
174175
craftingGrid.put(i, currentItem);
@@ -177,7 +178,7 @@ public static void rebuild(BlueprintSection sectionAt, boolean sneak) {
177178
}
178179

179180
success = false;
180-
newlyMissing.add(requestedItem);
181+
newlyMissing.add(requestedItem.item());
181182
}
182183

183184
if (success) {

src/main/java/com/simibubi/create/content/kinetics/belt/BeltHelper.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package com.simibubi.create.content.kinetics.belt;
22

3+
import java.util.Map;
4+
35
import com.simibubi.create.AllTags.AllItemTags;
46
import com.simibubi.create.foundation.utility.VecHelper;
57

8+
import it.unimi.dsi.fastutil.objects.Object2BooleanOpenHashMap;
69
import net.minecraft.core.BlockPos;
710
import net.minecraft.core.Vec3i;
11+
import net.minecraft.server.packs.resources.ResourceManagerReloadListener;
812
import net.minecraft.util.Mth;
13+
import net.minecraft.world.item.Item;
914
import net.minecraft.world.item.ItemStack;
1015
import net.minecraft.world.level.Level;
1116
import net.minecraft.world.level.LevelAccessor;
@@ -16,9 +21,13 @@
1621

1722
public class BeltHelper {
1823

24+
public static Map<Item, Boolean> uprightCache = new Object2BooleanOpenHashMap<>();
25+
public static final ResourceManagerReloadListener LISTENER = resourceManager -> uprightCache.clear();
26+
1927
public static boolean isItemUpright(ItemStack stack) {
20-
return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY)
21-
.isPresent() || AllItemTags.UPRIGHT_ON_BELT.matches(stack);
28+
return uprightCache.computeIfAbsent(stack.getItem(),
29+
item -> stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY)
30+
.isPresent() || AllItemTags.UPRIGHT_ON_BELT.matches(stack));
2231
}
2332

2433
public static BeltBlockEntity getSegmentBE(LevelAccessor world, BlockPos pos) {

src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerMovementBehaviour.java

+9-13
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import com.simibubi.create.content.contraptions.render.ContraptionMatrices;
2222
import com.simibubi.create.content.contraptions.render.ContraptionRenderDispatcher;
2323
import com.simibubi.create.content.kinetics.deployer.DeployerBlockEntity.Mode;
24-
import com.simibubi.create.content.logistics.filter.FilterItem;
24+
import com.simibubi.create.content.logistics.filter.FilterItemStack;
2525
import com.simibubi.create.content.schematics.SchematicInstances;
2626
import com.simibubi.create.content.schematics.SchematicWorld;
2727
import com.simibubi.create.content.schematics.requirement.ItemRequirement;
@@ -80,9 +80,9 @@ public void visitNewPosition(MovementContext context, BlockPos pos) {
8080
public void activate(MovementContext context, BlockPos pos, DeployerFakePlayer player, Mode mode) {
8181
Level world = context.world;
8282

83-
ItemStack filter = getFilter(context);
84-
if (AllItems.SCHEMATIC.isIn(filter))
85-
activateAsSchematicPrinter(context, pos, player, world, filter);
83+
FilterItemStack filter = context.getFilterFromBE();
84+
if (AllItems.SCHEMATIC.isIn(filter.item()))
85+
activateAsSchematicPrinter(context, pos, player, world, filter.item());
8686

8787
Vec3 facingVec = Vec3.atLowerCornerOf(context.state.getValue(DeployerBlock.FACING)
8888
.getNormal());
@@ -222,11 +222,11 @@ private void tryGrabbingItem(MovementContext context) {
222222
return;
223223
if (player.getMainHandItem()
224224
.isEmpty()) {
225-
ItemStack filter = getFilter(context);
226-
if (AllItems.SCHEMATIC.isIn(filter))
225+
FilterItemStack filter = context.getFilterFromBE();
226+
if (AllItems.SCHEMATIC.isIn(filter.item()))
227227
return;
228228
ItemStack held = ItemHelper.extract(context.contraption.getSharedInventory(),
229-
stack -> FilterItem.test(context.world, stack, filter), 1, false);
229+
stack -> filter.test(context.world, stack), 1, false);
230230
player.setItemInHand(InteractionHand.MAIN_HAND, held);
231231
}
232232
}
@@ -236,15 +236,15 @@ private void tryDisposeOfExcess(MovementContext context) {
236236
if (player == null)
237237
return;
238238
Inventory inv = player.getInventory();
239-
ItemStack filter = getFilter(context);
239+
FilterItemStack filter = context.getFilterFromBE();
240240

241241
for (List<ItemStack> list : Arrays.asList(inv.armor, inv.offhand, inv.items)) {
242242
for (int i = 0; i < list.size(); ++i) {
243243
ItemStack itemstack = list.get(i);
244244
if (itemstack.isEmpty())
245245
continue;
246246

247-
if (list == inv.items && i == inv.selected && FilterItem.test(context.world, itemstack, filter))
247+
if (list == inv.items && i == inv.selected && filter.test(context.world, itemstack))
248248
continue;
249249

250250
dropItem(context, itemstack);
@@ -278,10 +278,6 @@ private DeployerFakePlayer getPlayer(MovementContext context) {
278278
return (DeployerFakePlayer) context.temporaryData;
279279
}
280280

281-
private ItemStack getFilter(MovementContext context) {
282-
return ItemStack.of(context.blockEntityData.getCompound("Filter"));
283-
}
284-
285281
private Mode getMode(MovementContext context) {
286282
return NBTHelper.readEnum(context.blockEntityData, "Mode", Mode.class);
287283
}

src/main/java/com/simibubi/create/content/kinetics/turntable/TurntableHandler.java

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ public static void gameRenderTick() {
1616
Minecraft mc = Minecraft.getInstance();
1717
BlockPos pos = mc.player.blockPosition();
1818

19+
if (mc.gameMode == null)
20+
return;
1921
if (!AllBlocks.TURNTABLE.has(mc.level.getBlockState(pos)))
2022
return;
2123
if (!mc.player.isOnGround())

0 commit comments

Comments
 (0)