Skip to content

Commit 6906e52

Browse files
committed
1.21
1 parent cc6ac61 commit 6906e52

14 files changed

+114
-202
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id 'fabric-loom' version '0.12-SNAPSHOT'
2+
id 'fabric-loom' version '1.7-SNAPSHOT'
33
id 'maven-publish'
44
}
55

@@ -43,7 +43,7 @@ processResources {
4343

4444
tasks.withType(JavaCompile).configureEach {
4545
// Minecraft 1.18 (1.18-pre2) upwards uses Java 17.
46-
it.options.release = 17
46+
it.options.release = 21
4747
}
4848

4949
java {

gradle.properties

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
org.gradle.jvmargs=-Xmx1G
33

44
# Fabric Properties
5-
# check these on https://fabricmc.net/develop
6-
minecraft_version=1.20.1
7-
yarn_mappings=1.20.1+build.10
8-
loader_version=0.14.22
5+
# check these on https://fabricmc.net/develop
6+
minecraft_version=1.21
7+
yarn_mappings=1.21+build.9
8+
loader_version=0.16.3
99

10-
#Fabric api
11-
fabric_version=0.87.0+1.20.1
10+
# Fabric API
11+
fabric_version=0.102.0+1.21
1212

1313
# Mod Properties
14-
mod_version = 1.0.5_1.20.1
15-
maven_group = net.just_s.sframes
16-
archives_base_name = seamless-itemframes
14+
mod_version = 1.0.5_1.21
15+
maven_group = net.just_s.sframes
16+
archives_base_name = seamless-itemframes
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

src/main/java/net/just_s/sframes/FrameCommand.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ private static int executeShow(ServerCommandSource commandSource, String name, O
9494
strValue = "§6" + value;
9595
}
9696
if (Objects.equals(name, "color")) {
97-
String colorName = SFramesMod.CONFIG.playerColor.get(commandSource.getPlayer().getEntityName());
97+
String colorName = SFramesMod.CONFIG.playerColor.get(commandSource.getPlayer().getNameForScoreboard());
9898
strValue = colorName != null ? Formatting.byName(colorName).toString() + colorName : "§fno custom color";
9999
}
100100
if (Objects.equals(name, "baseColor")) {
@@ -106,17 +106,14 @@ private static int executeShow(ServerCommandSource commandSource, String name, O
106106

107107
private static int executeColor(ServerCommandSource commandSource, Formatting color) {
108108
ServerPlayerEntity player = commandSource.getPlayer();
109-
SFramesMod.CONFIG.playerColor.put(player.getEntityName(), color.asString());
109+
SFramesMod.CONFIG.playerColor.put(player.getNameForScoreboard(), color.asString());
110110

111111
Team team = player.getServer().getScoreboard().getTeam("SeamlessFrames");
112-
SerializableTeam serializableTeam = new SerializableTeam(team, Formatting.byName(SFramesMod.CONFIG.playerColor.get(player.getEntityName())));
113-
114-
PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer());
115-
buf.writeString(team.getName());
116-
buf.writeByte(2);
117-
serializableTeam.write(buf);
118-
119-
SFramesMod.sendPackets(player, new TeamS2CPacket(buf));
112+
Formatting baseColor = team.getColor();
113+
team.setColor(Formatting.byName(SFramesMod.CONFIG.playerColor.get(player.getNameForScoreboard())));
114+
TeamS2CPacket packet = TeamS2CPacket.updateTeam(team, false);
115+
team.setColor(baseColor);
116+
SFramesMod.sendPackets(player, packet);
120117

121118
SFramesMod.CONFIG.dumpJson();
122119
return 1;

src/main/java/net/just_s/sframes/SFramesMod.java

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.slf4j.Logger;
1919
import org.slf4j.LoggerFactory;
2020

21+
import java.util.ArrayList;
2122
import java.util.Iterator;
2223
import java.util.List;
2324

@@ -49,54 +50,32 @@ public static boolean shouldGlow(ItemFrameEntity frame) {
4950
public static EntityTrackerUpdateS2CPacket generateGlowPacket(ItemFrameEntity frame, boolean shouldGlow) {
5051
DataTracker tracker = frame.getDataTracker();
5152
List<DataTracker.Entry<?>> trackedValues = getAllEntries(tracker);
52-
53+
List<DataTracker.SerializedEntry<?>> serializedEntryList = new ArrayList<>();
54+
boolean wasModified = false;
5355
for (DataTracker.Entry<?> entry : trackedValues) {
54-
if (entry.get().getClass() == Byte.class) {
56+
if (entry.get().getClass() == Byte.class && !wasModified) {
5557
DataTracker.Entry<Byte> byteEntry = (DataTracker.Entry<Byte>) entry;
5658
if (shouldGlow)
5759
byteEntry.set((byte) ((byte)entry.get() | 1 << 6));
5860
else
5961
byteEntry.set((byte) ((byte)entry.get() & ~(1 << 6)));
60-
break;
62+
wasModified = true;
6163
}
64+
serializedEntryList.add(entry.toSerialized());
6265
}
66+
//LOGGER.info(serializedEntryList.toString());
6367

64-
PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer());
65-
buf.writeVarInt(frame.getId());
66-
for (DataTracker.Entry<?> entry : trackedValues) {
67-
writeEntryToPacket(buf, entry);
68-
}
69-
buf.writeByte(255);
70-
71-
return new EntityTrackerUpdateS2CPacket(buf);
68+
return new EntityTrackerUpdateS2CPacket(frame.getId(), serializedEntryList);
7269
}
7370

7471
@Nullable
7572
private static List<DataTracker.Entry<?>> getAllEntries(DataTracker tracker) {
76-
List<DataTracker.Entry<?>> list = null;
77-
((AccessDataTrackerEntries)tracker).getLock().readLock().lock();
73+
List<DataTracker.Entry<?>> list = Lists.newArrayList();
7874

79-
DataTracker.Entry entry;
80-
for(ObjectIterator var2 = ((AccessDataTrackerEntries)tracker).getEntries().values().iterator(); var2.hasNext(); list.add(new DataTracker.Entry(entry.getData(), entry.getData().getType().copy(entry.get())))) {
81-
entry = (DataTracker.Entry)var2.next();
82-
if (list == null) {
83-
list = Lists.newArrayList();
84-
}
75+
for (DataTracker.Entry entry : ((AccessDataTrackerEntries)tracker).getEntries()) {
76+
list.add(new DataTracker.Entry(entry.getData(), entry.getData().dataType().copy(entry.get())));
8577
}
8678

87-
((AccessDataTrackerEntries)tracker).getLock().readLock().unlock();
88-
return list;
89-
}
90-
91-
private static <T> void writeEntryToPacket(PacketByteBuf buf, DataTracker.Entry<T> entry) {
92-
TrackedData<T> trackedData = entry.getData();
93-
int i = TrackedDataHandlerRegistry.getId(trackedData.getType());
94-
if (i < 0) {
95-
LOGGER.error("Unknown serializer type " + trackedData.getType());
96-
} else {
97-
buf.writeByte(trackedData.getId());
98-
buf.writeVarInt(i);
99-
trackedData.getType().write(buf, entry.get());
100-
}
79+
return list.isEmpty() ? null : list;
10180
}
10281
}

src/main/java/net/just_s/sframes/SerializableTeam.java

Lines changed: 0 additions & 74 deletions
This file was deleted.

src/main/java/net/just_s/sframes/mixin/AccessDataTrackerEntries.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,5 @@
1010
@Mixin(DataTracker.class)
1111
public interface AccessDataTrackerEntries {
1212
@Accessor
13-
public Int2ObjectMap<DataTracker.Entry<?>> getEntries();
14-
15-
@Accessor
16-
public ReadWriteLock getLock();
13+
public DataTracker.Entry<?>[] getEntries();
1714
}

src/main/java/net/just_s/sframes/mixin/CustomColorMixin.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import io.netty.buffer.Unpooled;
44
import net.just_s.sframes.SFramesMod;
5-
import net.just_s.sframes.SerializableTeam;
65
import net.minecraft.network.PacketByteBuf;
76
import net.minecraft.network.packet.s2c.play.TeamS2CPacket;
87
import net.minecraft.scoreboard.Team;
@@ -19,16 +18,13 @@ public class CustomColorMixin {
1918
@Inject(at=@At("TAIL"), method = "onPlayerConnected")
2019
private void inject(ServerPlayerEntity player, CallbackInfo ci) {
2120
// Send Custom Color of frame
22-
if (SFramesMod.CONFIG.playerColor.containsKey(player.getEntityName())) {
23-
Team team = player.getServer().getScoreboard().getTeam("SeamlessFrames");
24-
SerializableTeam serializableTeam = new SerializableTeam(team, Formatting.byName(SFramesMod.CONFIG.playerColor.get(player.getEntityName())));
21+
if (!SFramesMod.CONFIG.playerColor.containsKey(player.getNameForScoreboard())) return;
2522

26-
PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer());
27-
buf.writeString(team.getName());
28-
buf.writeByte(2);
29-
serializableTeam.write(buf);
30-
31-
SFramesMod.sendPackets(player, new TeamS2CPacket(buf));
32-
}
23+
Team team = player.getServer().getScoreboard().getTeam("SeamlessFrames");
24+
Formatting baseColor = team.getColor();
25+
team.setColor(Formatting.byName(SFramesMod.CONFIG.playerColor.get(player.getNameForScoreboard())));
26+
TeamS2CPacket packet = TeamS2CPacket.updateTeam(team, false);
27+
team.setColor(baseColor);
28+
SFramesMod.sendPackets(player, packet);
3329
}
3430
}

src/main/java/net/just_s/sframes/mixin/DecorationItemMixin.java

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package net.just_s.sframes.mixin;
22

33
import net.just_s.sframes.SFramesMod;
4+
import net.minecraft.component.DataComponentTypes;
5+
import net.minecraft.component.type.NbtComponent;
46
import net.minecraft.entity.EntityType;
57
import net.minecraft.entity.decoration.AbstractDecorationEntity;
68
import net.minecraft.entity.decoration.GlowItemFrameEntity;
@@ -44,39 +46,42 @@ private void inject(ItemUsageContext context, CallbackInfoReturnable<ActionResul
4446
PlayerEntity playerEntity = context.getPlayer();
4547
ItemStack itemStack = context.getStack();
4648

47-
if (playerEntity != null && this.canPlaceOn(playerEntity, direction, itemStack, blockPos2)) {
48-
if (this.entityType != EntityType.ITEM_FRAME && this.entityType != EntityType.GLOW_ITEM_FRAME) {
49-
return;
50-
}
51-
if (!itemStack.hasNbt()) {return;}
52-
NbtCompound nbt = itemStack.getNbt();
53-
if (nbt.contains("invisibleframe")) {
54-
World world = context.getWorld();
55-
AbstractDecorationEntity frameEntity;
56-
if (this.entityType == EntityType.ITEM_FRAME) {
57-
frameEntity = new ItemFrameEntity(world, blockPos2, direction);
58-
} else {
59-
frameEntity = new GlowItemFrameEntity(world, blockPos2, direction);
60-
}
61-
EntityType.loadFromEntityNbt(world, playerEntity, frameEntity, nbt);
49+
if (playerEntity == null) return;
50+
if (!this.canPlaceOn(playerEntity, direction, itemStack, blockPos2)) return;
6251

63-
Team team = world.getScoreboard().getTeam("SeamlessFrames");
64-
world.getScoreboard().addPlayerToTeam(frameEntity.getEntityName(), team);
52+
if (this.entityType != EntityType.ITEM_FRAME && this.entityType != EntityType.GLOW_ITEM_FRAME) return;
6553

66-
frameEntity.addCommandTag("invisibleframe");
54+
NbtComponent nbtComponent = itemStack.get(DataComponentTypes.CUSTOM_DATA);
55+
if (nbtComponent == null) return;
6756

68-
if (frameEntity.canStayAttached()) {
69-
if (!world.isClient) {
70-
frameEntity.onPlace();
71-
world.emitGameEvent(playerEntity, GameEvent.ENTITY_PLACE, frameEntity.getPos());
72-
world.spawnEntity(frameEntity);
73-
}
57+
NbtCompound nbt = nbtComponent.copyNbt();
58+
59+
if (nbt.contains("invisibleframe")) {
60+
World world = context.getWorld();
61+
AbstractDecorationEntity frameEntity;
62+
if (this.entityType == EntityType.ITEM_FRAME) {
63+
frameEntity = new ItemFrameEntity(world, blockPos2, direction);
64+
} else {
65+
frameEntity = new GlowItemFrameEntity(world, blockPos2, direction);
66+
}
67+
EntityType.loadFromEntityNbt(world, playerEntity, frameEntity, NbtComponent.of(nbt));
7468

75-
itemStack.decrement(1);
76-
cir.setReturnValue(ActionResult.success(world.isClient));
77-
} else {
78-
cir.setReturnValue(ActionResult.CONSUME);
69+
Team team = world.getScoreboard().getTeam("SeamlessFrames");
70+
world.getScoreboard().addScoreHolderToTeam(frameEntity.getNameForScoreboard(), team);
71+
72+
frameEntity.addCommandTag("invisibleframe");
73+
74+
if (frameEntity.canStayAttached()) {
75+
if (!world.isClient) {
76+
frameEntity.onPlace();
77+
world.emitGameEvent(playerEntity, GameEvent.ENTITY_PLACE, frameEntity.getPos());
78+
world.spawnEntity(frameEntity);
7979
}
80+
81+
itemStack.decrement(1);
82+
cir.setReturnValue(ActionResult.success(world.isClient));
83+
} else {
84+
cir.setReturnValue(ActionResult.CONSUME);
8085
}
8186
}
8287
} catch (Exception e) {

src/main/java/net/just_s/sframes/mixin/GlowingItemFrameMixin.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
package net.just_s.sframes.mixin;
22

33
import net.just_s.sframes.SFramesMod;
4+
import net.minecraft.component.ComponentHolder;
5+
import net.minecraft.component.DataComponentTypes;
6+
import net.minecraft.component.EnchantmentEffectComponentTypes;
7+
import net.minecraft.component.type.ItemEnchantmentsComponent;
8+
import net.minecraft.component.type.NbtComponent;
9+
import net.minecraft.enchantment.Enchantment;
10+
import net.minecraft.enchantment.EnchantmentHelper;
411
import net.minecraft.enchantment.Enchantments;
512
import net.minecraft.entity.decoration.GlowItemFrameEntity;
613
import net.minecraft.entity.decoration.ItemFrameEntity;
@@ -21,12 +28,13 @@ private void injectAsItem(CallbackInfoReturnable<ItemStack> cir) {
2128
ItemFrameEntity frame = ((ItemFrameEntity)(Object)this);
2229
if (frame.getCommandTags().contains("invisibleframe")) {
2330
ItemStack item = cir.getReturnValue();
24-
item.setCustomName(Text.of("Невидимая светящаяся рамка"));
25-
item.addEnchantment(Enchantments.UNBREAKING, 1);
26-
item.addHideFlag(ItemStack.TooltipSection.ENCHANTMENTS);
31+
item.set(DataComponentTypes.ITEM_NAME, Text.of("Невидимая светящаяся рамка"));
32+
item.set(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true);
2733

28-
NbtCompound nbt = item.getOrCreateNbt();
34+
NbtComponent nbtCompound = item.get(DataComponentTypes.CUSTOM_DATA);
35+
NbtCompound nbt = (nbtCompound == null) ? NbtComponent.DEFAULT.copyNbt() : nbtCompound.copyNbt();
2936
nbt.putBoolean("invisibleframe", true);
37+
item.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(nbt));
3038

3139
cir.setReturnValue(item);
3240
}

0 commit comments

Comments
 (0)