Skip to content

Commit 1897790

Browse files
authored
Update to 1.21.6/1.21.7 (#315)
1 parent cad76c6 commit 1897790

38 files changed

Lines changed: 956 additions & 258 deletions

File tree

common/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ plugins {
44

55
dependencies {
66
implementation(project(":openinvapi"))
7+
compileOnly(libs.slf4j.api)
78
}
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
package com.lishid.openinv.util;
2+
3+
import org.slf4j.Marker;
4+
import org.slf4j.helpers.LegacyAbstractLogger;
5+
import org.slf4j.helpers.MessageFormatter;
6+
import org.slf4j.helpers.NormalizedParameters;
7+
import org.slf4j.spi.LocationAwareLogger;
8+
9+
import java.util.logging.Level;
10+
import java.util.logging.LogRecord;
11+
import java.util.logging.Logger;
12+
13+
/**
14+
* An adapter for wrapping a {@link java.util.logging.Logger} as a {@link org.slf4j.Logger}.
15+
* <br>Largely based on {@code JDK14LoggerAdapter}, which is not present at runtime.
16+
*/
17+
public class JulLoggerAdapter extends LegacyAbstractLogger implements LocationAwareLogger {
18+
19+
private final Logger wrapped;
20+
21+
public JulLoggerAdapter(Logger wrapped) {
22+
this.wrapped = wrapped;
23+
this.name = wrapped.getName();
24+
}
25+
26+
@Override
27+
protected String getFullyQualifiedCallerName() {
28+
return JulLoggerAdapter.class.getName();
29+
}
30+
31+
@Override
32+
protected void handleNormalizedLoggingCall(
33+
org.slf4j.event.Level slf4jLevel,
34+
Marker marker,
35+
String msg,
36+
Object[] args,
37+
Throwable thrown
38+
) {
39+
Level level = fromSlf4jLevel(slf4jLevel);
40+
41+
if (wrapped.isLoggable(level)) {
42+
normalizedLog(getFullyQualifiedCallerName(), level, msg, args, thrown);
43+
}
44+
}
45+
46+
private void normalizedLog(String fqcn, Level level, String msg, Object[] args, Throwable thrown) {
47+
String formatted = MessageFormatter.basicArrayFormat(msg, args);
48+
LogRecord logRecord = new LogRecord(level, formatted);
49+
logRecord.setLoggerName(getName());
50+
logRecord.setThrown(thrown);
51+
52+
addSource(fqcn, logRecord);
53+
54+
wrapped.log(logRecord);
55+
}
56+
57+
private void addSource(String fqcn, LogRecord logRecord) {
58+
// TODO stackwalker?
59+
StackTraceElement[] trace = new Throwable().getStackTrace();
60+
int maxElements = 12;
61+
int lastIgnored = maxElements;
62+
// Start from 2; 0 is above and 1 is caller of internal method.
63+
for (int i = 2; i < maxElements; ++i) {
64+
if (isIgnored(trace[i].getClassName(), fqcn)) {
65+
lastIgnored = i;
66+
}
67+
}
68+
69+
if (lastIgnored < maxElements - 1) {
70+
StackTraceElement caller = trace[lastIgnored + 1];
71+
logRecord.setSourceClassName(caller.getClassName());
72+
logRecord.setSourceMethodName(caller.getMethodName());
73+
}
74+
}
75+
76+
private boolean isIgnored(String className, String fqcn) {
77+
if (className.equals(fqcn)) {
78+
return true;
79+
}
80+
// Ignore slf4j classes - they shouldn't be the source.
81+
if (className.startsWith("org.slf4j.")) {
82+
return true;
83+
}
84+
return className.equals(getFullyQualifiedCallerName());
85+
}
86+
87+
@Override
88+
public void log(Marker marker, String callerFqn, int levelInt, String msg, Object[] args, Throwable thrown) {
89+
Level level = fromSlf4jLevel(org.slf4j.event.Level.intToLevel(levelInt));
90+
91+
if (!wrapped.isLoggable(level)) {
92+
return;
93+
}
94+
95+
NormalizedParameters params = NormalizedParameters.normalize(msg, args, thrown);
96+
normalizedLog(callerFqn, level, params.getMessage(), params.getArguments(), params.getThrowable());
97+
}
98+
99+
private Level fromSlf4jLevel(org.slf4j.event.Level level) {
100+
return switch (level) {
101+
case TRACE -> Level.FINEST;
102+
case DEBUG -> Level.FINE;
103+
case INFO -> Level.INFO;
104+
case WARN -> Level.WARNING;
105+
case ERROR -> Level.SEVERE;
106+
};
107+
}
108+
109+
@Override
110+
public boolean isTraceEnabled() {
111+
return wrapped.isLoggable(Level.FINEST);
112+
}
113+
114+
@Override
115+
public boolean isDebugEnabled() {
116+
return wrapped.isLoggable(Level.FINE);
117+
}
118+
119+
@Override
120+
public boolean isInfoEnabled() {
121+
return wrapped.isLoggable(Level.INFO);
122+
}
123+
124+
@Override
125+
public boolean isWarnEnabled() {
126+
return wrapped.isLoggable(Level.WARNING);
127+
}
128+
129+
@Override
130+
public boolean isErrorEnabled() {
131+
return wrapped.isLoggable(Level.SEVERE);
132+
}
133+
134+
}

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ shadow = "8.3.8"
88
folia-scheduler-wrapper = "v0.0.3"
99
errorprone-core = "2.39.0"
1010
errorprone-gradle = "4.2.0"
11+
slf4j = "2.0.17"
1112

1213
[libraries]
1314
spigotapi = { module = "org.spigotmc:spigot-api", version.ref = "spigotapi" }
@@ -17,6 +18,7 @@ annotations = { module = "org.jetbrains:annotations", version.ref = "annotations
1718
folia-scheduler-wrapper = { module = "com.github.NahuLD.folia-scheduler-wrapper:folia-scheduler-wrapper", version.ref = "folia-scheduler-wrapper" }
1819
errorprone-core = { module = "com.google.errorprone:error_prone_core", version.ref = "errorprone-core" }
1920
errorprone-gradle = { module = "net.ltgt.gradle:gradle-errorprone-plugin", version.ref = "errorprone-gradle" }
21+
slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
2022

2123
[plugins]
2224
paperweight = { id = "io.papermc.paperweight.userdev", version.ref = "paperweight" }

internal/common/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ dependencies {
3333
implementation(project(":openinvapi"))
3434
implementation(project(":openinvcommon"))
3535

36-
paperweight.paperDevBundle("1.21.5-R0.1-SNAPSHOT")
36+
paperweight.paperDevBundle("1.21.7-R0.1-SNAPSHOT")
3737
}
3838

3939
val spigot = tasks.register<ShadowJar>("spigotRelocations") {

internal/common/src/main/java/com/lishid/openinv/internal/common/container/AnySilentContainer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import net.minecraft.server.level.ServerPlayerGameMode;
2828
import net.minecraft.world.MenuProvider;
2929
import net.minecraft.world.SimpleMenuProvider;
30+
import net.minecraft.world.entity.Entity;
3031
import net.minecraft.world.inventory.ChestMenu;
3132
import net.minecraft.world.inventory.MenuType;
3233
import net.minecraft.world.inventory.PlayerEnderChestContainer;
@@ -92,7 +93,7 @@ public boolean activateContainer(
9293

9394
ServerPlayer player = PlayerManager.getHandle(bukkitPlayer);
9495

95-
final net.minecraft.world.level.Level level = player.level();
96+
final net.minecraft.world.level.Level level = ((Entity) player).level();
9697
final BlockPos blockPos = new BlockPos(bukkitBlock.getX(), bukkitBlock.getY(), bukkitBlock.getZ());
9798
final BlockEntity blockEntity = level.getBlockEntity(blockPos);
9899

internal/common/src/main/java/com/lishid/openinv/internal/common/container/OpenInventory.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ protected void setupSlots() {
7070
// If inventory is expected size, we can arrange slots to be pretty.
7171
Inventory ownerInv = owner.getInventory();
7272
if (ownerInv.getNonEquipmentItems().size() == 36
73-
&& Inventory.EQUIPMENT_SLOT_MAPPING.size() == 5
74-
&& owner.inventoryMenu.getCraftSlots().getContainerSize() == 4) {
73+
&& owner.inventoryMenu.getCraftSlots().getContainerSize() == 4
74+
&& (Inventory.EQUIPMENT_SLOT_MAPPING.size() == 5 || Inventory.EQUIPMENT_SLOT_MAPPING.size() == 7)) {
7575
// Armor slots: Bottom left.
7676
addArmor(36);
7777
// Off-hand: Below chestplate.
@@ -136,8 +136,8 @@ private int addArmor(int startIndex) {
136136
.toArray(EquipmentSlot[]::new);
137137
int localIndex = 0;
138138
for (int i = sorted.length - 1; i >= 0; --i) {
139-
// Skip off-hand, handled separately.
140-
if (sorted[i] == EquipmentSlot.OFFHAND) {
139+
// Skip off-hand, handled separately. Also skip non-player slots.
140+
if (sorted[i].getType() != EquipmentSlot.Type.HUMANOID_ARMOR) {
141141
continue;
142142
}
143143

internal/common/src/main/java/com/lishid/openinv/internal/common/container/slot/ContentCrafting.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.lishid.openinv.internal.common.container.slot;
22

33
import com.lishid.openinv.internal.common.container.slot.placeholder.Placeholders;
4-
import com.lishid.openinv.internal.common.player.OpenPlayer;
4+
import com.lishid.openinv.internal.common.player.BaseOpenPlayer;
55
import net.minecraft.server.level.ServerPlayer;
66
import net.minecraft.world.Container;
77
import net.minecraft.world.ContainerHelper;
@@ -35,7 +35,7 @@ public static boolean isAvailable(@NotNull ServerPlayer holder) {
3535
// Player must be online and not in creative - since the creative client is (semi-)authoritative,
3636
// it ignores changes without extra help, and will delete the item as a result.
3737
// Spectator mode is technically possible but may cause the item to be dropped if the client opens an inventory.
38-
return OpenPlayer.isConnected(holder.connection) && holder.gameMode.isSurvival();
38+
return BaseOpenPlayer.isConnected(holder.connection) && holder.gameMode.isSurvival();
3939
}
4040

4141
@Override

internal/common/src/main/java/com/lishid/openinv/internal/common/container/slot/ContentCursor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.lishid.openinv.internal.common.container.slot;
22

33
import com.lishid.openinv.internal.common.container.slot.placeholder.Placeholders;
4-
import com.lishid.openinv.internal.common.player.OpenPlayer;
4+
import com.lishid.openinv.internal.common.player.BaseOpenPlayer;
55
import net.minecraft.server.level.ServerPlayer;
66
import net.minecraft.world.Container;
77
import net.minecraft.world.entity.player.Player;
@@ -64,7 +64,7 @@ private boolean isAvailable() {
6464
// Player must be online and not in creative - since the creative client is (semi-)authoritative,
6565
// it ignores changes without extra help, and will delete the item as a result.
6666
// Spectator mode is technically possible but may cause the item to be dropped if the client opens an inventory.
67-
return OpenPlayer.isConnected(holder.connection) && holder.gameMode.isSurvival();
67+
return BaseOpenPlayer.isConnected(holder.connection) && holder.gameMode.isSurvival();
6868
}
6969

7070
@Override

internal/common/src/main/java/com/lishid/openinv/internal/common/container/slot/ContentDrop.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.lishid.openinv.internal.common.container.slot;
22

33
import com.lishid.openinv.internal.common.container.slot.placeholder.Placeholders;
4-
import com.lishid.openinv.internal.common.player.OpenPlayer;
4+
import com.lishid.openinv.internal.common.player.BaseOpenPlayer;
55
import net.minecraft.server.level.ServerPlayer;
66
import net.minecraft.world.Container;
77
import net.minecraft.world.inventory.Slot;
@@ -64,14 +64,14 @@ private SlotDrop(Container container, int index, int x, int y) {
6464

6565
@Override
6666
public ItemStack getOrDefault() {
67-
return OpenPlayer.isConnected(holder.connection)
67+
return BaseOpenPlayer.isConnected(holder.connection)
6868
? Placeholders.drop
6969
: Placeholders.blockedOffline;
7070
}
7171

7272
@Override
7373
public boolean mayPlace(@NotNull ItemStack itemStack) {
74-
return OpenPlayer.isConnected(holder.connection);
74+
return BaseOpenPlayer.isConnected(holder.connection);
7575
}
7676

7777
@Override

internal/common/src/main/java/com/lishid/openinv/internal/common/container/slot/ContentOffHand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.lishid.openinv.internal.common.container.slot;
22

3-
import com.lishid.openinv.internal.common.player.OpenPlayer;
3+
import com.lishid.openinv.internal.common.player.BaseOpenPlayer;
44
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket;
55
import net.minecraft.server.level.ServerPlayer;
66
import net.minecraft.world.Container;
@@ -37,7 +37,7 @@ public Slot asSlot(Container container, int slot, int x, int y) {
3737
return new SlotEquipment(container, slot, x, y) {
3838
@Override
3939
public void setChanged() {
40-
if (OpenPlayer.isConnected(holder.connection) && holder.containerMenu != holder.inventoryMenu) {
40+
if (BaseOpenPlayer.isConnected(holder.connection) && holder.containerMenu != holder.inventoryMenu) {
4141
holder.connection.send(
4242
new ClientboundContainerSetSlotPacket(
4343
holder.inventoryMenu.containerId,

0 commit comments

Comments
 (0)