Merge branch '1.20.1' into 1.20.2

This commit is contained in:
Sollace 2024-03-02 17:28:33 +00:00
commit 829a57d00d
No known key found for this signature in database
GPG key ID: E52FACE7B5C773DB
9 changed files with 68 additions and 33 deletions

View file

@ -9,6 +9,7 @@ import com.minelittlepony.unicopia.ability.magic.Caster;
import com.minelittlepony.unicopia.ability.magic.spell.effect.*;
import com.minelittlepony.unicopia.entity.damage.UDamageTypes;
import com.minelittlepony.unicopia.entity.player.Pony;
import com.minelittlepony.unicopia.item.FriendshipBraceletItem;
import com.minelittlepony.unicopia.particle.OrientedBillboardParticleEffect;
import com.minelittlepony.unicopia.particle.ParticleSpawner;
import com.minelittlepony.unicopia.particle.TargetBoundParticleEffect;
@ -59,7 +60,9 @@ public class RainboomAbilitySpell extends AbstractSpell {
}
}
source.findAllEntitiesInRange(RADIUS).forEach(e -> {
source.findAllEntitiesInRange(RADIUS)
.filter(e -> !FriendshipBraceletItem.isComrade(source, e))
.forEach(e -> {
e.damage(source.damageOf(UDamageTypes.RAINBOOM, source), 6);
});
EFFECT_RANGE.translate(source.getOrigin()).getBlockPositions().forEach(pos -> {

View file

@ -39,7 +39,8 @@ public class FriendshipBraceletItem extends WearableItem implements DyeableItem,
public TypedActionResult<ItemStack> use(World world, PlayerEntity player, Hand hand) {
ItemStack stack = player.getStackInHand(hand);
if (!isSigned(stack) && (EquinePredicates.PLAYER_UNICORN.test(player) || AmuletSelectors.PEARL_NECKLACE.test(player))) {
if (!isSigned(stack) && (EquinePredicates.PLAYER_UNICORN.test(player) || EquinePredicates.PLAYER_PEGASUS.test(player)
|| AmuletSelectors.PEARL_NECKLACE.test(player))) {
player.setCurrentHand(hand);
ItemStack result = stack.copy();

View file

@ -36,7 +36,7 @@ public record FollowingParticleEffect (
this(type,
new WeakTarget(buf),
buf.readFloat(),
buf.readOptional(b -> ParticleFactoryHelper.readEffect(b))
ParticleFactoryHelper.OPTIONAL_PARTICLE_EFFECT_CODEC.read(buf)
);
}
@ -61,11 +61,7 @@ public record FollowingParticleEffect (
public void write(PacketByteBuf buf) {
target.write(buf);
buf.writeFloat(followSpeed);
buf.writeOptional(childEffect(), (b, child) -> {
b.writeBoolean(true);
b.writeInt(Registries.PARTICLE_TYPE.getRawId(child.getType()));
child.write(buf);
});
ParticleFactoryHelper.OPTIONAL_PARTICLE_EFFECT_CODEC.write(buf, childEffect());
}
@Override

View file

@ -32,7 +32,7 @@ public record LightningBoltParticleEffect (
}
protected LightningBoltParticleEffect(ParticleType<LightningBoltParticleEffect> particleType, PacketByteBuf buf) {
this(buf.readBoolean(), buf.readInt(), buf.readInt(), buf.readFloat(), buf.readOptional(ParticleFactoryHelper::readVector));
this(buf.readBoolean(), buf.readInt(), buf.readInt(), buf.readFloat(), ParticleFactoryHelper.OPTIONAL_VECTOR_CODEC.read(buf));
}
@Override
@ -46,7 +46,7 @@ public record LightningBoltParticleEffect (
buffer.writeInt(changeFrequency);
buffer.writeInt(maxBranches);
buffer.writeFloat(maxDeviation);
buffer.writeOptional(pathEndPoint, ParticleFactoryHelper::writeVector);
ParticleFactoryHelper.OPTIONAL_VECTOR_CODEC.write(buffer, pathEndPoint);
}
@Override

View file

@ -1,6 +1,8 @@
package com.minelittlepony.unicopia.particle;
import java.util.Optional;
import com.minelittlepony.unicopia.util.serialization.PacketCodec;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
@ -12,33 +14,38 @@ import net.minecraft.registry.Registries;
import net.minecraft.util.math.Vec3d;
public interface ParticleFactoryHelper {
@SuppressWarnings("deprecation")
PacketCodec<ParticleEffect> PARTICLE_EFFECT_CODEC = new PacketCodec<>(
buf -> {
@SuppressWarnings("unchecked")
ParticleType<ParticleEffect> type = (ParticleType<ParticleEffect>)Registries.PARTICLE_TYPE.get(buf.readInt());
return type.getParametersFactory().read(type, buf);
},
(buf, effect) -> {
buf.writeInt(Registries.PARTICLE_TYPE.getRawId(effect.getType()));
effect.write(buf);
}
);
PacketCodec<Optional<ParticleEffect>> OPTIONAL_PARTICLE_EFFECT_CODEC = PARTICLE_EFFECT_CODEC.asOptional();
PacketCodec<Vec3d> VECTOR_CODEC = new PacketCodec<>(
buf -> new Vec3d(buf.readDouble(), buf.readDouble(), buf.readDouble()),
(buf, vector) -> {
buf.writeDouble(vector.x);
buf.writeDouble(vector.y);
buf.writeDouble(vector.z);
}
);
PacketCodec<Optional<Vec3d>> OPTIONAL_VECTOR_CODEC = VECTOR_CODEC.asOptional();
@SuppressWarnings("unchecked")
static <T extends ParticleEffect> T read(StringReader reader) throws CommandSyntaxException {
return (T)ParticleEffectArgumentType.readParameters(reader, Registries.PARTICLE_TYPE.getReadOnlyWrapper());
}
@SuppressWarnings("deprecation")
static <T extends ParticleEffect> ParticleEffect readEffect(PacketByteBuf buf) {
@SuppressWarnings("unchecked")
ParticleType<T> type = (ParticleType<T>)Registries.PARTICLE_TYPE.get(buf.readInt());
return type.getParametersFactory().read(type, buf);
}
static Vec3d readVector(StringReader reader) throws CommandSyntaxException {
return new Vec3d(readDouble(reader), readDouble(reader), readDouble(reader));
}
static Vec3d readVector(PacketByteBuf buffer) {
return new Vec3d(buffer.readDouble(), buffer.readDouble(), buffer.readDouble());
}
static void writeVector(PacketByteBuf buffer, Vec3d vector) {
buffer.writeDouble(vector.x);
buffer.writeDouble(vector.y);
buffer.writeDouble(vector.z);
}
static boolean readBoolean(StringReader reader) throws CommandSyntaxException {
reader.expect(' ');
return reader.readBoolean();

View file

@ -32,7 +32,7 @@ public record SphereParticleEffect (
}
protected SphereParticleEffect(ParticleType<? extends SphereParticleEffect> type, PacketByteBuf buf) {
this(type, buf.readVector3f(), buf.readFloat(), buf.readFloat(), ParticleFactoryHelper.readVector(buf));
this(type, buf.readVector3f(), buf.readFloat(), buf.readFloat(), ParticleFactoryHelper.VECTOR_CODEC.read(buf));
}
public SphereParticleEffect(ParticleType<? extends SphereParticleEffect> type, int tint, float alpha, float rad) {
@ -61,7 +61,7 @@ public record SphereParticleEffect (
buf.writeVector3f(color);
buf.writeFloat(alpha);
buf.writeFloat(radius);
ParticleFactoryHelper.writeVector(buf, offset);
ParticleFactoryHelper.VECTOR_CODEC.write(buf, offset);
}
@Override

View file

@ -20,7 +20,7 @@ public class WeakTarget {
}
public WeakTarget(PacketByteBuf buf) {
fixedPosition = ParticleFactoryHelper.readVector(buf);
fixedPosition = ParticleFactoryHelper.VECTOR_CODEC.read(buf);
targetId = buf.readInt();
}
@ -49,7 +49,7 @@ public class WeakTarget {
}
public void write(PacketByteBuf buf) {
ParticleFactoryHelper.writeVector(buf, fixedPosition);
ParticleFactoryHelper.VECTOR_CODEC.write(buf, fixedPosition);
buf.writeInt(targetId);
}
}

View file

@ -0,0 +1,20 @@
package com.minelittlepony.unicopia.util.serialization;
import java.util.Optional;
import net.minecraft.network.PacketByteBuf;
public record PacketCodec<T>(PacketByteBuf.PacketReader<T> reader, PacketByteBuf.PacketWriter<T> writer) {
public T read(PacketByteBuf buf) {
return reader().apply(buf);
}
public void write(PacketByteBuf buf, T value) {
writer().accept(buf, value);
}
public PacketCodec<Optional<T>> asOptional() {
return new PacketCodec<>(buf -> buf.readOptional(reader), (buf, v) -> buf.writeOptional(v, writer));
}
}

View file

@ -228,6 +228,7 @@
"block.unicopia.spectral_fire": "Спектральный огонь",
"block.unicopia.bananas": "Бананы",
"block.unicopia.zapling": "Саженец зап-яблони",
"block.unicopia.potted_zapling": "Саженец зап-яблони в горшке",
"block.unicopia.zap_log": "Бревно зап-яблони",
"block.unicopia.zap_wood": "Зап-яблоня",
"block.unicopia.stripped_zap_log": "Бревно обтёсанной зап-яблони",
@ -251,6 +252,7 @@
"block.unicopia.zap_apple": "Зап-яблоня",
"block.unicopia.zap_bulb": "Недозрелая зап-яблоня",
"block.unicopia.palm_sapling": "Саженец пальмы",
"block.unicopia.potted_palm_sapling": "Саженец пальмы в горшке",
"block.unicopia.palm_log": "Пальмовое бревно",
"block.unicopia.palm_wood": "Пальма",
"block.unicopia.palm_planks": "Пальмовые доски",
@ -273,11 +275,13 @@
"block.unicopia.gold_root": "Золотой корень",
"block.unicopia.golden_oak_sprout": "Росток золотого дуба",
"block.unicopia.golden_oak_sapling": "Саженец золотого дуба",
"block.unicopia.potted_golden_oak_sapling": "Саженец золотого дуба в горшке",
"block.unicopia.golden_oak_leaves": "Листья золотого дуба",
"block.unicopia.golden_oak_log": "Бревно золотого дуба",
"block.unicopia.mango": "Манго",
"block.unicopia.mango_leaves": "Листья мангового дерева",
"block.unicopia.mango_sapling": "Саженец мангового дерева",
"block.unicopia.potted_mango_sapling": "Саженец манго в горшке",
"block.unicopia.pineapple": "Ананас",
"block.unicopia.clam_shell": "Раковина моллюска",
@ -286,12 +290,15 @@
"block.unicopia.green_apple_leaves": "Листья яблони Гренни Смит",
"block.unicopia.green_apple_sapling": "Саженец яблони Гренни Смит",
"block.unicopia.potted_green_apple_sapling": "Саженец яблони Гренни Смит в горшке",
"block.unicopia.green_apple_sprout": "Росток яблони Гренни Смит",
"block.unicopia.sweet_apple_leaves": "Листья яблони Яблочной Аллеи",
"block.unicopia.sweet_apple_sapling": "Саженец яблони Яблочной Аллеи",
"block.unicopia.potted_sweet_apple_sapling": "Саженец яблони Яблочной Аллеи в горшке",
"block.unicopia.sweet_apple_sprout": "Росток яблони Яблочной Аллеи",
"block.unicopia.sour_apple_leaves": "Листья кислой яблони",
"block.unicopia.sour_apple_sapling": "Саженец кислой яблони",
"block.unicopia.potted_sour_apple_sapling": "Саженец кислой яблони в горшке",
"block.unicopia.sour_apple_sprout": "Росток кислой яблони",
"block.unicopia.surface_chitin": "Поверхностный хитин",
@ -594,7 +601,7 @@
"unicopia.diet.not_edible": "Предмет не съедобен",
"unicopia.diet.base_multiplier": "Базовый множитель: %s%%",
"unicopia.diet.hunger.detailed": "Голода восстановлено: %s из %s (%s%%)",
"unicopia.diet.saturation.detailed": "Насыщения получено: %s (%s%%)",
"unicopia.diet.saturation.detailed": "Насыщения получено: %s из %s (%s%%)",
"unicopia.diet.hunger": "Коэффициент голода: %s%%",
"unicopia.diet.saturation": "Коэффициент насыщения: %s%%",
@ -617,6 +624,7 @@
"tag.unicopia.food_types.desserts": "Десерты",
"tag.unicopia.food_types.fruits_and_vegetables": "Фрукты и овощи",
"tag.unicopia.food_types.drinks": "Напитки",
"tag.minecraft.leaves": "Листья",
"tag.unicopia.food_types.forage_edible_filling": "Крупная растительная масса",
"tag.unicopia.food_types.forage_edible": "Растительная масса",
@ -1608,7 +1616,7 @@
"advancements.unicopia.juice.description": "Наконец-то нашлось применение всем этим яблокам",
"advancements.unicopia.toast.title": "Он хрустящий и вкусный!",
"advancements.unicopia.toast.description": "Сделать тостового компаньона",
"advancements.unicopia.burn_toast.title": "Тости НЕЕЕЕЕЕЕТ!",
"advancements.unicopia.burn_toast.title": "ТОСТИ НЕЕЕЕЕЕЕТ!",
"advancements.unicopia.burn_toast.description": "Поджарь Тости",
"advancements.unicopia.lucky.title": "Как на ТВ",
"advancements.unicopia.lucky.description": "Сделать несколько счастливых подков из картофеля фри",