Skip to content

Commit

Permalink
Some fixes/changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Patbox committed Apr 17, 2024
1 parent 808ac5b commit b1a1fa6
Show file tree
Hide file tree
Showing 9 changed files with 31 additions and 64 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx4G
# Fabric Properties
# check these on https://fabricmc.net/use
minecraft_version=1.20.5-pre3
yarn_mappings=1.20.5-pre3+build.1
yarn_mappings=1.20.5-pre3+build.2
loader_version=0.15.10

#Fabric api
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import eu.pb4.polymer.core.impl.interfaces.BlockStateExtra;
import eu.pb4.polymer.core.mixin.block.BlockEntityUpdateS2CPacketAccessor;
import eu.pb4.polymer.rsm.api.RegistrySyncUtils;
import io.github.theepicblock.polymc.PolyMc;
import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
Expand All @@ -18,7 +17,6 @@
import net.minecraft.registry.Registries;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.Util;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkSectionPos;
import org.jetbrains.annotations.ApiStatus;
Expand Down Expand Up @@ -233,6 +231,6 @@ public interface MineEventListener {

@FunctionalInterface
public interface BreakingProgressListener {
boolean onBreakingProgressUpdate(ServerPlayerEntity player, BlockPos pos, BlockState finalState, int i);
void onBreakingProgressUpdate(ServerPlayerEntity player, BlockPos pos, BlockState finalState, int i);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public static boolean isRegisteredEntityType(EntityType<?> type) {

/**
* @param type EntityType
* @return List of default DataTracker entries for entity type
* @return Array of default DataTracker entries for entity type
*/
public static DataTracker.Entry<?>[] getDefaultTrackedData(EntityType<?> type) {
return InternalEntityHelpers.getExampleTrackedDataOfEntityType(type);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity pla
public ItemStack getPolymerItemStack(ItemStack itemStack, TooltipType tooltipType, ServerPlayerEntity player) {
ItemStack out = PolymerItem.super.getPolymerItemStack(itemStack, tooltipType, player);

out.set(DataComponentTypes.PROFILE, new ProfileComponent(PolymerUtils.createSkinGameProfile(
out.set(DataComponentTypes.PROFILE, PolymerUtils.createProfileComponent(
this.polymerBlock.getPolymerSkinValue(this.getBlock().getDefaultState(), BlockPos.ORIGIN, player),
this.polymerBlock.getPolymerSkinSignature(this.getBlock().getDefaultState(), BlockPos.ORIGIN, player)
)));
));
return out;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,22 +65,14 @@ default int getPolymerArmorColor(ItemStack itemStack, @Nullable ServerPlayerEnti

/**
* This method allows to modify tooltip text
* If you just want to add your own one, use {@link Item#appendTooltip(ItemStack, Item.TooltipContext, List, TooltipType)}
* If you just want to add your own one, use {@link Item#appendTooltip(ItemStack, World, List, TooltipContext)}
*
* @param tooltip Current tooltip text
* @param stack Server-side ItemStack
* @param player Target player
*/
default void modifyClientTooltip(List<Text> tooltip, ItemStack stack, @Nullable ServerPlayerEntity player) {
}

/**
* Allows to disable showing of name in item frames
*/
default boolean showDefaultNameInItemFrames() {
return false;
}

@Override
default Item getPolymerReplacement(ServerPlayerEntity player) {
return this.getPolymerItem(((Item) this).getDefaultStack(), player);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@


/**
* An server side item group that can be synchronized with polymer clients
* It also has it's own server side functionality
* A server side item group that can be synchronized with polymer clients
* It also has its own server side functionality
*/
public final class PolymerItemGroupUtils {
public static final PolymerRegistry<ItemGroup> REGISTRY = InternalServerRegistry.ITEM_GROUPS;
Expand All @@ -44,7 +44,7 @@ public static Contents getContentsFor(ItemGroup group, RegistryWrapper.WrapperLo
try {
value = ((ItemGroupExtra) group).polymer$getContentsWith(featureSet, operator, lookup);
} catch (Throwable t) {
// Some 1.20 mods use client classes in their item groups because vanilla doesn't call them on the server anymore
// Some mods use client classes in their item groups because vanilla doesn't call them on the server anymore
// Catch instead of letting the game crash, even though it's their fault...
PolymerImpl.LOGGER.warn("Failed to load contents for an ItemGroup", t);
value = new Contents(List.of(), List.of());
Expand All @@ -66,7 +66,7 @@ public static List<ItemGroup> getItemGroups(ServerPlayerEntity player) {
list.add(g);
}
} catch (Throwable e) {
e.printStackTrace();
PolymerImpl.LOGGER.warn("Something broke!", e);
}
}

Expand All @@ -76,7 +76,7 @@ public static List<ItemGroup> getItemGroups(ServerPlayerEntity player) {
list.add(g);
}
} catch (Throwable e) {
e.printStackTrace();
PolymerImpl.LOGGER.warn("Something broke!", e);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package eu.pb4.polymer.core.api.item;

import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import eu.pb4.polymer.common.api.events.BooleanEvent;
import eu.pb4.polymer.common.api.events.FunctionEvent;
Expand Down Expand Up @@ -37,8 +38,6 @@ public final class PolymerItemUtils {
public static final MapCodec<ItemStack> POLYMER_STACK_CODEC = ItemStack.CODEC.fieldOf(POLYMER_STACK);
public static final MapCodec<Identifier> POLYMER_STACK_ID_CODEC = Identifier.CODEC.fieldOf("id").fieldOf(POLYMER_STACK);
public static final Style CLEAN_STYLE = Style.EMPTY.withItalic(false).withColor(Formatting.WHITE);
public static final Style NON_ITALIC_STYLE = Style.EMPTY.withItalic(false);

/**
* Allows to force rendering of some items as polymer one (for example vanilla ones)
*/
Expand Down Expand Up @@ -88,22 +87,22 @@ private PolymerItemUtils() {
}

/**
* This methods creates a client side ItemStack representation
* This method creates a client side ItemStack representation
*
* @param itemStack Server side ItemStack
* @param player Player being send to
* @param player Player being sent to
* @return Client side ItemStack
*/
public static ItemStack getPolymerItemStack(ItemStack itemStack, @Nullable ServerPlayerEntity player) {
return getPolymerItemStack(itemStack, PolymerUtils.getTooltipType(player), player);
}

/**
* This methods creates a client side ItemStack representation
* This method creates a client side ItemStack representation
*
* @param itemStack Server side ItemStack
* @param tooltipContext Tooltip Context
* @param player Player being send to
* @param player Player being sent to
* @return Client side ItemStack
*/
public static ItemStack getPolymerItemStack(ItemStack itemStack, TooltipType tooltipContext, @Nullable ServerPlayerEntity player) {
Expand Down Expand Up @@ -222,7 +221,7 @@ public static boolean isPolymerServerItem(ItemStack itemStack, @Nullable ServerP
}


return false;
return ITEM_CHECK.invoke((x) -> x.test(itemStack));
}

/**
Expand Down Expand Up @@ -371,24 +370,6 @@ public static ItemStack createItemStack(ItemStack itemStack, TooltipType tooltip
});
}

private static NbtElement removeStackMarker(NbtElement nbt) {
if (nbt instanceof NbtCompound compound) {
var out = new NbtCompound();
for (var entry : compound.getKeys()) {
out.put(entry, removeStackMarker(compound.get(entry)));
}
return out;
} else if (nbt instanceof NbtList list) {
var out = new NbtList();
for (var entry : list) {
out.add(removeStackMarker(entry));
}
return out;
}

return nbt;
}

/**
* This method is minimal wrapper around {@link PolymerItem#getPolymerItem(ItemStack, ServerPlayerEntity)} to make sure
* It gets replaced if it represents other PolymerItem
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,4 +211,8 @@ public static Packet<?> replacePacket(ServerCommonNetworkHandler handler, Packet
public static boolean shouldPreventPacket(ServerCommonNetworkHandler handler, Packet<?> packet) {
return PacketPatcher.prevent(handler, packet);
}

public static ProfileComponent createProfileComponent(String value, @Nullable String signature) {
return new ProfileComponent(createSkinGameProfile(value, signature));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,23 +49,24 @@ public class EntityTrackerUpdateS2CPacketMixin implements EntityTrackerUpdateS2C
@Unique
private boolean polymer$isInitial = false;

@Unique
@Nullable
private List<DataTracker.SerializedEntry<?>> polymer$createEntries() {
private List<DataTracker.SerializedEntry<?>> polymer$createEntries(List<DataTracker.SerializedEntry<?>> trackedValues) {
var entity = EntityAttachedPacket.get(this, this.id);
if (entity == null) {
return this.trackedValues != null ? new ArrayList<>(this.trackedValues) : null;
return trackedValues != null ? new ArrayList<>(trackedValues) : null;
}

var entries = new ArrayList<DataTracker.SerializedEntry<?>>();
var player = PolymerUtils.getPlayerContext();

if (entity instanceof PolymerEntity polymerEntity && InternalEntityHelpers.canPatchTrackedData(player, entity)) {
var mod = this.trackedValues != null ? new ArrayList<>(this.trackedValues) : new ArrayList<DataTracker.SerializedEntry<?>>();
var mod = trackedValues != null ? new ArrayList<>(trackedValues) : new ArrayList<DataTracker.SerializedEntry<?>>();
polymerEntity.modifyRawTrackedData(mod, player, this.polymer$isInitial);

var legalTrackedData = InternalEntityHelpers.getExampleTrackedDataOfEntityType((polymerEntity.getPolymerEntityType(player)));

if (mod.size() > 0 && legalTrackedData != null && legalTrackedData.length > 0) {
if (!mod.isEmpty() && legalTrackedData != null && legalTrackedData.length > 0) {
for (var entry : mod) {
var x = legalTrackedData[entry.id()];
if (x != null && x.getData().dataType() == entry.handler()) {
Expand All @@ -75,27 +76,18 @@ public class EntityTrackerUpdateS2CPacketMixin implements EntityTrackerUpdateS2C
} else {
entries.addAll(mod);
}
} else if (this.trackedValues == null) {
} else if (trackedValues == null) {
return null;
} else {
entries.addAll(this.trackedValues);
entries.addAll(trackedValues);
}

final var isItemFrame = entity instanceof ItemFrameEntity;
final var isMinecart = entity instanceof AbstractMinecartEntity;
final var size = entries.size();
for (int i = 0; i < size; i++) {
var entry = entries.get(i);

if (isItemFrame && entry.id() == ItemFrameEntityAccessor.getITEM_STACK().id() && entry.value() instanceof ItemStack stack) {
var polymerStack = PolymerItemUtils.getPolymerItemStack(stack, player);

if (!stack.contains(DataComponentTypes.CUSTOM_NAME) && !(stack.getItem() instanceof PolymerItem polymerItem && polymerItem.showDefaultNameInItemFrames())) {
stack.remove(DataComponentTypes.CUSTOM_NAME);
}

entries.set(i, new DataTracker.SerializedEntry(entry.id(), entry.handler(), polymerStack));
} else if (isMinecart && entry.id() == AbstractMinecartEntityAccessor.getCUSTOM_BLOCK_ID().id()) {
if (isMinecart && entry.id() == AbstractMinecartEntityAccessor.getCUSTOM_BLOCK_ID().id()) {
entries.set(i, new DataTracker.SerializedEntry(entry.id(), entry.handler(), Block.getRawIdFromState(PolymerBlockUtils.getPolymerBlockState(Block.getStateFromRawId((int) entry.value()), player))));
} else if (entry.value() instanceof VillagerData data) {
var x = PolymerEntityUtils.getPolymerProfession(data.getProfession());
Expand All @@ -109,8 +101,8 @@ public class EntityTrackerUpdateS2CPacketMixin implements EntityTrackerUpdateS2C
}

@ModifyArg(method = "write(Lnet/minecraft/network/RegistryByteBuf;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/EntityTrackerUpdateS2CPacket;write(Ljava/util/List;Lnet/minecraft/network/RegistryByteBuf;)V"))
private List<DataTracker.SerializedEntry<?>> polymer$changeForPacket(List<DataTracker.Entry<?>> value) {
return this.polymer$createEntries();
private List<DataTracker.SerializedEntry<?>> polymer$changeForPacket(List<DataTracker.SerializedEntry<?>> value) {
return this.polymer$createEntries(value);
}

@Override
Expand Down

0 comments on commit b1a1fa6

Please sign in to comment.