Skip to content

Commit 1eb565b

Browse files
committed
feat: port [CEu#2823](GregTechCEu/GregTech#2823) & [CEu#2839](GregTechCEu/GregTech#2839)
1 parent 967358b commit 1eb565b

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package supersymmetry.mixins.gregtech;
2+
3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import gregtech.api.block.BlockStateTileEntity;
6+
import gregtech.api.metatileentity.SyncedTileEntityBase;
7+
import gregtech.api.network.PacketDataList;
8+
import net.minecraft.world.WorldServer;
9+
import org.jetbrains.annotations.ApiStatus.ScheduledForRemoval;
10+
import org.spongepowered.asm.mixin.Final;
11+
import org.spongepowered.asm.mixin.Mixin;
12+
import org.spongepowered.asm.mixin.Shadow;
13+
import org.spongepowered.asm.mixin.Unique;
14+
import org.spongepowered.asm.mixin.injection.At;
15+
import org.spongepowered.asm.mixin.injection.Inject;
16+
17+
/// Ported from [CEu#2823](https://github.com/GregTechCEu/GregTech/pull/2823)
18+
/// and [CEu#2839](https://github.com/GregTechCEu/GregTech/pull/2839)
19+
@Deprecated
20+
@ScheduledForRemoval(inVersion = "Next CEu update")
21+
@Mixin(value = SyncedTileEntityBase.class, remap = false)
22+
public abstract class SyncedTileEntityBaseMixin extends BlockStateTileEntity {
23+
24+
@Unique
25+
private static final int SIZE_THRESHOLD = 10;
26+
@Shadow
27+
@Final
28+
private PacketDataList updates;
29+
30+
@WrapOperation(method = "writeCustomData",
31+
at = @At(value = "INVOKE",
32+
target = "Lgregtech/api/metatileentity/SyncedTileEntityBase;notifyWorld()V"))
33+
private void checkCanNotifyWorld(SyncedTileEntityBase self, Operation<Void> method) {
34+
// Short circuit with packet size to avoid too many hash lookups and instanceof casts
35+
if (updates.size() > SIZE_THRESHOLD && getWorld() instanceof WorldServer server) {
36+
int x = getPos().getX() >> 4;
37+
int z = getPos().getZ() >> 4;
38+
if (server.getPlayerChunkMap().contains(x, z)) {
39+
method.call(self);
40+
} else {
41+
// Cannot send it, so clear
42+
updates.clear();
43+
}
44+
return;
45+
}
46+
// Assume we can send data regardless
47+
method.call(self);
48+
}
49+
}

src/main/resources/mixins.susy.gregtech.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"RecipeBuilderAccessor",
2323
"RecipeMapsMixin",
2424
"RecyclingRecipesMixin",
25+
"SyncedTileEntityBaseMixin",
2526
"TileEntityPipeBaseMixin",
2627
"ToolBuilderAccessor",
2728
"ToolItemsMixin"

0 commit comments

Comments
 (0)