Skip to content

Commit ed60022

Browse files
committed
Merge branch '1.17.x/stable' into '1.18.x/dev'
2 parents 3580bfd + bc83787 commit ed60022

8 files changed

+171
-10
lines changed

build.gradle

+22-1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,25 @@ repositories {
6565
name = "CrowdinTranslate"
6666
url = "https://minecraft.guntram.de/maven/"
6767
}
68+
maven {
69+
name = "JitPack"
70+
url = "https://jitpack.io"
71+
content {
72+
includeGroupByRegex "(io|com)\\.github\\..*"
73+
}
74+
}
75+
maven {
76+
url = "https://maven.jamieswhiteshirt.com/libs-release/"
77+
content {
78+
includeGroup "com.jamieswhiteshirt"
79+
}
80+
}
81+
maven {
82+
url = "https://maven.cafeteria.dev"
83+
content {
84+
includeGroup "net.adriantodt.fabricmc"
85+
}
86+
}
6887
}
6988

7089
// To change the versions see the gradle.properties file
@@ -85,6 +104,7 @@ dependencies {
85104
modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}"
86105
modImplementation "dev.emi:trinkets:${project.trinkets_version}"
87106
modImplementation "io.github.ladysnake:requiem-api:${project.requiem_version}"
107+
modImplementation "com.github.apace100:origins-fabric:${project.origins_version}"
88108
}
89109

90110
processResources {
@@ -98,7 +118,8 @@ processResources {
98118
"team_reborn_energy": project.tr_energy_version,
99119
"modmenu": ">=${project.modmenu_version}",
100120
"trinkets": ">=${project.trinkets_version}",
101-
"requiem": ">=${project.requiem_version}"
121+
"requiem": ">=${project.requiem_version}",
122+
"origins": ">=${project.origins_version}",
102123
]
103124

104125
filesMatching("fabric.mod.json") {

gradle.properties

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ yarn_mappings=1.18+build.1
88
loader_version=0.12.0
99

1010
# Mod Properties
11-
mod_version=3.0
11+
mod_version=3.1
1212
maven_group=dev.kir
1313
archives_base_name=sync
1414

@@ -19,5 +19,6 @@ cloth_version=6.1.48
1919
modmenu_version=3.0.1
2020
trinkets_version=3.1.0
2121
requiem_version=2.0.0-beta.3
22+
origins_version=1.1.4
2223
smartrecipes_version=0.2.0+1.18
2324
crowdin_translate_version=1.4+1.18

src/main/java/dev/kir/sync/block/AbstractShellContainerBlock.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,6 @@ public void onEntityCollision(BlockState state, World world, BlockPos pos, Entit
130130
public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) {
131131
boolean bottom = isBottom(state);
132132
BlockPos bottomPos = bottom ? pos : pos.down();
133-
if (world.getBlockEntity(bottomPos) instanceof AbstractShellContainerBlockEntity shellContainer) {
134-
shellContainer.onBreak(world, bottomPos);
135-
}
136133
if (!world.isClient && player.isCreative()) {
137134
if (!bottom) {
138135
BlockState blockState = world.getBlockState(bottomPos);
@@ -145,6 +142,16 @@ public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity pl
145142
super.onBreak(world, pos, state, player);
146143
}
147144

145+
@Override
146+
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) {
147+
if (!state.isOf(newState.getBlock())) {
148+
if (isBottom(state) && world.getBlockEntity(pos) instanceof AbstractShellContainerBlockEntity shellContainer) {
149+
shellContainer.onBreak(world, pos);
150+
}
151+
world.removeBlockEntity(pos);
152+
}
153+
}
154+
148155
@Override
149156
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
150157
if (ItemUtil.isWrench(player.getStackInHand(hand))) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.kir.sync.compat.origins;
2+
3+
import dev.kir.sync.api.shell.ShellStateComponentFactoryRegistry;
4+
import dev.onyxstudios.cca.api.v3.entity.EntityComponentFactoryRegistry;
5+
import dev.onyxstudios.cca.api.v3.entity.EntityComponentInitializer;
6+
import net.fabricmc.loader.api.FabricLoader;
7+
8+
public class OriginsCompat implements EntityComponentInitializer {
9+
@Override
10+
public void registerEntityComponentFactories(EntityComponentFactoryRegistry registry) {
11+
if (FabricLoader.getInstance().isModLoaded("origins")) {
12+
ShellStateComponentFactoryRegistry.getInstance().register(OriginsShellStateComponent::new, OriginsShellStateComponent::new);
13+
}
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package dev.kir.sync.compat.origins;
2+
3+
import dev.kir.sync.api.shell.ShellStateComponent;
4+
import io.github.apace100.apoli.component.PowerHolderComponent;
5+
import io.github.apace100.origins.component.OriginComponent;
6+
import io.github.apace100.origins.networking.ModPackets;
7+
import io.github.apace100.origins.origin.Origin;
8+
import io.github.apace100.origins.origin.OriginLayer;
9+
import io.github.apace100.origins.origin.OriginLayers;
10+
import io.github.apace100.origins.registry.ModComponents;
11+
import io.netty.buffer.Unpooled;
12+
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
13+
import net.minecraft.nbt.NbtCompound;
14+
import net.minecraft.nbt.NbtElement;
15+
import net.minecraft.network.PacketByteBuf;
16+
import net.minecraft.server.network.ServerPlayerEntity;
17+
18+
class OriginsShellStateComponent extends ShellStateComponent {
19+
private final ServerPlayerEntity player;
20+
private boolean activated;
21+
private NbtCompound originComponentNbt;
22+
private NbtCompound powerHolderComponentNbt;
23+
24+
public OriginsShellStateComponent() {
25+
this(null, false);
26+
}
27+
28+
public OriginsShellStateComponent(ServerPlayerEntity player) {
29+
this(player, true);
30+
}
31+
32+
private OriginsShellStateComponent(ServerPlayerEntity player, boolean activated) {
33+
this.player = player;
34+
this.activated = activated;
35+
}
36+
37+
@Override
38+
public String getId() {
39+
return "origins";
40+
}
41+
42+
public boolean isActivated() {
43+
return this.activated;
44+
}
45+
46+
public NbtCompound getOriginComponentNbt() {
47+
NbtCompound nbt = this.originComponentNbt;
48+
if (this.player != null) {
49+
nbt = new NbtCompound();
50+
ModComponents.ORIGIN.get(this.player).writeToNbt(nbt);
51+
}
52+
return nbt == null ? new NbtCompound() : nbt;
53+
}
54+
55+
public NbtCompound getPowerHolderComponentNbt() {
56+
NbtCompound nbt = this.powerHolderComponentNbt;
57+
if (this.player != null) {
58+
nbt = new NbtCompound();
59+
PowerHolderComponent.KEY.get(this.player).writeToNbt(nbt);
60+
}
61+
return nbt == null ? new NbtCompound() : nbt;
62+
}
63+
64+
@Override
65+
public void clone(ShellStateComponent component) {
66+
OriginsShellStateComponent other = component.as(OriginsShellStateComponent.class);
67+
if (other == null) {
68+
return;
69+
}
70+
71+
this.originComponentNbt = other.getOriginComponentNbt();
72+
this.powerHolderComponentNbt = other.getPowerHolderComponentNbt();
73+
this.activated = other.isActivated();
74+
if (this.player == null) {
75+
return;
76+
}
77+
78+
OriginComponent originComponent = ModComponents.ORIGIN.get(this.player);
79+
if (this.activated) {
80+
originComponent.readFromNbt(this.originComponentNbt);
81+
PowerHolderComponent powerHolderComponent = PowerHolderComponent.KEY.get(this.player);
82+
powerHolderComponent.readFromNbt(this.powerHolderComponentNbt);
83+
originComponent.sync();
84+
} else {
85+
for (OriginLayer layer : OriginLayers.getLayers()) {
86+
if(layer.isEnabled()) {
87+
originComponent.setOrigin(layer, Origin.EMPTY);
88+
}
89+
}
90+
originComponent.checkAutoChoosingLayers(this.player, false);
91+
originComponent.sync();
92+
PacketByteBuf data = new PacketByteBuf(Unpooled.buffer());
93+
data.writeBoolean(false);
94+
ServerPlayNetworking.send(this.player, ModPackets.OPEN_ORIGIN_SCREEN, data);
95+
this.activated = true;
96+
}
97+
}
98+
99+
@Override
100+
protected void readComponentNbt(NbtCompound nbt) {
101+
this.originComponentNbt = nbt.contains("origins", NbtElement.COMPOUND_TYPE) ? nbt.getCompound("origins") : new NbtCompound();
102+
this.powerHolderComponentNbt = nbt.contains("powers", NbtElement.COMPOUND_TYPE) ? nbt.getCompound("powers") : new NbtCompound();
103+
this.activated = nbt.getBoolean("activated");
104+
}
105+
106+
@Override
107+
protected NbtCompound writeComponentNbt(NbtCompound nbt) {
108+
nbt.put("origins", this.getOriginComponentNbt());
109+
nbt.put("powers", this.getPowerHolderComponentNbt());
110+
nbt.putBoolean("activated", this.isActivated());
111+
return nbt;
112+
}
113+
}

src/main/java/dev/kir/sync/mixin/ClientPlayerEntityMixin.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,14 @@ private ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) {
9797
@Override
9898
public void endSync(Identifier startWorld, BlockPos startPos, Direction startFacing, Identifier targetWorld, BlockPos targetPos, Direction targetFacing, @Nullable ShellState storedState) {
9999
ClientPlayerEntity player = (ClientPlayerEntity)(Object)this;
100+
boolean syncFailed = Objects.equals(startPos, targetPos);
100101

101-
if (this.getHealth() <= 0) {
102-
this.setHealth(0.01F);
102+
if (!syncFailed) {
103+
if (this.getHealth() <= 0) {
104+
this.setHealth(0.01F);
105+
}
106+
this.deathTime = 0;
103107
}
104-
this.deathTime = 0;
105108

106109
float yaw = targetFacing.getOpposite().asRotation();
107110
this.setYaw(yaw);
@@ -118,8 +121,6 @@ public void endSync(Identifier startWorld, BlockPos startPos, Direction startFac
118121
PersistentCameraEntity.unset(this.client);
119122
HudController.restore();
120123
DeathScreenController.restore();
121-
122-
boolean syncFailed = Objects.equals(startPos, targetPos);
123124
if (!syncFailed) {
124125
PlayerSyncEvents.STOP_SYNCING.invoker().onStopSyncing(this, startPos, storedState);
125126
}

src/main/java/dev/kir/sync/mixin/ServerPlayerEntityMixin.java

+1
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ public void apply(ShellState state) {
183183
return;
184184
}
185185

186+
this.stopRiding();
186187
this.dropShoulderEntities();
187188
this.extinguish();
188189
this.setFrozenTicks(0);

src/main/resources/fabric.mod.json

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"dev.kir.sync.compat.modmenu.ModMenuCompat"
2828
],
2929
"cardinal-components-entity": [
30+
"dev.kir.sync.compat.origins.OriginsCompat",
3031
"dev.kir.sync.compat.trinkets.TrinketsCompat"
3132
]
3233
},
@@ -55,6 +56,7 @@
5556
"suggests": {
5657
"modmenu": "${modmenu}",
5758
"trinkets": "${trinkets}",
59+
"origins": "${origins}",
5860
"requiem": "${requiem}"
5961
}
6062
}

0 commit comments

Comments
 (0)