Skip to content

Commit ee00287

Browse files
committed
Fix stickers incorrectly retaining their constraint data when saved to Create contraptions (sorry for all the buggy builds)
1 parent 4a26b4c commit ee00287

4 files changed

Lines changed: 44 additions & 1 deletion

File tree

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package dev.ryanhcode.sable.neoforge.mixin.compatibility.create.sticker;
2+
3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import com.simibubi.create.content.contraptions.Contraption;
6+
import dev.ryanhcode.sable.neoforge.mixinterface.compatibility.create.StickerBlockEntityExtension;
7+
import net.minecraft.core.HolderLookup;
8+
import net.minecraft.nbt.CompoundTag;
9+
import net.minecraft.world.level.block.entity.BlockEntity;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.injection.At;
12+
13+
@Mixin(Contraption.class)
14+
public class ContraptionMixin {
15+
16+
@WrapOperation(method = "getBlockEntityNBT", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/entity/BlockEntity;saveWithFullMetadata(Lnet/minecraft/core/HolderLookup$Provider;)Lnet/minecraft/nbt/CompoundTag;"))
17+
private CompoundTag sable$saveStickerNBT(final BlockEntity instance, final HolderLookup.Provider registries, final Operation<CompoundTag> original) {
18+
if (instance instanceof final StickerBlockEntityExtension extension) {
19+
extension.sable$saveToContraption(registries);
20+
}
21+
return original.call(instance, registries);
22+
}
23+
24+
25+
}

neoforge/src/main/java/dev/ryanhcode/sable/neoforge/mixin/compatibility/create/sticker/StickerBlockEntityMixin.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ public abstract class StickerBlockEntityMixin extends SmartBlockEntity implement
6464
@Unique
6565
private boolean sable$hasConstraint;
6666

67+
/**
68+
* kinda hacky but we ball
69+
*/
70+
@Unique
71+
private boolean sable$doNotSaveConstraint;
72+
6773
private StickerBlockEntityMixin(final BlockEntityType<?> type, final BlockPos pos, final BlockState state) {
6874
super(type, pos, state);
6975
}
@@ -250,11 +256,18 @@ public void tick(final CallbackInfo ci) {
250256
this.sable$tickConstraint();
251257
}
252258

259+
@Override
260+
public void sable$saveToContraption(final HolderLookup.Provider registries) {
261+
this.sable$doNotSaveConstraint = true;
262+
this.saveWithFullMetadata(registries);
263+
this.sable$doNotSaveConstraint = false;
264+
}
265+
253266
@Inject(method = "write", at = @At("TAIL"))
254267
public void write(final CompoundTag compound, final HolderLookup.Provider registries, final boolean clientPacket, final CallbackInfo ci) {
255268
if (clientPacket) {
256269
compound.putBoolean("SableHasConstraint", this.sable$handle != null);
257-
} else if (this.sable$handle != null) {
270+
} else if (this.sable$handle != null && !this.sable$doNotSaveConstraint) {
258271
final CompoundTag constraint = new CompoundTag();
259272
final BlockPos blockPos = this.getBlockPos();
260273
constraint.putInt("ThisX", blockPos.getX());
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package dev.ryanhcode.sable.neoforge.mixinterface.compatibility.create;
22

33

4+
import net.minecraft.core.HolderLookup;
5+
46
public interface StickerBlockEntityExtension {
57

68
void sable$removeConstraint();
79

810
void sable$tickConstraint();
11+
12+
void sable$saveToContraption(HolderLookup.Provider registries);
913
}

neoforge/src/main/resources/sable-neoforge.mixins.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@
146146
"compatibility.create.schematics.SchematicPrinterMixin",
147147
"compatibility.create.schematics.SchematicToolBaseMixin",
148148
"compatibility.create.schematics.StructureTemplateMixin",
149+
"compatibility.create.sticker.ContraptionMixin",
149150
"compatibility.create.sticker.StickerBlockEntityMixin",
150151
"compatibility.create.sticker.StickerBlockMixin",
151152
"compatibility.create.stock_ticker.StockTickerInteractionHandlerMixin",

0 commit comments

Comments
 (0)