Skip to content

Commit fe5f73f

Browse files
committed
fix: mixins issues with multiple mods to be able to run Stoneblock 4
1 parent d87d930 commit fe5f73f

11 files changed

Lines changed: 91 additions & 72 deletions

File tree

patches/net/minecraft/server/level/ChunkMap.java.patch

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
p_294215_.connection.chunkSender.dropChunk(p_294215_, p_294758_);
9292
}
9393

94-
@@ -907,19 +_,35 @@
94+
@@ -907,18 +_,35 @@
9595
}
9696

9797
private CompletableFuture<Optional<CompoundTag>> readChunk(ChunkPos p_214964_) {
@@ -125,32 +125,32 @@
125125
return false;
126126
} else {
127127
for (ServerPlayer serverplayer : this.playerMap.getAllPlayers()) {
128-
- if (this.playerIsCloseEnoughForSpawning(serverplayer, p_183880_)) {
129-
+ if (this.playerIsCloseEnoughForSpawning(serverplayer, p_183880_, blockRange)) {
128+
+ magma$range.set(blockRange);
129+
if (this.playerIsCloseEnoughForSpawning(serverplayer, p_183880_)) {
130130
return true;
131131
}
132-
}
133-
@@ -936,7 +_,7 @@
132+
@@ -936,6 +_,7 @@
134133
Builder<ServerPlayer> builder = ImmutableList.builder();
135134

136135
for (ServerPlayer serverplayer : this.playerMap.getAllPlayers()) {
137-
- if (this.playerIsCloseEnoughForSpawning(serverplayer, p_183889_)) {
138-
+ if (this.playerIsCloseEnoughForSpawning(serverplayer, p_183889_, 16384.0D)) { // Spigot
136+
+ magma$range.set(16384.0D);
137+
if (this.playerIsCloseEnoughForSpawning(serverplayer, p_183889_)) {
139138
builder.add(serverplayer);
140139
}
141-
}
142-
@@ -945,12 +_,12 @@
140+
@@ -945,12 +_,15 @@
143141
}
144142
}
145143

146-
- private boolean playerIsCloseEnoughForSpawning(ServerPlayer p_183752_, ChunkPos p_183753_) {
147-
+ private boolean playerIsCloseEnoughForSpawning(ServerPlayer p_183752_, ChunkPos p_183753_, double range) { // Spigot
144+
+ // Magma
145+
+ private final com.google.common.util.concurrent.AtomicDouble magma$range = new com.google.common.util.concurrent.AtomicDouble(0);
146+
+
147+
private boolean playerIsCloseEnoughForSpawning(ServerPlayer p_183752_, ChunkPos p_183753_) {
148148
if (p_183752_.isSpectator()) {
149149
return false;
150150
} else {
151151
double d0 = euclideanDistanceSquared(p_183753_, p_183752_);
152152
- return d0 < 16384.0;
153-
+ return d0 < range; // Spigot
153+
+ return d0 < magma$range.getAndSet(0); // Spigot
154154
}
155155
}
156156

patches/net/minecraft/server/level/ServerPlayerGameMode.java.patch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@
253253
+
254254
+ BlockState blockstate = block.playerWillDestroy(this.level, p_9281_, blockstate1, this.player);
255255
+
256-
+ boolean flag = this.level.removeBlock(p_9281_, false);
256+
+ boolean flag = removeBlock(p_9281_, blockstate, false);
257257
+
258258
+ if (this.isCreative()) {
259259
+ // return true; // CraftBukkit

patches/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,25 +75,20 @@
7575
}
7676

7777
private int getMaximumFlyingTicks(Entity p_326388_) {
78-
@@ -394,6 +_,13 @@
79-
Entity entity = this.player.getRootVehicle();
80-
if (entity != this.player && entity.getControllingPassenger() == this.player && entity == this.lastVehicle) {
81-
ServerLevel serverlevel = this.player.serverLevel();
78+
@@ -407,7 +_,40 @@
79+
double d8 = d5 - this.vehicleFirstGoodZ;
80+
double d9 = entity.getDeltaMovement().lengthSqr();
81+
double d10 = d6 * d6 + d7 * d7 + d8 * d8;
82+
- if (d10 - d9 > 100.0 && !this.isSingleplayerOwner()) {
83+
+
8284
+ // CraftBukkit - store current player position
8385
+ double prevX = player.getX();
8486
+ double prevY = player.getY();
8587
+ double prevZ = player.getZ();
8688
+ float prevYaw = player.getYRot();
8789
+ float prevPitch = player.getXRot();
8890
+ // CraftBukkit end
89-
double d0 = entity.getX();
90-
double d1 = entity.getY();
91-
double d2 = entity.getZ();
92-
@@ -407,7 +_,31 @@
93-
double d8 = d5 - this.vehicleFirstGoodZ;
94-
double d9 = entity.getDeltaMovement().lengthSqr();
95-
double d10 = d6 * d6 + d7 * d7 + d8 * d8;
96-
- if (d10 - d9 > 100.0 && !this.isSingleplayerOwner()) {
91+
+
9792
+
9893
+ // CraftBukkit start - handle custom speeds and skipped ticks
9994
+ this.allowedPlayerTicks += (System.currentTimeMillis() / 50) - this.lastTick;
@@ -729,7 +724,7 @@
729724
LOGGER.info("{} lost connection: {}", this.player.getName().getString(), p_350554_.reason().getString());
730725
this.removePlayerFromWorld();
731726
super.onDisconnect(p_350554_);
732-
@@ -1185,12 +_,19 @@
727+
@@ -1185,12 +_,21 @@
733728

734729
private void removePlayerFromWorld() {
735730
this.chatMessageChain.close();
@@ -741,8 +736,9 @@
741736
.broadcastSystemMessage(Component.translatable("multiplayer.player.left", this.player.getDisplayName()).withStyle(ChatFormatting.YELLOW), false);
742737
+ */
743738
this.player.disconnect();
744-
- this.server.getPlayerList().remove(this.player);
745-
+ String quitMessage = this.server.getPlayerList().remove(this.player);
739+
this.server.getPlayerList().remove(this.player);
740+
+ String quitMessage = this.server.getPlayerList().magma$removeString;
741+
+ this.server.getPlayerList().magma$removeString = null;
746742
+ if ((quitMessage != null) && (quitMessage.length() > 0)) {
747743
+ this.server.getPlayerList().broadcastMessage(org.bukkit.craftbukkit.util.CraftChatMessage.fromString(quitMessage));
748744
+ }

patches/net/minecraft/server/players/PlayerList.java.patch

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,14 @@
225225
this.playerIo.save(p_11277_);
226226
ServerStatsCounter serverstatscounter = this.stats.get(p_11277_.getUUID());
227227
if (serverstatscounter != null) {
228-
@@ -350,16 +_,29 @@
228+
@@ -350,16 +_,32 @@
229229
}
230230
}
231231

232-
- public void remove(ServerPlayer p_11287_) {
233-
+ public String remove(ServerPlayer p_11287_) { // CraftBukkit - return string
232+
+ // Magma
233+
+ public String magma$removeString = null;
234+
+
235+
public void remove(ServerPlayer p_11287_) {
234236
+ net.neoforged.neoforge.event.EventHooks.firePlayerLoggedOut(p_11287_);
235237
ServerLevel serverlevel = p_11287_.serverLevel();
236238
p_11287_.awardStat(Stats.LEAVE_GAME);
@@ -285,7 +287,7 @@
285287
+ cserver.getScoreboardManager().removePlayer(p_11287_.getBukkitEntity());
286288
+ // CraftBukkit end
287289
+
288-
+ return playerQuitEvent.getQuitMessage(); // CraftBukkit
290+
+ magma$removeString = playerQuitEvent.getQuitMessage(); // CraftBukkit
289291
}
290292

291293
- @Nullable

patches/net/minecraft/world/entity/EntityType.java.patch

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -79,51 +79,37 @@
7979
Consumer<T> consumer;
8080
if (p_20594_ != null) {
8181
consumer = createDefaultStackConfig(p_20593_, p_20594_, p_20595_);
82-
@@ -892,7 +_,7 @@
82+
@@ -892,6 +_,7 @@
8383
};
8484
}
8585

86-
- return this.spawn(p_20593_, consumer, p_20596_, p_20597_, p_20598_, p_20599_);
87-
+ return this.spawn(p_20593_, consumer, p_20596_, p_20597_, p_20598_, p_20599_, spawnReason); // CraftBukkit
86+
+ magma$setSpawnReason(spawnReason);
87+
return this.spawn(p_20593_, consumer, p_20596_, p_20597_, p_20598_, p_20599_);
8888
}
8989

90-
public static <T extends Entity> Consumer<T> createDefaultStackConfig(ServerLevel p_263583_, ItemStack p_263568_, @Nullable Player p_263575_) {
91-
@@ -915,19 +_,37 @@
90+
@@ -915,7 +_,15 @@
9291
Consumer<T> p_263579_, ServerLevel p_263571_, ItemStack p_263582_, @Nullable Player p_263574_
9392
) {
9493
CustomData customdata = p_263582_.getOrDefault(DataComponents.ENTITY_DATA, CustomData.EMPTY);
9594
- return !customdata.isEmpty() ? p_263579_.andThen(p_329995_ -> updateCustomEntityTag(p_263571_, p_263574_, p_329995_, customdata)) : p_263579_;
9695
+ return !customdata.isEmpty() ? p_263579_.andThen(p_329995_ -> {
9796
+ try { updateCustomEntityTag(p_263571_, p_263574_, p_329995_, customdata); } catch (Throwable t) { LOGGER.warn("Error loading spawn egg NBT", t); } // CraftBukkit - SPIGOT-5665
9897
+ }) : p_263579_;
99-
}
100-
101-
@Nullable
102-
public T spawn(ServerLevel p_262634_, BlockPos p_262707_, MobSpawnType p_262597_) {
103-
- return this.spawn(p_262634_, null, p_262707_, p_262597_, false, false);
104-
+ // CraftBukkit start
105-
+ return this.spawn(p_262634_, p_262707_, p_262597_, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT);
10698
+ }
10799
+
108-
+ @Nullable
109-
+ public T spawn(ServerLevel worldserver, BlockPos blockposition, MobSpawnType enummobspawn, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {
110-
+ return this.spawn(worldserver, (Consumer<T>) null, blockposition, enummobspawn, false, false, spawnReason); // CraftBukkit - decompile error
111-
+ // CraftBukkit end
100+
+ // Magma
101+
+ private org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason magma$spawnReason = org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT;
102+
+ public void magma$setSpawnReason(org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason reason) {
103+
+ this.magma$spawnReason = reason;
112104
}
113105

114106
@Nullable
107+
@@ -927,7 +_,9 @@
115108
public T spawn(ServerLevel p_262704_, @Nullable Consumer<T> p_262621_, BlockPos p_262672_, MobSpawnType p_262644_, boolean p_262690_, boolean p_262590_) {
116-
+ // CraftBukkit start
117-
+ return this.spawn(p_262704_, p_262621_, p_262672_, p_262644_, p_262690_, p_262590_, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT);
118-
+ }
119-
+
120-
+ @Nullable
121-
+ public T spawn(ServerLevel p_262704_, @Nullable Consumer<T> p_262621_, BlockPos p_262672_, MobSpawnType p_262644_, boolean p_262690_, boolean p_262590_, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {
122-
+ // CraftBukkit end
123109
T t = this.create(p_262704_, p_262621_, p_262672_, p_262644_, p_262690_, p_262590_);
124110
if (t != null) {
125111
- p_262704_.addFreshEntityWithPassengers(t);
126-
+ p_262704_.addFreshEntityWithPassengers(t, spawnReason);
112+
+ p_262704_.addFreshEntityWithPassengers(t, magma$spawnReason);
127113
+ return !t.isRemoved() ? t : null; // Don't return an entity when CreatureSpawnEvent is canceled
128114
+ // CraftBukkit end
129115
}
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
--- a/net/minecraft/world/entity/npc/WanderingTraderSpawner.java
22
+++ b/net/minecraft/world/entity/npc/WanderingTraderSpawner.java
3-
@@ -103,14 +_,14 @@
3+
@@ -103,6 +_,7 @@
44
return false;
55
}
66

7-
- WanderingTrader wanderingtrader = EntityType.WANDERING_TRADER.spawn(p_35916_, blockpos2, MobSpawnType.EVENT);
8-
+ WanderingTrader wanderingtrader = EntityType.WANDERING_TRADER.spawn(p_35916_, blockpos2, MobSpawnType.EVENT, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL); // CraftBukkit
7+
+ net.minecraft.world.entity.EntityType.WANDERING_TRADER.magma$setSpawnReason(org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL);
8+
WanderingTrader wanderingtrader = EntityType.WANDERING_TRADER.spawn(p_35916_, blockpos2, MobSpawnType.EVENT);
99
if (wanderingtrader != null) {
1010
for (int j = 0; j < 2; j++) {
11-
this.tryToSpawnLlamaFor(p_35916_, wanderingtrader, 4);
11+
@@ -110,7 +_,7 @@
1212
}
1313

1414
this.serverLevelData.setWanderingTraderId(wanderingtrader.getUUID());
@@ -17,12 +17,11 @@
1717
wanderingtrader.setWanderTarget(blockpos1);
1818
wanderingtrader.restrictTo(blockpos1, 16);
1919
return true;
20-
@@ -124,7 +_,7 @@
20+
@@ -124,6 +_,7 @@
2121
private void tryToSpawnLlamaFor(ServerLevel p_35918_, WanderingTrader p_35919_, int p_35920_) {
2222
BlockPos blockpos = this.findSpawnPositionNear(p_35918_, p_35919_.blockPosition(), p_35920_);
2323
if (blockpos != null) {
24-
- TraderLlama traderllama = EntityType.TRADER_LLAMA.spawn(p_35918_, blockpos, MobSpawnType.EVENT);
25-
+ TraderLlama traderllama = EntityType.TRADER_LLAMA.spawn(p_35918_, blockpos, MobSpawnType.EVENT, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL); // CraftBukkit
24+
+ net.minecraft.world.entity.EntityType.TRADER_LLAMA.magma$setSpawnReason(org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL);
25+
TraderLlama traderllama = EntityType.TRADER_LLAMA.spawn(p_35918_, blockpos, MobSpawnType.EVENT);
2626
if (traderllama != null) {
2727
traderllama.setLeashedTo(p_35919_, true);
28-
}

patches/net/minecraft/world/level/NaturalSpawner.java.patch

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,16 @@
5353
p_47030_.getProfiler().pop();
5454
}
5555

56-
@@ -197,9 +_,14 @@
56+
@@ -197,9 +_,15 @@
5757
);
5858
j++;
5959
l1++;
60-
- p_47040_.addFreshEntityWithPassengers(mob);
61-
- p_47044_.run(mob, p_47041_);
62-
- if (j >= mob.getMaxSpawnClusterSize()) {
6360
+ // CraftBukkit start
6461
+ // SPIGOT-7045: Give ocelot babies back their special spawn reason. Note: This is the only modification required as ocelots count as monsters which means they only spawn during normal chunk ticking and do not spawn during chunk generation as starter mobs.
65-
+ p_47040_.addFreshEntityWithPassengers(mob, (mob instanceof net.minecraft.world.entity.animal.Ocelot && !((org.bukkit.entity.Ageable) mob.getBukkitEntity()).isAdult()) ? org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.OCELOT_BABY : org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL);
62+
+ p_47040_.setSpawnReason((mob instanceof net.minecraft.world.entity.animal.Ocelot && !((org.bukkit.entity.Ageable) mob.getBukkitEntity()).isAdult()) ? org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.OCELOT_BABY : org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL);
63+
p_47040_.addFreshEntityWithPassengers(mob);
64+
- p_47044_.run(mob, p_47041_);
65+
- if (j >= mob.getMaxSpawnClusterSize()) {
6666
+ if (!mob.isRemoved()) {
6767
+ p_47044_.run(mob, p_47041_);
6868
+ }

src/main/java/org/bukkit/craftbukkit/potion/CraftPotionType.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@ public static PotionType minecraftToBukkit(Potion minecraft) {
2727
Preconditions.checkArgument(minecraft != null);
2828

2929
net.minecraft.core.Registry<Potion> registry = CraftRegistry.getMinecraftRegistry(Registries.POTION);
30-
PotionType bukkit = Registry.POTION.get(CraftNamespacedKey.fromMinecraft(registry.getResourceKey(minecraft).orElseThrow().location()));
31-
30+
var key = registry.getResourceKey(minecraft).orElseThrow().location();
31+
PotionType bukkit = Registry.POTION.get(CraftNamespacedKey.fromMinecraft(key));
32+
if (bukkit == null) {
33+
bukkit = CraftPotionUtil.modded.get(key);
34+
}
3235
Preconditions.checkArgument(bukkit != null);
3336

3437
return bukkit;

src/main/java/org/bukkit/craftbukkit/potion/CraftPotionUtil.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import com.google.common.base.Preconditions;
44
import com.google.common.collect.BiMap;
55
import com.google.common.collect.ImmutableBiMap;
6+
import java.util.HashMap;
7+
import java.util.Map;
68
import net.minecraft.core.Holder;
9+
import net.minecraft.resources.ResourceLocation;
710
import net.minecraft.world.effect.MobEffect;
811
import net.minecraft.world.effect.MobEffectInstance;
912
import org.bukkit.potion.PotionData;
@@ -39,6 +42,8 @@ public class CraftPotionUtil {
3942
.put(PotionType.SLOW_FALLING, PotionType.LONG_SLOW_FALLING)
4043
.build();
4144

45+
public static Map<ResourceLocation, PotionType> modded = new HashMap<>();
46+
4247
public static PotionType fromBukkit(PotionData data) {
4348
if (data == null) {
4449
return null;

src/main/java/org/bukkit/potion/PotionType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public enum PotionType implements Keyed {
6767
private final Supplier<InternalPotionData> internalPotionDataSupplier;
6868

6969
PotionType(String key) {
70-
this.key = NamespacedKey.minecraft(key);
70+
this.key = NamespacedKey.fromString(key);
7171
this.internalPotionDataSupplier = Suppliers.memoize(() -> Bukkit.getUnsafe().getInternalPotionData(this.key));
7272
}
7373

0 commit comments

Comments
 (0)