Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-11-19 14:30:16 +01:00
Rewrite block predicates the other way around as well
Dieser Commit ist enthalten in:
Ursprung
93f081dd84
Commit
7d41706026
@ -445,11 +445,18 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<Clientboun
|
|||||||
}
|
}
|
||||||
|
|
||||||
final String identifier = rawPredicate.substring(0, idLength);
|
final String identifier = rawPredicate.substring(0, idLength);
|
||||||
|
final HolderSet holders;
|
||||||
|
if (identifier.startsWith("#")) {
|
||||||
final int id = Protocol1_20_5To1_20_3.MAPPINGS.blockId(identifier);
|
final int id = Protocol1_20_5To1_20_3.MAPPINGS.blockId(identifier);
|
||||||
if (id == -1) {
|
if (id == -1) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
holders = new HolderSet(new int[]{Protocol1_20_5To1_20_3.MAPPINGS.getNewBlockId(id)});
|
||||||
|
} else {
|
||||||
|
holders = new HolderSet(identifier);
|
||||||
|
}
|
||||||
|
|
||||||
final int propertiesEndIndex = rawPredicate.indexOf(']');
|
final int propertiesEndIndex = rawPredicate.indexOf(']');
|
||||||
final List<StatePropertyMatcher> propertyMatchers = new ArrayList<>();
|
final List<StatePropertyMatcher> propertyMatchers = new ArrayList<>();
|
||||||
if (propertiesStartIndex != -1 && propertiesEndIndex != -1) {
|
if (propertiesStartIndex != -1 && propertiesEndIndex != -1) {
|
||||||
@ -478,7 +485,7 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<Clientboun
|
|||||||
}
|
}
|
||||||
|
|
||||||
return new BlockPredicate(
|
return new BlockPredicate(
|
||||||
new HolderSet(new int[]{Protocol1_20_5To1_20_3.MAPPINGS.getNewBlockId(id)}),
|
holders,
|
||||||
propertyMatchers.isEmpty() ? null : propertyMatchers.toArray(EMPTY_PROPERTY_MATCHERS),
|
propertyMatchers.isEmpty() ? null : propertyMatchers.toArray(EMPTY_PROPERTY_MATCHERS),
|
||||||
tag
|
tag
|
||||||
);
|
);
|
||||||
|
@ -23,18 +23,22 @@ import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
|||||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||||
import com.viaversion.viaversion.api.minecraft.GameProfile;
|
import com.viaversion.viaversion.api.minecraft.GameProfile;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.HolderSet;
|
||||||
import com.viaversion.viaversion.api.minecraft.data.StructuredData;
|
import com.viaversion.viaversion.api.minecraft.data.StructuredData;
|
||||||
import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
|
import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.Item;
|
import com.viaversion.viaversion.api.minecraft.item.Item;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.item.data.AdventureModePredicate;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.data.AttributeModifier;
|
import com.viaversion.viaversion.api.minecraft.item.data.AttributeModifier;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.data.BannerPatternLayer;
|
import com.viaversion.viaversion.api.minecraft.item.data.BannerPatternLayer;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.data.Bee;
|
import com.viaversion.viaversion.api.minecraft.item.data.Bee;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.item.data.BlockPredicate;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.data.Enchantments;
|
import com.viaversion.viaversion.api.minecraft.item.data.Enchantments;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.data.FilterableComponent;
|
import com.viaversion.viaversion.api.minecraft.item.data.FilterableComponent;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.data.FilterableString;
|
import com.viaversion.viaversion.api.minecraft.item.data.FilterableString;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.data.FireworkExplosion;
|
import com.viaversion.viaversion.api.minecraft.item.data.FireworkExplosion;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.data.PotionEffect;
|
import com.viaversion.viaversion.api.minecraft.item.data.PotionEffect;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.data.PotionEffectData;
|
import com.viaversion.viaversion.api.minecraft.item.data.PotionEffectData;
|
||||||
|
import com.viaversion.viaversion.api.minecraft.item.data.StatePropertyMatcher;
|
||||||
import com.viaversion.viaversion.api.minecraft.item.data.SuspiciousStewEffect;
|
import com.viaversion.viaversion.api.minecraft.item.data.SuspiciousStewEffect;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.util.PotionEffects;
|
import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.util.PotionEffects;
|
||||||
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3;
|
import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3;
|
||||||
@ -332,17 +336,60 @@ final class StructuredDataConverter {
|
|||||||
patternsTag.add(patternTag);
|
patternsTag.add(patternTag);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//register(StructuredDataKey., (data, tag) -> );
|
register(StructuredDataKey.CAN_PLACE_ON, (data, tag) -> convertBlockPredicates(tag, data, "CanPlaceOn", HIDE_CAN_PLACE_ON));
|
||||||
|
register(StructuredDataKey.CAN_BREAK, (data, tag) -> convertBlockPredicates(tag, data, "CanDestroy", HIDE_CAN_DESTROY));
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
// StructuredDataKey.CAN_PLACE_ON
|
|
||||||
// StructuredDataKey.CAN_BREAK
|
|
||||||
// StructuredDataKey<ArmorTrim> TRIM
|
// StructuredDataKey<ArmorTrim> TRIM
|
||||||
// StructuredDataKey<BlockStateProperties> BLOCK_STATE
|
// StructuredDataKey<BlockStateProperties> BLOCK_STATE
|
||||||
// StructuredDataKey<Item[]> CONTAINER
|
// StructuredDataKey<Item[]> CONTAINER
|
||||||
// StructuredDataKey<Unit> INTANGIBLE_PROJECTILE
|
// StructuredDataKey<Unit> INTANGIBLE_PROJECTILE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void convertBlockPredicates(final CompoundTag tag, final AdventureModePredicate data, final String key, final int hideFlag) {
|
||||||
|
final ListTag<StringTag> predicatedListTag = new ListTag<>(StringTag.class);
|
||||||
|
for (final BlockPredicate predicate : data.predicates()) {
|
||||||
|
final HolderSet holders = predicate.predicates();
|
||||||
|
if (holders == null) {
|
||||||
|
// Can't do (nicely)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (holders.isLeft()) {
|
||||||
|
final String identifier = holders.left();
|
||||||
|
predicatedListTag.add(serializeBlockPredicate(predicate, identifier));
|
||||||
|
} else {
|
||||||
|
for (final int id : holders.right()) {
|
||||||
|
final int oldId = Protocol1_20_5To1_20_3.MAPPINGS.getOldItemId(id);
|
||||||
|
final String identifier = Protocol1_20_5To1_20_3.MAPPINGS.itemName(oldId);
|
||||||
|
predicatedListTag.add(serializeBlockPredicate(predicate, identifier));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tag.put(key, predicatedListTag);
|
||||||
|
if (!data.showInTooltip()) {
|
||||||
|
putHideFlag(tag, hideFlag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static StringTag serializeBlockPredicate(final BlockPredicate predicate, final String identifier) {
|
||||||
|
final StringBuilder builder = new StringBuilder(identifier);
|
||||||
|
if (predicate.propertyMatchers() != null) {
|
||||||
|
for (final StatePropertyMatcher matcher : predicate.propertyMatchers()) {
|
||||||
|
// I'm not sure if ranged values were possible in 1.20.4 (if so, there's no trace of how)
|
||||||
|
if (matcher.matcher().isLeft()) {
|
||||||
|
builder.append(matcher.name()).append('=');
|
||||||
|
builder.append(matcher.matcher().left());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (predicate.tag() != null) {
|
||||||
|
builder.append(predicate.tag());
|
||||||
|
}
|
||||||
|
return new StringTag(builder.toString());
|
||||||
|
}
|
||||||
|
|
||||||
private static CompoundTag getBlockEntityTag(final CompoundTag tag) {
|
private static CompoundTag getBlockEntityTag(final CompoundTag tag) {
|
||||||
CompoundTag subTag = tag.getCompoundTag("BlockEntityTag");
|
CompoundTag subTag = tag.getCompoundTag("BlockEntityTag");
|
||||||
if (subTag == null) {
|
if (subTag == null) {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren