mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-27 15:17:59 +01:00
Merge branch '1.20.1' into 1.20.2
This commit is contained in:
commit
22eaf9997c
75 changed files with 7696 additions and 2872 deletions
|
@ -31,7 +31,7 @@ public interface EquineContext {
|
|||
|
||||
static EquineContext of(ShapeContext context) {
|
||||
if (context == ShapeContext.absent()) {
|
||||
return Unicopia.SIDE.getPony().map(EquineContext.class::cast).orElse(ABSENT);
|
||||
return InteractionManager.getInstance().getClientPony().map(EquineContext.class::cast).orElse(ABSENT);
|
||||
}
|
||||
EquineContext result = context instanceof Container c ? c.get() : ABSENT;
|
||||
return result == null ? ABSENT : result;
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
package com.minelittlepony.unicopia;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||
import com.minelittlepony.unicopia.entity.player.dummy.DummyPlayerEntity;
|
||||
import com.minelittlepony.unicopia.particle.ParticleSpawner;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
|
@ -30,12 +32,16 @@ public class InteractionManager {
|
|||
|
||||
public static final int SCREEN_DISPELL_ABILITY = 0;
|
||||
|
||||
public static InteractionManager INSTANCE = new InteractionManager();
|
||||
private static InteractionManager INSTANCE = new InteractionManager();
|
||||
|
||||
public static InteractionManager instance() {
|
||||
public static InteractionManager getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public InteractionManager() {
|
||||
INSTANCE = this;
|
||||
}
|
||||
|
||||
public ParticleSpawner createBoundParticle(UUID id) {
|
||||
return ParticleSpawner.EMPTY;
|
||||
}
|
||||
|
@ -96,4 +102,12 @@ public class InteractionManager {
|
|||
public void addBlockBreakingParticles(BlockPos pos, Direction direction) {
|
||||
|
||||
}
|
||||
|
||||
public Optional<Pony> getClientPony() {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
public final Race getClientSpecies() {
|
||||
return getClientPony().map(Pony::getSpecies).orElse(Race.HUMAN);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,8 +6,6 @@ import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
|
|||
import net.minecraft.resource.ResourceType;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
|
@ -27,7 +25,6 @@ import com.minelittlepony.unicopia.diet.affliction.AfflictionType;
|
|||
import com.minelittlepony.unicopia.entity.damage.UDamageTypes;
|
||||
import com.minelittlepony.unicopia.entity.effect.UPotions;
|
||||
import com.minelittlepony.unicopia.entity.mob.UEntities;
|
||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||
import com.minelittlepony.unicopia.item.UItems;
|
||||
import com.minelittlepony.unicopia.item.enchantment.UEnchantments;
|
||||
import com.minelittlepony.unicopia.network.Channel;
|
||||
|
@ -43,8 +40,6 @@ public class Unicopia implements ModInitializer {
|
|||
public static final String DEFAULT_NAMESPACE = "unicopia";
|
||||
public static final Logger LOGGER = LogManager.getLogger();
|
||||
|
||||
public static SidedAccess SIDE = Optional::empty;
|
||||
|
||||
private static Config CONFIG;
|
||||
|
||||
public static Config getConfig() {
|
||||
|
@ -111,12 +106,4 @@ public class Unicopia implements ModInitializer {
|
|||
registry.registerReloadListener(SpellbookChapterLoader.INSTANCE);
|
||||
registry.registerReloadListener(new DietsLoader());
|
||||
}
|
||||
|
||||
public interface SidedAccess {
|
||||
Optional<Pony> getPony();
|
||||
|
||||
default Race.Composite getPlayerSpecies() {
|
||||
return getPony().map(Pony::getCompositeRace).orElse(Race.HUMAN.composite());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -83,6 +83,15 @@ public interface Ability<T extends Hit> {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether this ability has any special actions for the given activation type.
|
||||
* <p>
|
||||
* The default is to only respond to press-and-hold actions.
|
||||
*/
|
||||
default boolean acceptsQuickAction(Pony player, ActivationType type) {
|
||||
return type == ActivationType.NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called on the client to get any data required for the quick action.
|
||||
*
|
||||
|
|
|
@ -209,7 +209,7 @@ public class AbilityDispatcher implements Tickable, NbtSerialisable {
|
|||
warmup = 0;
|
||||
|
||||
if (data.isPresent()) {
|
||||
InteractionManager.instance().sendPlayerLookAngles(player.asEntity());
|
||||
InteractionManager.getInstance().sendPlayerLookAngles(player.asEntity());
|
||||
Channel.CLIENT_PLAYER_ABILITY.sendToServer(new MsgPlayerAbility<>(ability, data, ActivationType.NONE));
|
||||
} else {
|
||||
player.asEntity().playSound(USounds.GUI_ABILITY_FAIL, 1, 1);
|
||||
|
|
|
@ -18,6 +18,10 @@ public enum ActivationType {
|
|||
return ordinal();
|
||||
}
|
||||
|
||||
public boolean isResult() {
|
||||
return this != NONE;
|
||||
}
|
||||
|
||||
public static ActivationType of(int id) {
|
||||
return VALUES[MathHelper.clamp(id, 0, VALUES.length)];
|
||||
}
|
||||
|
|
|
@ -63,6 +63,11 @@ public class CarryAbility implements Ability<Hit> {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptsQuickAction(Pony player, ActivationType type) {
|
||||
return type == ActivationType.NONE || type == ActivationType.TAP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Pony iplayer, Hit data) {
|
||||
PlayerEntity player = iplayer.asEntity();
|
||||
|
|
|
@ -116,6 +116,11 @@ public class EarthPonyKickAbility implements Ability<Pos> {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptsQuickAction(Pony player, ActivationType type) {
|
||||
return type == ActivationType.NONE || type == ActivationType.TAP || type == ActivationType.DOUBLE_TAP;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Optional<Pos> prepare(Pony player) {
|
||||
|
|
|
@ -49,6 +49,11 @@ public class FlyingDashAbility implements Ability<Hit> {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptsQuickAction(Pony player, ActivationType type) {
|
||||
return type == ActivationType.NONE || type == ActivationType.TAP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Pony player, Hit data) {
|
||||
player.getPhysics().dashForward((float)player.asWorld().random.nextTriangular(2.5F, 0.3F));
|
||||
|
|
|
@ -54,6 +54,11 @@ public class PegasusRainboomAbility implements Ability<Hit> {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptsQuickAction(Pony player, ActivationType type) {
|
||||
return type == ActivationType.NONE || type == ActivationType.TAP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Pony player, Hit data) {
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ public class UnicornDispellAbility implements Ability<Pos> {
|
|||
}
|
||||
|
||||
if (type == ActivationType.TAP && player.isClient()) {
|
||||
InteractionManager.instance().openScreen(InteractionManager.SCREEN_DISPELL_ABILITY);
|
||||
InteractionManager.getInstance().openScreen(InteractionManager.SCREEN_DISPELL_ABILITY);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -72,6 +72,11 @@ public class UnicornDispellAbility implements Ability<Pos> {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptsQuickAction(Pony player, ActivationType type) {
|
||||
return type == ActivationType.NONE || (player.getSpecies() != Race.CHANGELING && type == ActivationType.TAP);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getCostEstimate(Pony player) {
|
||||
return getTarget(player)
|
||||
|
|
|
@ -56,6 +56,11 @@ public class UnicornProjectileAbility extends AbstractSpellCastingAbility {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptsQuickAction(Pony player, ActivationType type) {
|
||||
return type == ActivationType.NONE || type == ActivationType.DOUBLE_TAP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Pony player, Hit data) {
|
||||
TypedActionResult<CustomisedSpellType<?>> thrown = player.getCharms().getSpellInHand(true);
|
||||
|
|
|
@ -209,7 +209,7 @@ public class PlaceableSpell extends AbstractDelegatingSpell implements OrientedS
|
|||
castEntity.set(null);
|
||||
});
|
||||
|
||||
if (source.asEntity() instanceof CastSpellEntity spellcast) {
|
||||
if (source.asEntity() instanceof CastSpellEntity) {
|
||||
Ether.get(source.asWorld()).remove(this, source);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,7 +108,7 @@ public class RageAbilitySpell extends AbstractSpell {
|
|||
|
||||
if (source instanceof Pony pony) {
|
||||
if (pony.isClientPlayer() && pony.asEntity().getAttackCooldownProgress(0) == 0) {
|
||||
InteractionManager.instance().playLoopingSound(source.asEntity(), InteractionManager.SOUND_KIRIN_RAGE, source.asWorld().random.nextLong());
|
||||
InteractionManager.getInstance().playLoopingSound(source.asEntity(), InteractionManager.SOUND_KIRIN_RAGE, source.asWorld().random.nextLong());
|
||||
}
|
||||
Bar energyBar = pony.getMagicalReserves().getEnergy();
|
||||
var energy = Math.min(1.01F, 0.5F + (age / 1000F));
|
||||
|
|
|
@ -50,7 +50,7 @@ public class RainboomAbilitySpell extends AbstractSpell {
|
|||
|
||||
if (source.isClient()) {
|
||||
if (boundParticle == null) {
|
||||
boundParticle = InteractionManager.INSTANCE.createBoundParticle(getUuid());
|
||||
boundParticle = InteractionManager.getInstance().createBoundParticle(getUuid());
|
||||
}
|
||||
boundParticle.addParticle(new TargetBoundParticleEffect(UParticles.RAINBOOM_TRAIL, source.asEntity()), source.getOriginVector(), Vec3d.ZERO);
|
||||
|
||||
|
|
|
@ -1,64 +1,182 @@
|
|||
package com.minelittlepony.unicopia.block;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import com.minelittlepony.unicopia.EquineContext;
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.USounds;
|
||||
import com.minelittlepony.unicopia.item.FriendshipBraceletItem;
|
||||
import com.minelittlepony.unicopia.item.UItems;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockEntityProvider;
|
||||
import net.minecraft.block.BlockSetType;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.DoorBlock;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.block.enums.DoubleBlockHalf;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NbtCompound;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.state.StateManager;
|
||||
import net.minecraft.state.property.BooleanProperty;
|
||||
import net.minecraft.state.property.Properties;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.hit.BlockHitResult;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.random.Random;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.event.GameEvent;
|
||||
|
||||
public class CrystalDoorBlock extends DoorBlock {
|
||||
public class CrystalDoorBlock extends DoorBlock implements BlockEntityProvider {
|
||||
public static final BooleanProperty LOCKED = Properties.LOCKED;
|
||||
|
||||
public CrystalDoorBlock(Settings settings, BlockSetType blockSet) {
|
||||
super(settings, blockSet);
|
||||
setDefaultState(getDefaultState().with(LOCKED, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
|
||||
super.appendProperties(builder);
|
||||
builder.add(LOCKED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasRandomTicks(BlockState state) {
|
||||
return state.get(LOCKED);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) {
|
||||
super.randomTick(state, world, pos, random);
|
||||
if (!isLocked(world, pos)) {
|
||||
setOnGuard(state, world, pos, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void neighborUpdate(BlockState state, World world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) {
|
||||
boolean powered = world.isReceivingRedstonePower(pos) || world.isReceivingRedstonePower(pos.offset(state.get(HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN));
|
||||
if (!getDefaultState().isOf(sourceBlock) && powered != state.get(POWERED)) {
|
||||
if (powered) {
|
||||
state = state.cycle(OPEN);
|
||||
playOpenCloseSound(null, world, pos, state.get(OPEN));
|
||||
world.emitGameEvent(null, state.get(OPEN) ? GameEvent.BLOCK_OPEN : GameEvent.BLOCK_CLOSE, pos);
|
||||
}
|
||||
if (!state.get(LOCKED)) {
|
||||
boolean powered = world.isReceivingRedstonePower(pos) || world.isReceivingRedstonePower(pos.offset(state.get(HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN));
|
||||
if (!getDefaultState().isOf(sourceBlock) && powered != state.get(POWERED)) {
|
||||
if (powered) {
|
||||
state = state.cycle(OPEN);
|
||||
playOpenCloseSound(null, world, pos, state.get(OPEN));
|
||||
world.emitGameEvent(null, state.get(OPEN) ? GameEvent.BLOCK_OPEN : GameEvent.BLOCK_CLOSE, pos);
|
||||
}
|
||||
|
||||
world.setBlockState(pos, state.with(POWERED, powered), Block.NOTIFY_LISTENERS);
|
||||
world.setBlockState(pos, state.with(POWERED, powered), Block.NOTIFY_LISTENERS);
|
||||
}
|
||||
}
|
||||
|
||||
if (state.get(HALF) == DoubleBlockHalf.LOWER && sourcePos.getY() == pos.getY() - 1) {
|
||||
if (!canPlaceAt(state, world, pos) && world.isAir(sourcePos)) {
|
||||
world.setBlockState(sourcePos, Blocks.DIRT.getDefaultState());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
|
||||
if (!EquineContext.of(player).getCompositeRace().any(Race::canCast)) {
|
||||
|
||||
if (!player.getStackInHand(hand).isOf(UItems.MEADOWBROOKS_STAFF)) {
|
||||
if (!shouldProvideAccess(world, pos, player)) {
|
||||
if (isLocked(world, pos) || !player.getStackInHand(hand).isOf(UItems.MEADOWBROOKS_STAFF)) {
|
||||
playOpenCloseSound(player, world, pos, false);
|
||||
return ActionResult.FAIL;
|
||||
setOnGuard(state, world, pos, true);
|
||||
return ActionResult.CONSUME;
|
||||
} else {
|
||||
world.playSound(player, pos, USounds.ENTITY_CRYSTAL_SHARDS_AMBIENT, SoundCategory.BLOCKS, 1, world.getRandom().nextFloat() * 0.1F + 0.9F);
|
||||
}
|
||||
} else if (!isLocked(world, pos)) {
|
||||
ItemStack heldStack = player.getStackInHand(hand);
|
||||
if (heldStack.isOf(UItems.FRIENDSHIP_BRACELET)) {
|
||||
@Nullable
|
||||
UUID signator = FriendshipBraceletItem.getSignatorId(heldStack);
|
||||
if (signator != null) {
|
||||
BlockEntityUtil.getOrCreateBlockEntity(world, state.get(HALF) == DoubleBlockHalf.LOWER ? pos.up() : pos, UBlockEntities.CRYSTAL_DOOR).ifPresent(data -> {
|
||||
data.setSignator(signator);
|
||||
setOnGuard(state, world, pos, true);
|
||||
world.playSound(player, pos, USounds.ENTITY_CRYSTAL_SHARDS_AMBIENT, SoundCategory.BLOCKS, 1, world.getRandom().nextFloat() * 0.1F + 0.9F);
|
||||
});
|
||||
return ActionResult.SUCCESS;
|
||||
}
|
||||
} else {
|
||||
setOnGuard(state, world, pos, false);
|
||||
}
|
||||
}
|
||||
return super.onUse(state, world, pos, player, hand, hit);
|
||||
}
|
||||
|
||||
private void setOnGuard(BlockState state, World world, BlockPos pos, boolean locked) {
|
||||
world.setBlockState(pos, state.with(LOCKED, locked));
|
||||
pos = pos.offset(state.get(HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN);
|
||||
state = world.getBlockState(pos);
|
||||
if (state.isOf(this)) {
|
||||
world.setBlockState(pos, state.with(LOCKED, locked));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean shouldProvideAccess(World world, BlockPos pos, PlayerEntity player) {
|
||||
UUID signator = getSignator(world, pos);
|
||||
if (signator != null) {
|
||||
return signator.equals(player.getUuid()) || FriendshipBraceletItem.isComrade(signator, player);
|
||||
}
|
||||
return EquineContext.of(player).getCompositeRace().any(Race::canCast);
|
||||
}
|
||||
|
||||
private boolean isLocked(World world, BlockPos pos) {
|
||||
return getSignator(world, pos) != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private UUID getSignator(World world, BlockPos pos) {
|
||||
pos = world.getBlockState(pos).get(HALF) == DoubleBlockHalf.LOWER ? pos.up() : pos;
|
||||
var d = world.getBlockEntity(pos, UBlockEntities.CRYSTAL_DOOR);
|
||||
return d.map(data -> data.signator).orElse(null);
|
||||
}
|
||||
|
||||
private void playOpenCloseSound(@Nullable Entity entity, World world, BlockPos pos, boolean open) {
|
||||
world.playSound(entity, pos, open ? getBlockSetType().doorOpen() : getBlockSetType().doorClose(), SoundCategory.BLOCKS, 1, world.getRandom().nextFloat() * 0.1f + 0.9f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
|
||||
return new TileData(pos, state);
|
||||
}
|
||||
|
||||
public static class TileData extends BlockEntity {
|
||||
@Nullable
|
||||
private UUID signator;
|
||||
|
||||
public TileData(BlockPos pos, BlockState state) {
|
||||
super(UBlockEntities.CRYSTAL_DOOR, pos, state);
|
||||
}
|
||||
|
||||
public void setSignator(UUID signator) {
|
||||
this.signator = signator;
|
||||
markDirty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readNbt(NbtCompound nbt) {
|
||||
signator = nbt.containsUuid("signator") ? nbt.getUuid("signator") : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeNbt(NbtCompound nbt) {
|
||||
if (signator != null) {
|
||||
nbt.putUuid("signator", signator);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ public interface UBlockEntities {
|
|||
BlockEntityType<ChestBlockEntity> CLOUD_CHEST = create("cloud_chest", BlockEntityType.Builder.create(CloudChestBlock.TileData::new, UBlocks.CLOUD_CHEST));
|
||||
BlockEntityType<HiveBlock.TileData> HIVE_STORAGE = create("hive_storage", BlockEntityType.Builder.create(HiveBlock.TileData::new, UBlocks.HIVE));
|
||||
BlockEntityType<ItemJarBlock.TileData> ITEM_JAR = create("item_jar", BlockEntityType.Builder.create(ItemJarBlock.TileData::new, UBlocks.JAR));
|
||||
BlockEntityType<CrystalDoorBlock.TileData> CRYSTAL_DOOR = create("crystal_door", BlockEntityType.Builder.create(CrystalDoorBlock.TileData::new, UBlocks.CRYSTAL_DOOR));
|
||||
|
||||
static <T extends BlockEntity> BlockEntityType<T> create(String id, Builder<T> builder) {
|
||||
return Registry.register(Registries.BLOCK_ENTITY_TYPE, id, builder.build(null));
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.minelittlepony.unicopia.client;
|
|||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
|
@ -168,4 +169,9 @@ public class ClientInteractionManager extends InteractionManager {
|
|||
public void addBlockBreakingParticles(BlockPos pos, Direction direction) {
|
||||
client.particleManager.addBlockBreakingParticles(pos, direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Pony> getClientPony() {
|
||||
return Optional.ofNullable(client.player).map(Pony::of);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,10 @@ package com.minelittlepony.unicopia.client;
|
|||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
|
@ -34,12 +36,12 @@ public class KeyBindingsHandler {
|
|||
private final Map<Binding, AbilitySlot> keys = new HashMap<>();
|
||||
private final Map<AbilitySlot, Binding> reverse = new HashMap<>();
|
||||
|
||||
private final Binding pageDown = register(GLFW.GLFW_KEY_PAGE_DOWN, "hud_page_dn");
|
||||
private final Binding pageUp = register(GLFW.GLFW_KEY_PAGE_UP, "hud_page_up");
|
||||
private final Binding pageDown = new Binding(create(GLFW.GLFW_KEY_PAGE_DOWN, "hud_page_dn"));
|
||||
private final Binding pageUp = new Binding(create(GLFW.GLFW_KEY_PAGE_UP, "hud_page_up"));
|
||||
|
||||
private final Binding singleTapModifier = register(InputUtil.UNKNOWN_KEY.getCode(), "ability_modifier_tap");
|
||||
private final Binding doubleTapModifier = register(InputUtil.UNKNOWN_KEY.getCode(), "ability_modifier_double_tap");
|
||||
private final Binding tripleTapModifier = register(InputUtil.UNKNOWN_KEY.getCode(), "ability_modifier_triple_tap");
|
||||
private final KeyBinding singleTapModifier = createSticky(InputUtil.UNKNOWN_KEY.getCode(), "ability_modifier_tap");
|
||||
private final KeyBinding doubleTapModifier = createSticky(InputUtil.UNKNOWN_KEY.getCode(), "ability_modifier_double_tap");
|
||||
private final KeyBinding tripleTapModifier = createSticky(InputUtil.UNKNOWN_KEY.getCode(), "ability_modifier_triple_tap");
|
||||
|
||||
private final Set<KeyBinding> pressed = new HashSet<>();
|
||||
|
||||
|
@ -57,14 +59,34 @@ public class KeyBindingsHandler {
|
|||
return Unicopia.getConfig().toggleAbilityKeys.get();
|
||||
}
|
||||
|
||||
public ActivationType getForcedActivationType() {
|
||||
if (singleTapModifier.isPressed()) {
|
||||
return ActivationType.TAP;
|
||||
}
|
||||
|
||||
if (doubleTapModifier.isPressed()) {
|
||||
return ActivationType.DOUBLE_TAP;
|
||||
}
|
||||
|
||||
if (tripleTapModifier.isPressed()) {
|
||||
return ActivationType.TRIPLE_TAP;
|
||||
}
|
||||
|
||||
return ActivationType.NONE;
|
||||
}
|
||||
|
||||
public void addKeybind(int code, AbilitySlot slot) {
|
||||
Binding binding = new Binding(KeyBindingHelper.registerKeyBinding(new StickyKeyBinding("key.unicopia." + slot.name().toLowerCase(), code, KEY_CATEGORY, this::isToggleMode)));
|
||||
Binding binding = new Binding(createSticky(code, slot.name().toLowerCase(Locale.ROOT)));
|
||||
reverse.put(slot, binding);
|
||||
keys.put(binding, slot);
|
||||
}
|
||||
|
||||
Binding register(int code, String name) {
|
||||
return new Binding(KeyBindingHelper.registerKeyBinding(new KeyBinding("key.unicopia." + name, code, KEY_CATEGORY)));
|
||||
KeyBinding create(int code, String name) {
|
||||
return KeyBindingHelper.registerKeyBinding(new KeyBinding("key.unicopia." + name, code, KEY_CATEGORY));
|
||||
}
|
||||
|
||||
KeyBinding createSticky(int code, String name) {
|
||||
return KeyBindingHelper.registerKeyBinding(new StickyKeyBinding("key.unicopia." + name, code, KEY_CATEGORY, this::isToggleMode));
|
||||
}
|
||||
|
||||
public void tick(MinecraftClient client) {
|
||||
|
@ -102,7 +124,7 @@ public class KeyBindingsHandler {
|
|||
}
|
||||
} else {
|
||||
ActivationType type = i.getType();
|
||||
if (type != ActivationType.NONE) {
|
||||
if (type.isResult()) {
|
||||
abilities.clear(slot, type, page);
|
||||
}
|
||||
}
|
||||
|
@ -124,7 +146,7 @@ public class KeyBindingsHandler {
|
|||
|
||||
private long nextPhaseTime;
|
||||
|
||||
private ActivationType type = ActivationType.NONE;
|
||||
private final AtomicReference<ActivationType> type = new AtomicReference<>(ActivationType.NONE);
|
||||
|
||||
Binding(KeyBinding binding) {
|
||||
this.binding = binding;
|
||||
|
@ -145,40 +167,25 @@ public class KeyBindingsHandler {
|
|||
|
||||
if (state == PressedState.RELEASED && now < nextPhaseTime + 10) {
|
||||
nextPhaseTime = now + 200;
|
||||
type = type.getNext();
|
||||
type.set(type.get().getNext());
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
public ActivationType getType() {
|
||||
if (binding.isPressed() && binding instanceof StickyKeyBinding) {
|
||||
if (singleTapModifier.binding.isPressed()) {
|
||||
if (binding.isPressed()) {
|
||||
ActivationType t = getForcedActivationType();
|
||||
if (t.isResult()) {
|
||||
KeyBinding.untoggleStickyKeys();
|
||||
return ActivationType.TAP;
|
||||
}
|
||||
|
||||
if (doubleTapModifier.binding.isPressed()) {
|
||||
KeyBinding.untoggleStickyKeys();
|
||||
return ActivationType.DOUBLE_TAP;
|
||||
}
|
||||
|
||||
if (tripleTapModifier.binding.isPressed()) {
|
||||
KeyBinding.untoggleStickyKeys();
|
||||
return ActivationType.TRIPLE_TAP;
|
||||
}
|
||||
|
||||
if (isToggleMode()) {
|
||||
return ActivationType.NONE;
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
||||
long now = System.currentTimeMillis();
|
||||
if (type != ActivationType.NONE && now > nextPhaseTime - 70) {
|
||||
ActivationType t = type;
|
||||
type = ActivationType.NONE;
|
||||
return t;
|
||||
if (!isToggleMode() && System.currentTimeMillis() > nextPhaseTime - 70) {
|
||||
return type.getAndSet(ActivationType.NONE);
|
||||
}
|
||||
|
||||
return ActivationType.NONE;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ import org.joml.Vector3f;
|
|||
import com.minelittlepony.common.client.gui.element.Button;
|
||||
import com.minelittlepony.common.event.ScreenInitCallback;
|
||||
import com.minelittlepony.common.event.ScreenInitCallback.ButtonList;
|
||||
import com.minelittlepony.unicopia.InteractionManager;
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.Unicopia;
|
||||
import com.minelittlepony.unicopia.client.gui.LanSettingsScreen;
|
||||
|
@ -51,6 +50,11 @@ public class UnicopiaClient implements ClientModInitializer {
|
|||
return instance;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Pony getClientPony() {
|
||||
return Pony.of(MinecraftClient.getInstance().player);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Float originalRainGradient;
|
||||
private final Lerp rainGradient = new Lerp(0);
|
||||
|
@ -61,18 +65,23 @@ public class UnicopiaClient implements ClientModInitializer {
|
|||
private ZapAppleStageStore.Stage zapAppleStage = ZapAppleStageStore.Stage.HIBERNATING;
|
||||
|
||||
public static Optional<PlayerCamera> getCamera() {
|
||||
return Optional.of(getNullableCamera());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PlayerCamera getNullableCamera() {
|
||||
PlayerEntity player = MinecraftClient.getInstance().player;
|
||||
|
||||
if (player != null && MinecraftClient.getInstance().cameraEntity == player) {
|
||||
return Optional.of(Pony.of(player).getCamera());
|
||||
return Pony.of(player).getCamera();
|
||||
}
|
||||
|
||||
return Optional.empty();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public static Vec3d getAdjustedSoundPosition(Vec3d pos) {
|
||||
PlayerCamera cam = getCamera().orElse(null);
|
||||
PlayerCamera cam = getNullableCamera();
|
||||
if (cam == null) {
|
||||
return pos;
|
||||
}
|
||||
|
@ -124,7 +133,7 @@ public class UnicopiaClient implements ClientModInitializer {
|
|||
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
InteractionManager.INSTANCE = new ClientInteractionManager();
|
||||
new ClientInteractionManager();
|
||||
new ClientNetworkHandlerImpl();
|
||||
|
||||
KeyBindingsHandler.bootstrap();
|
||||
|
@ -140,8 +149,6 @@ public class UnicopiaClient implements ClientModInitializer {
|
|||
|
||||
ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(ViewportShader.INSTANCE);
|
||||
ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(SpellEffectsRenderDispatcher.INSTANCE);
|
||||
|
||||
Unicopia.SIDE = () -> Optional.ofNullable(MinecraftClient.getInstance().player).map(Pony::of);
|
||||
}
|
||||
|
||||
private void onTick(MinecraftClient client) {
|
||||
|
|
|
@ -1,14 +1,20 @@
|
|||
package com.minelittlepony.unicopia.client.gui;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import com.minelittlepony.unicopia.Unicopia;
|
||||
import com.minelittlepony.unicopia.ability.Ability;
|
||||
import com.minelittlepony.unicopia.ability.AbilityDispatcher;
|
||||
import com.minelittlepony.unicopia.ability.AbilitySlot;
|
||||
import com.minelittlepony.unicopia.ability.ActivationType;
|
||||
import com.minelittlepony.unicopia.client.KeyBindingsHandler;
|
||||
import com.minelittlepony.unicopia.client.UnicopiaClient;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.text.MutableText;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
|
||||
class Slot {
|
||||
|
@ -130,11 +136,13 @@ class Slot {
|
|||
|
||||
void renderLabel(DrawContext context, AbilityDispatcher abilities, float tickDelta) {
|
||||
|
||||
if (abilities.getStat(aSlot).getAbility(Unicopia.getConfig().hudPage.get()).isEmpty()) {
|
||||
Optional<Ability<?>> ability = abilities.getStat(aSlot).getAbility(Unicopia.getConfig().hudPage.get());
|
||||
|
||||
if (ability.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Text label = KeyBindingsHandler.INSTANCE.getBinding(aSlot).getLabel();
|
||||
MutableText label = KeyBindingsHandler.INSTANCE.getBinding(aSlot).getLabel().copy().formatted(Formatting.BOLD);
|
||||
|
||||
MatrixStack matrices = context.getMatrices();
|
||||
matrices.push();
|
||||
|
@ -150,6 +158,14 @@ class Slot {
|
|||
matrices.translate(x, getY() + labelY, 0);
|
||||
matrices.scale(0.5F, 0.5F, 0.5F);
|
||||
|
||||
ActivationType activation = KeyBindingsHandler.INSTANCE.getForcedActivationType();
|
||||
if (activation.isResult()) {
|
||||
label = label.append("+T" + activation.getTapCount());
|
||||
if (!ability.get().acceptsQuickAction(UnicopiaClient.getClientPony(), activation)) {
|
||||
label = label.formatted(Formatting.RED);
|
||||
}
|
||||
}
|
||||
|
||||
context.drawText(uHud.font, label, 0, 0, 0xFFFFFF, true);
|
||||
|
||||
matrices.pop();
|
||||
|
|
|
@ -218,7 +218,7 @@ public class WorldRenderDelegate {
|
|||
}
|
||||
|
||||
private void flipAngles(Entity entity) {
|
||||
if (entity instanceof PlayerEntity player) {
|
||||
if (entity instanceof PlayerEntity) {
|
||||
entity.prevYaw *= -1;
|
||||
entity.setYaw(entity.getYaw() * -1);
|
||||
|
||||
|
@ -226,9 +226,7 @@ public class WorldRenderDelegate {
|
|||
entity.setPitch(entity.getPitch() * -1);
|
||||
}
|
||||
|
||||
if (entity instanceof LivingEntity) {
|
||||
LivingEntity living = (LivingEntity)entity;
|
||||
|
||||
if (entity instanceof LivingEntity living) {
|
||||
living.bodyYaw = -living.bodyYaw;
|
||||
living.prevBodyYaw = -living.prevBodyYaw;
|
||||
living.headYaw = -living.headYaw;
|
||||
|
|
|
@ -104,7 +104,7 @@ public class DisguiseCommand {
|
|||
}
|
||||
|
||||
static Entity loadPlayer(ServerCommandSource source, String username) {
|
||||
return InteractionManager.instance().createPlayer(source.getWorld(), new GameProfile(null, username));
|
||||
return InteractionManager.getInstance().createPlayer(source.getWorld(), new GameProfile(null, username));
|
||||
}
|
||||
|
||||
static int reveal(ServerCommandSource source, PlayerEntity player) {
|
||||
|
|
|
@ -38,7 +38,7 @@ public class MagicalShapedEmiRecipe extends EmiCraftingRecipe {
|
|||
ItemStack[] stacks = ingredient.getMatchingStacks();
|
||||
|
||||
for (int i = 0; i < stacks.length; i++) {
|
||||
if (stacks[i].getItem() instanceof EnchantableItem e) {
|
||||
if (stacks[i].getItem() instanceof EnchantableItem) {
|
||||
stacks = Arrays.copyOf(stacks, stacks.length);
|
||||
stacks[i] = EnchantableItem.enchant(stacks[i].copy(), spellEffect.type());
|
||||
return EmiIngredient.of(Arrays.stream(stacks).map(EmiStack::of).toList());
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.minelittlepony.unicopia.datagen.providers.loot.UBlockAdditionsLootTab
|
|||
import com.minelittlepony.unicopia.datagen.providers.loot.UBlockLootTableProvider;
|
||||
import com.minelittlepony.unicopia.datagen.providers.loot.UChestAdditionsLootTableProvider;
|
||||
import com.minelittlepony.unicopia.datagen.providers.loot.UChestLootTableProvider;
|
||||
import com.minelittlepony.unicopia.datagen.providers.loot.UEntityAdditionsLootTableProvider;
|
||||
import com.minelittlepony.unicopia.datagen.providers.loot.UEntityLootTableProvider;
|
||||
import com.minelittlepony.unicopia.datagen.providers.recipe.URecipeProvider;
|
||||
import com.minelittlepony.unicopia.datagen.providers.tag.UBlockTagProvider;
|
||||
|
@ -58,6 +59,7 @@ public class Datagen implements DataGeneratorEntrypoint {
|
|||
pack.addProvider(URecipeProvider::new);
|
||||
pack.addProvider(UBlockLootTableProvider::new);
|
||||
pack.addProvider(UEntityLootTableProvider::new);
|
||||
pack.addProvider(UEntityAdditionsLootTableProvider::new);
|
||||
pack.addProvider(UChestLootTableProvider::new);
|
||||
pack.addProvider(UBlockAdditionsLootTableProvider::new);
|
||||
pack.addProvider(UChestAdditionsLootTableProvider::new);
|
||||
|
|
|
@ -27,6 +27,10 @@ public interface UBlockFamilies {
|
|||
.slab(UBlocks.CLOUD_SLAB).stairs(UBlocks.CLOUD_STAIRS)
|
||||
.group("cloud").unlockCriterionName("has_cloud_lump")
|
||||
.build();
|
||||
BlockFamily ETCHED_CLOUD = new BlockFamily.Builder(UBlocks.ETCHED_CLOUD)
|
||||
.slab(UBlocks.ETCHED_CLOUD_SLAB).stairs(UBlocks.ETCHED_CLOUD_STAIRS)
|
||||
.group("etched_cloud").unlockCriterionName("has_cloud_lump")
|
||||
.build();
|
||||
BlockFamily CLOUD_PLANKS = new BlockFamily.Builder(UBlocks.CLOUD_PLANKS)
|
||||
.slab(UBlocks.CLOUD_PLANK_SLAB).stairs(UBlocks.CLOUD_PLANK_STAIRS)
|
||||
.group("cloud").unlockCriterionName("has_cloud")
|
||||
|
|
|
@ -34,6 +34,7 @@ import net.minecraft.data.client.Model;
|
|||
import net.minecraft.data.client.ModelIds;
|
||||
import net.minecraft.data.client.Models;
|
||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||
import net.minecraft.data.client.TextureKey;
|
||||
import net.minecraft.data.client.TextureMap;
|
||||
import net.minecraft.data.client.TexturedModel;
|
||||
import net.minecraft.data.client.VariantSettings;
|
||||
|
@ -89,7 +90,8 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
|||
registerAll((g, block) -> g.registerParentedItemModel(block, ModelIds.getBlockModelId(block)), UBlocks.SHAPING_BENCH, UBlocks.SURFACE_CHITIN);
|
||||
registerAll(UBlockStateModelGenerator::registerSimpleState, UBlocks.SHAPING_BENCH, UBlocks.BANANAS);
|
||||
// doors
|
||||
registerAll(UBlockStateModelGenerator::registerStableDoor, UBlocks.STABLE_DOOR, UBlocks.DARK_OAK_DOOR, UBlocks.CRYSTAL_DOOR, UBlocks.CLOUD_DOOR);
|
||||
registerAll(UBlockStateModelGenerator::registerStableDoor, UBlocks.STABLE_DOOR, UBlocks.DARK_OAK_DOOR, UBlocks.CLOUD_DOOR);
|
||||
registerLockingDoor(UBlocks.CRYSTAL_DOOR);
|
||||
|
||||
// cloud blocks
|
||||
createCustomTexturePool(UBlocks.CLOUD, TexturedModel.CUBE_ALL).same(UBlocks.UNSTABLE_CLOUD).slab(UBlocks.CLOUD_SLAB).stairs(UBlocks.CLOUD_STAIRS);
|
||||
|
@ -347,23 +349,37 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
|||
}
|
||||
|
||||
public void registerStableDoor(Block door) {
|
||||
TextureMap topTextures = TextureMap.topBottom(door);
|
||||
TextureMap bottomTextures = topTextures.copyAndAdd(TOP, topTextures.getTexture(BOTTOM));
|
||||
registerItemModel(door.asItem());
|
||||
var variants = BlockStateVariantMap.create(Properties.HORIZONTAL_FACING, Properties.DOUBLE_BLOCK_HALF, Properties.DOOR_HINGE, Properties.OPEN);
|
||||
fillStableDoorVariantMap(variants, DoubleBlockHalf.LOWER,
|
||||
BlockModels.DOOR_LEFT.upload(door, "_bottom_left", bottomTextures, modelCollector),
|
||||
BlockModels.DOOR_RIGHT.upload(door, "_bottom_right", bottomTextures, modelCollector)
|
||||
);
|
||||
fillStableDoorVariantMap(variants, DoubleBlockHalf.UPPER,
|
||||
BlockModels.DOOR_LEFT.upload(door, "_top_left", topTextures, modelCollector),
|
||||
BlockModels.DOOR_RIGHT.upload(door, "_top_right", topTextures, modelCollector)
|
||||
);
|
||||
registerItemModel(door.asItem());
|
||||
buildDoorStateModels(door, "", variants::register);
|
||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(door).coordinate(variants));
|
||||
}
|
||||
|
||||
public static void fillStableDoorVariantMap(
|
||||
BlockStateVariantMap.QuadrupleProperty<Direction, DoubleBlockHalf, DoorHinge, Boolean> variantMap,
|
||||
public void registerLockingDoor(Block door) {
|
||||
var variants = BlockStateVariantMap.create(Properties.HORIZONTAL_FACING, Properties.DOUBLE_BLOCK_HALF, Properties.DOOR_HINGE, Properties.OPEN, Properties.LOCKED);
|
||||
registerItemModel(door.asItem());
|
||||
buildDoorStateModels(door, "", (facing, half, hinge, open, map) -> variants.register(facing, half, hinge, open, false, map));
|
||||
buildDoorStateModels(door, "_locked", (facing, half, hinge, open, map) -> variants.register(facing, half, hinge, open, true, map));
|
||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(door).coordinate(variants));
|
||||
}
|
||||
|
||||
private void buildDoorStateModels(Block door, String suffex, DoorStateConsumer variants) {
|
||||
TextureMap topTextures = new TextureMap()
|
||||
.put(TextureKey.TOP, TextureMap.getSubId(door, "_top" + suffex))
|
||||
.put(TextureKey.BOTTOM, TextureMap.getSubId(door, "_bottom" + suffex));
|
||||
TextureMap bottomTextures = topTextures.copyAndAdd(TOP, topTextures.getTexture(BOTTOM));
|
||||
fillStableDoorVariantMap(variants, DoubleBlockHalf.LOWER,
|
||||
BlockModels.DOOR_LEFT.upload(door, "_bottom_left" + suffex, bottomTextures, modelCollector),
|
||||
BlockModels.DOOR_RIGHT.upload(door, "_bottom_right" + suffex, bottomTextures, modelCollector)
|
||||
);
|
||||
fillStableDoorVariantMap(variants, DoubleBlockHalf.UPPER,
|
||||
BlockModels.DOOR_LEFT.upload(door, "_top_left" + suffex, topTextures, modelCollector),
|
||||
BlockModels.DOOR_RIGHT.upload(door, "_top_right" + suffex, topTextures, modelCollector)
|
||||
);
|
||||
}
|
||||
|
||||
private static void fillStableDoorVariantMap(
|
||||
DoorStateConsumer variantMap,
|
||||
DoubleBlockHalf targetHalf, Identifier leftModelId, Identifier rightModelId) {
|
||||
fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.LEFT, false, R0, leftModelId);
|
||||
fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.RIGHT, false, R0, rightModelId);
|
||||
|
@ -373,7 +389,7 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
|||
}
|
||||
|
||||
public static void fillStableDoorVariantMap(
|
||||
BlockStateVariantMap.QuadrupleProperty<Direction, DoubleBlockHalf, DoorHinge, Boolean> variantMap,
|
||||
DoorStateConsumer variantMap,
|
||||
DoubleBlockHalf targetHalf,
|
||||
DoorHinge hinge, boolean open, Rotation rotation,
|
||||
Identifier modelId) {
|
||||
|
@ -386,6 +402,10 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
|||
}
|
||||
}
|
||||
|
||||
interface DoorStateConsumer {
|
||||
void register(Direction direction, DoubleBlockHalf half, DoorHinge hinge, boolean open, BlockStateVariant variant);
|
||||
}
|
||||
|
||||
public void registerPillar(Block pillar) {
|
||||
TextureMap textures = new TextureMap()
|
||||
.put(SIDE, ModelIds.getBlockSubModelId(pillar, "_side"))
|
||||
|
|
|
@ -63,10 +63,10 @@ public class UModelProvider extends FabricModelProvider {
|
|||
UItems.BANANA, UItems.BOTCHED_GEM, UItems.BOWL_OF_NUTS, UItems.BROKEN_SUNGLASSES, UItems.BURNED_JUICE, UItems.BURNED_TOAST,
|
||||
UItems.CARAPACE, UItems.CLAM_SHELL, UItems.COOKED_ZAP_APPLE, UItems.CHOCOLATE_OATMEAL_COOKIE,
|
||||
UItems.CLOUD_LUMP, UItems.CRISPY_HAY_FRIES, UItems.CRYSTAL_HEART, UItems.CRYSTAL_SHARD,
|
||||
UItems.COOKED_TROPICAL_FISH, UItems.COOKED_PUFFERFISH, UItems.FRIED_AXOLOTL,
|
||||
UItems.COOKED_TROPICAL_FISH, UItems.COOKED_PUFFERFISH, UItems.COOKED_FROG_LEGS,
|
||||
UItems.DAFFODIL_DAISY_SANDWICH, UItems.DRAGON_BREATH_SCROLL,
|
||||
UItems.EMPTY_JAR,
|
||||
UItems.FRIENDSHIP_BRACELET,
|
||||
UItems.FRIENDSHIP_BRACELET, UItems.FRIED_AXOLOTL, UItems.FROG_LEGS,
|
||||
UItems.GIANT_BALLOON, UItems.GOLDEN_FEATHER, UItems.GOLDEN_OAK_SEEDS, UItems.GOLDEN_WING, UItems.GREEN_APPLE_SEEDS, UItems.GREEN_APPLE, UItems.GROGARS_BELL,
|
||||
UItems.GRYPHON_FEATHER, UItems.GREEN_FRIED_EGG,
|
||||
UItems.HAY_BURGER, UItems.HAY_FRIES, UItems.HORSE_SHOE_FRIES,
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
package com.minelittlepony.unicopia.datagen.providers.loot;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
import com.minelittlepony.unicopia.item.UItems;
|
||||
|
||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||
import net.fabricmc.fabric.api.datagen.v1.provider.SimpleFabricLootTableProvider;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.loot.LootPool;
|
||||
import net.minecraft.loot.LootTable;
|
||||
import net.minecraft.loot.LootTable.Builder;
|
||||
import net.minecraft.loot.context.LootContextTypes;
|
||||
import net.minecraft.loot.entry.ItemEntry;
|
||||
import net.minecraft.loot.function.LootingEnchantLootFunction;
|
||||
import net.minecraft.loot.provider.number.ConstantLootNumberProvider;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class UEntityAdditionsLootTableProvider extends SimpleFabricLootTableProvider {
|
||||
public UEntityAdditionsLootTableProvider(FabricDataOutput output) {
|
||||
super(output, LootContextTypes.ENTITY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return super.getName() + " Additions";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept(BiConsumer<Identifier, Builder> exporter) {
|
||||
generate((type, builder) -> exporter.accept(new Identifier("unicopiamc", EntityType.getId(type).withPrefixedPath("entities/").getPath()), builder));
|
||||
}
|
||||
|
||||
protected void generate(BiConsumer<EntityType<?>, Builder> exporter) {
|
||||
exporter.accept(EntityType.FROG, LootTable.builder()
|
||||
.pool(LootPool.builder()
|
||||
.rolls(ConstantLootNumberProvider.create(1))
|
||||
.with(ItemEntry.builder(UItems.FROG_LEGS)
|
||||
.apply(LootingEnchantLootFunction.builder(ConstantLootNumberProvider.create(2))))));
|
||||
}
|
||||
}
|
|
@ -415,6 +415,7 @@ public class URecipeProvider extends FabricRecipeProvider {
|
|||
offerSmelting(exporter, List.of(Items.TROPICAL_FISH), RecipeCategory.FOOD, UItems.COOKED_TROPICAL_FISH, 1.2F, 230, "fish");
|
||||
offerSmelting(exporter, List.of(Items.PUFFERFISH), RecipeCategory.FOOD, UItems.COOKED_PUFFERFISH, 1.2F, 230, "fish");
|
||||
offerSmelting(exporter, List.of(Items.AXOLOTL_BUCKET), RecipeCategory.FOOD, UItems.FRIED_AXOLOTL, 2.2F, 230, "fried_axolotl");
|
||||
offerSmelting(exporter, List.of(UItems.FROG_LEGS), RecipeCategory.FOOD, UItems.COOKED_FROG_LEGS, 2.2F, 10, "frog_legs");
|
||||
offerSmelting(exporter, List.of(UBlocks.MYSTERIOUS_EGG.asItem()), RecipeCategory.FOOD, UItems.GREEN_FRIED_EGG, 3.8F, 630, "fried_egg");
|
||||
|
||||
ShapelessRecipeJsonBuilder.create(RecipeCategory.FOOD, UItems.ZAP_APPLE_JAM_JAR)
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
package com.minelittlepony.unicopia.datagen.providers.tag;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
|
@ -9,14 +12,18 @@ import com.minelittlepony.unicopia.UTags;
|
|||
import com.minelittlepony.unicopia.block.UBlocks;
|
||||
import com.minelittlepony.unicopia.datagen.Datagen;
|
||||
import com.minelittlepony.unicopia.datagen.ItemFamilies;
|
||||
import com.minelittlepony.unicopia.datagen.UBlockFamilies;
|
||||
import com.minelittlepony.unicopia.item.BedsheetsItem;
|
||||
import com.minelittlepony.unicopia.item.UItems;
|
||||
import com.minelittlepony.unicopia.server.world.UTreeGen;
|
||||
|
||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
|
||||
import net.fabricmc.fabric.api.tag.convention.v1.ConventionalItemTags;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.data.family.BlockFamily;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemConvertible;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.registry.Registries;
|
||||
import net.minecraft.registry.RegistryKeys;
|
||||
|
@ -138,6 +145,7 @@ public class UItemTagProvider extends FabricTagProvider.ItemTagProvider {
|
|||
.forceAddTag(UConventionalTags.Items.CORALS).forceAddTag(UConventionalTags.Items.CORAL_FANS);
|
||||
|
||||
exportForagingTags();
|
||||
exportCreativeTabs();
|
||||
exportFarmersDelightItems();
|
||||
}
|
||||
|
||||
|
@ -184,6 +192,112 @@ public class UItemTagProvider extends FabricTagProvider.ItemTagProvider {
|
|||
getOrCreateTagBuilder(UTags.Items.FORAGE_STRENGHENING).add(Items.FERN);
|
||||
getOrCreateTagBuilder(UTags.Items.FORAGE_SEVERE_NAUSEATING).add(Items.PITCHER_PLANT);
|
||||
getOrCreateTagBuilder(UTags.Items.FORAGE_SEVERE_PRICKLY).add(Items.LARGE_FERN);
|
||||
getOrCreateTagBuilder(UTags.Items.GROUP_FORAGING)
|
||||
.forceAddTag(UTags.Items.FORAGE_BLINDING)
|
||||
.forceAddTag(UTags.Items.FORAGE_DANGEROUS)
|
||||
.forceAddTag(UTags.Items.FORAGE_FILLING)
|
||||
.forceAddTag(UTags.Items.FORAGE_SAFE)
|
||||
.forceAddTag(UTags.Items.FORAGE_NAUSEATING)
|
||||
.forceAddTag(UTags.Items.FORAGE_PRICKLY)
|
||||
.forceAddTag(UTags.Items.FORAGE_GLOWING)
|
||||
.forceAddTag(UTags.Items.FORAGE_RISKY)
|
||||
.forceAddTag(UTags.Items.FORAGE_STRENGHENING)
|
||||
.forceAddTag(UTags.Items.FORAGE_SEVERE_NAUSEATING)
|
||||
.forceAddTag(UTags.Items.FORAGE_SEVERE_PRICKLY);
|
||||
}
|
||||
|
||||
private void exportCreativeTabs() {
|
||||
getOrCreateTagBuilder(UTags.Items.GROUP_UNICORN).add(
|
||||
UItems.SPELLBOOK, UItems.GEMSTONE, UItems.BOTCHED_GEM, UItems.FRIENDSHIP_BRACELET,
|
||||
UItems.CRYSTAL_HEART, UItems.CRYSTAL_SHARD, UBlocks.CRYSTAL_DOOR.asItem(),
|
||||
UItems.MEADOWBROOKS_STAFF, UItems.MAGIC_STAFF, UItems.GROGARS_BELL,
|
||||
UItems.DRAGON_BREATH_SCROLL, UItems.PEGASUS_AMULET, UItems.ALICORN_AMULET,
|
||||
UItems.BROKEN_ALICORN_AMULET, UItems.UNICORN_AMULET, UItems.SPECTRAL_CLOCK
|
||||
);
|
||||
getOrCreateTagBuilder(UTags.Items.GROUP_PEGASUS)
|
||||
.add(UBlocks.SHAPING_BENCH.asItem(), UBlocks.CLOUD_CHEST.asItem(), UItems.CLOUD_LUMP)
|
||||
.add(List.of(UBlockFamilies.CLOUD, UBlockFamilies.CLOUD_PLANKS, UBlockFamilies.CLOUD_BRICKS, UBlockFamilies.DENSE_CLOUD, UBlockFamilies.ETCHED_CLOUD)
|
||||
.stream()
|
||||
.map(BlockFamily::getVariants)
|
||||
.map(Map::values)
|
||||
.flatMap(Collection::stream)
|
||||
.map(ItemConvertible::asItem)
|
||||
.filter(Objects::nonNull)
|
||||
.toArray(Item[]::new))
|
||||
.add(UBlocks.UNSTABLE_CLOUD.asItem(), UBlocks.CLOUD_PILLAR.asItem(), UBlocks.CLOUD_DOOR.asItem(), UBlocks.CLOUD_BED.asItem())
|
||||
.forceAddTag(UTags.Items.BED_SHEETS)
|
||||
.forceAddTag(UConventionalTags.Items.RAW_FISH)
|
||||
.forceAddTag(UConventionalTags.Items.COOKED_FISH)
|
||||
.forceAddTag(UConventionalTags.Items.ROTTEN_FISH)
|
||||
.forceAddTag(UTags.Items.CLOUD_JARS)
|
||||
.add(UItems.LIGHTNING_JAR)
|
||||
.forceAddTag(UTags.Items.POLEARMS)
|
||||
.add(UItems.PEGASUS_FEATHER, UItems.GRYPHON_FEATHER, UItems.GOLDEN_FEATHER, UItems.GOLDEN_WING);
|
||||
getOrCreateTagBuilder(UTags.Items.GROUP_EARTH_PONY)
|
||||
.add(
|
||||
UBlocks.GREEN_APPLE_LEAVES.asItem(), UBlocks.SWEET_APPLE_LEAVES.asItem(), UBlocks.SOUR_APPLE_LEAVES.asItem(), UBlocks.ZAP_LEAVES.asItem(), UBlocks.FLOWERING_ZAP_LEAVES.asItem(),
|
||||
UBlocks.ZAP_LOG.asItem(), UBlocks.ZAP_WOOD.asItem(),
|
||||
UBlocks.STRIPPED_ZAP_LOG.asItem(), UBlocks.STRIPPED_ZAP_WOOD.asItem(),
|
||||
UBlocks.ZAP_PLANKS.asItem(), UBlocks.ZAP_STAIRS.asItem(), UBlocks.ZAP_SLAB.asItem(), UBlocks.ZAP_FENCE.asItem(), UBlocks.ZAP_FENCE_GATE.asItem(),
|
||||
|
||||
UBlocks.WAXED_ZAP_LOG.asItem(), UBlocks.WAXED_ZAP_WOOD.asItem(),
|
||||
UBlocks.WAXED_STRIPPED_ZAP_LOG.asItem(), UBlocks.WAXED_STRIPPED_ZAP_WOOD.asItem(),
|
||||
UBlocks.WAXED_ZAP_PLANKS.asItem(), UBlocks.WAXED_ZAP_STAIRS.asItem(), UBlocks.WAXED_ZAP_SLAB.asItem(), UBlocks.WAXED_ZAP_FENCE.asItem(), UBlocks.WAXED_ZAP_FENCE_GATE.asItem(),
|
||||
|
||||
UItems.CANDIED_APPLE, UBlocks.STABLE_DOOR.asItem(), UBlocks.DARK_OAK_DOOR.asItem())
|
||||
.forceAddTag(UTags.Items.FRESH_APPLES)
|
||||
.add(
|
||||
UItems.ZAP_APPLE, UItems.ZAP_BULB, UItems.ROTTEN_APPLE,
|
||||
UItems.GREEN_APPLE_SEEDS, UItems.SWEET_APPLE_SEEDS, UItems.SOUR_APPLE_SEEDS,
|
||||
UTreeGen.ZAP_APPLE_TREE.sapling().get().asItem(),
|
||||
UTreeGen.BANANA_TREE.sapling().get().asItem(),
|
||||
UItems.CURING_JOKE, UItems.MANGO, UItems.EMPTY_JAR, UItems.COOKED_ZAP_APPLE,
|
||||
UItems.ZAP_APPLE_JAM_JAR,
|
||||
UItems.OAT_SEEDS, UItems.OATS, UItems.IMPORTED_OATS,
|
||||
UItems.OATMEAL, UItems.OATMEAL_COOKIE, UItems.CHOCOLATE_OATMEAL_COOKIE,
|
||||
UItems.DAFFODIL_DAISY_SANDWICH, UItems.HAY_BURGER, UItems.HAY_BURGER, UItems.HAY_FRIES,
|
||||
UItems.CRISPY_HAY_FRIES, UItems.HORSE_SHOE_FRIES, UItems.WHEAT_WORMS,
|
||||
UItems.BAITED_FISHING_ROD, UBlocks.WORM_BLOCK.asItem(),
|
||||
UItems.MUFFIN, UItems.SCONE, UItems.ACORN, UItems.PINECONE, UItems.PINECONE_COOKIE,
|
||||
UItems.BOWL_OF_NUTS, UItems.CRYSTAL_SHARD, UItems.PEBBLES, UItems.ROCK, UItems.WEIRD_ROCK,
|
||||
UItems.ROCK_STEW, UItems.ROCK_CANDY, UItems.SALT_CUBE, UItems.MUG, UItems.CIDER, UItems.JUICE,
|
||||
UItems.BURNED_JUICE, UItems.TOAST, UItems.JAM_TOAST, UItems.BURNED_TOAST, UItems.APPLE_PIE,
|
||||
UItems.APPLE_PIE_HOOF, UItems.APPLE_PIE_SLICE, UBlocks.WEATHER_VANE.asItem()
|
||||
)
|
||||
.forceAddTag(UTags.Items.BASKETS)
|
||||
.add(UItems.GIANT_BALLOON, UBlocks.CLOTH_BED.asItem())
|
||||
.forceAddTag(UTags.Items.BED_SHEETS);
|
||||
getOrCreateTagBuilder(UTags.Items.GROUP_BAT_PONY)
|
||||
.forceAddTag(UConventionalTags.Items.RAW_INSECT)
|
||||
.forceAddTag(UConventionalTags.Items.COOKED_INSECT)
|
||||
.forceAddTag(UTags.Items.POLEARMS)
|
||||
.add(
|
||||
UBlocks.MANGO_LEAVES.asItem(), UTreeGen.MANGO_TREE.sapling().get().asItem(), UItems.MANGO,
|
||||
UItems.PINEAPPLE, UItems.PINEAPPLE_CROWN, UItems.BANANA, UItems.SUNGLASSES, UItems.BROKEN_SUNGLASSES
|
||||
);
|
||||
getOrCreateTagBuilder(UTags.Items.GROUP_CHANGELING)
|
||||
.add(
|
||||
UItems.CARAPACE, UBlocks.SURFACE_CHITIN.asItem(), UBlocks.CHITIN.asItem()
|
||||
).add(UBlockFamilies.CHISELED_CHITIN.getVariants().values().stream().map(ItemConvertible::asItem).toArray(Item[]::new))
|
||||
.add(
|
||||
UBlocks.CHISELLED_CHITIN_HULL.asItem(), UBlocks.CHITIN_SPIKES.asItem(),
|
||||
UBlocks.SLIME_PUSTULE.asItem(),
|
||||
UBlocks.MYSTERIOUS_EGG.asItem(), UItems.GREEN_FRIED_EGG,
|
||||
UBlocks.HIVE.asItem()
|
||||
)
|
||||
.forceAddTag(UConventionalTags.Items.RAW_MEAT)
|
||||
.forceAddTag(UConventionalTags.Items.COOKED_MEAT)
|
||||
.forceAddTag(UConventionalTags.Items.ROTTEN_MEAT)
|
||||
.forceAddTag(UConventionalTags.Items.RAW_INSECT)
|
||||
.forceAddTag(UConventionalTags.Items.COOKED_INSECT)
|
||||
.forceAddTag(UConventionalTags.Items.ROTTEN_INSECT)
|
||||
.forceAddTag(UTags.Items.CONTAINER_WITH_LOVE);
|
||||
getOrCreateTagBuilder(UTags.Items.GROUP_SEA_PONY)
|
||||
.add(UItems.PEARL_NECKLACE)
|
||||
.forceAddTag(UTags.Items.SHELLS)
|
||||
.forceAddTag(UTags.Items.SPECIAL_SHELLS)
|
||||
.forceAddTag(UTags.Items.LOW_QUALITY_SEA_VEGETABLES)
|
||||
.forceAddTag(UTags.Items.HIGH_QUALITY_SEA_VEGETABLES);
|
||||
}
|
||||
|
||||
private void exportConventionalTags() {
|
||||
|
@ -229,8 +343,8 @@ public class UItemTagProvider extends FabricTagProvider.ItemTagProvider {
|
|||
.addOptionalTag(new Identifier("c", "lemon_chickens"));
|
||||
getOrCreateTagBuilder(UConventionalTags.Items.ROTTEN_MEAT).add(Items.ROTTEN_FLESH);
|
||||
getOrCreateTagBuilder(UConventionalTags.Items.ROTTEN_INSECT).add(Items.FERMENTED_SPIDER_EYE);
|
||||
getOrCreateTagBuilder(UConventionalTags.Items.COOKED_INSECT);//.add(Items.FERMENTED_SPIDER_EYE); TODO
|
||||
getOrCreateTagBuilder(UConventionalTags.Items.RAW_INSECT).add(Items.SPIDER_EYE, UItems.BUTTERFLY, UItems.WHEAT_WORMS, UBlocks.WORM_BLOCK.asItem());
|
||||
getOrCreateTagBuilder(UConventionalTags.Items.COOKED_INSECT).add(UItems.COOKED_FROG_LEGS);
|
||||
getOrCreateTagBuilder(UConventionalTags.Items.RAW_INSECT).add(Items.SPIDER_EYE, UItems.BUTTERFLY, UItems.FROG_LEGS, UItems.WHEAT_WORMS, UBlocks.WORM_BLOCK.asItem());
|
||||
getOrCreateTagBuilder(UConventionalTags.Items.WORMS).add(UItems.WHEAT_WORMS);
|
||||
getOrCreateTagBuilder(UConventionalTags.Items.STICKS).add(Items.STICK);
|
||||
getOrCreateTagBuilder(UConventionalTags.Items.ROCKS).add(UItems.ROCK);
|
||||
|
|
|
@ -76,7 +76,7 @@ public class DietsLoader implements IdentifiableResourceReloadListener {
|
|||
if (!issueList.isEmpty()) {
|
||||
LOGGER.error("Could not load diet profile {}. Caused by {}", entry.getKey(), issueList.toString());
|
||||
}
|
||||
return issueList.isEmpty();
|
||||
return !issueList.isEmpty();
|
||||
});
|
||||
PonyDiets.load(new PonyDiets(profiles, foodGroups));
|
||||
}, applyExecutor);
|
||||
|
|
|
@ -90,7 +90,7 @@ public class FleeExplosionGoal extends Goal {
|
|||
|
||||
public static void notifySurroundings(Entity explosionSource, float radius) {
|
||||
explosionSource.getWorld().getOtherEntities(explosionSource, explosionSource.getBoundingBox().expand(radius), e -> {
|
||||
return Living.getOrEmpty(e).filter(l -> l instanceof Creature c).isPresent();
|
||||
return Living.getOrEmpty(e).filter(l -> l instanceof Creature).isPresent();
|
||||
}).forEach(e -> {
|
||||
getGoals((Creature)Living.living(e)).forEach(goal -> goal.setFleeTarget(explosionSource));
|
||||
});
|
||||
|
|
|
@ -10,7 +10,7 @@ public class BeeBehaviour extends EntityBehaviour<BeeEntity> {
|
|||
public BeeEntity onCreate(BeeEntity entity, EntityAppearance context, boolean replaceOld) {
|
||||
super.onCreate(entity, context, replaceOld);
|
||||
if (replaceOld && entity.getWorld().isClient) {
|
||||
InteractionManager.instance().playLoopingSound(entity, InteractionManager.SOUND_BEE, entity.getId());
|
||||
InteractionManager.getInstance().playLoopingSound(entity, InteractionManager.SOUND_BEE, entity.getId());
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
|
|
|
@ -141,7 +141,7 @@ public class EntityAppearance implements NbtSerialisable, PlayerDimensions.Provi
|
|||
private synchronized void createPlayer(NbtCompound nbt, GameProfile profile, Caster<?> source) {
|
||||
remove();
|
||||
|
||||
entity = InteractionManager.instance().createPlayer(source.asEntity(), profile);
|
||||
entity = InteractionManager.getInstance().createPlayer(source.asEntity(), profile);
|
||||
entity.setCustomName(source.asEntity().getName());
|
||||
((PlayerEntity)entity).readNbt(nbt.getCompound("playerNbt"));
|
||||
if (nbt.contains("playerVisibleParts", NbtElement.BYTE_TYPE)) {
|
||||
|
|
|
@ -12,7 +12,7 @@ public class MinecartBehaviour extends EntityBehaviour<AbstractMinecartEntity> {
|
|||
public AbstractMinecartEntity onCreate(AbstractMinecartEntity entity, EntityAppearance context, boolean replaceOld) {
|
||||
super.onCreate(entity, context, replaceOld);
|
||||
if (replaceOld && entity.getWorld().isClient) {
|
||||
InteractionManager.instance().playLoopingSound(entity, InteractionManager.SOUND_MINECART, entity.getId());
|
||||
InteractionManager.getInstance().playLoopingSound(entity, InteractionManager.SOUND_MINECART, entity.getId());
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
|
|
|
@ -366,7 +366,7 @@ public class AirBalloonEntity extends MobEntity implements EntityCollisions.Comp
|
|||
protected ActionResult interactMob(PlayerEntity player, Hand hand) {
|
||||
ItemStack stack = player.getStackInHand(hand);
|
||||
|
||||
if (stack.getItem() instanceof HotAirBalloonItem balloon && !hasBalloon()) {
|
||||
if (stack.getItem() instanceof HotAirBalloonItem && !hasBalloon()) {
|
||||
if (!player.getAbilities().creativeMode) {
|
||||
stack.decrement(1);
|
||||
}
|
||||
|
|
|
@ -75,7 +75,7 @@ public class CorruptionHandler implements Tickable {
|
|||
|
||||
private void recover(float percentage) {
|
||||
pony.getCorruption().set((int)(pony.getCorruption().get() * (1 - percentage)));
|
||||
InteractionManager.INSTANCE.playLoopingSound(pony.asEntity(), InteractionManager.SOUND_HEART_BEAT, 0);
|
||||
InteractionManager.getInstance().playLoopingSound(pony.asEntity(), InteractionManager.SOUND_HEART_BEAT, 0);
|
||||
MagicReserves reserves = pony.getMagicalReserves();
|
||||
reserves.getExertion().addPercent(10);
|
||||
reserves.getEnergy().add(10);
|
||||
|
|
|
@ -459,13 +459,13 @@ public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickab
|
|||
if (type.isAvian()) {
|
||||
if (!SpellPredicate.IS_DISGUISE.isOn(pony) && pony.isClient()) {
|
||||
if (ticksInAir % GLIDING_SOUND_INTERVAL == 5) {
|
||||
InteractionManager.instance().playLoopingSound(entity, InteractionManager.SOUND_GLIDING, entity.getId());
|
||||
InteractionManager.getInstance().playLoopingSound(entity, InteractionManager.SOUND_GLIDING, entity.getId());
|
||||
}
|
||||
}
|
||||
} else if (type == FlightType.INSECTOID && !SpellPredicate.IS_DISGUISE.isOn(pony)) {
|
||||
if (entity.getWorld().isClient && !soundPlaying) {
|
||||
soundPlaying = true;
|
||||
InteractionManager.instance().playLoopingSound(entity, InteractionManager.SOUND_CHANGELING_BUZZ, entity.getId());
|
||||
InteractionManager.getInstance().playLoopingSound(entity, InteractionManager.SOUND_CHANGELING_BUZZ, entity.getId());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -564,7 +564,7 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
|||
entity.addStatusEffect(new StatusEffectInstance(UEffects.SUN_BLINDNESS, SunBlindnessStatusEffect.MAX_DURATION, 2, true, false));
|
||||
UCriteria.LOOK_INTO_SUN.trigger(entity);
|
||||
} else if (isClientPlayer()) {
|
||||
InteractionManager.instance().playLoopingSound(entity, InteractionManager.SOUND_EARS_RINGING, entity.getId());
|
||||
InteractionManager.getInstance().playLoopingSound(entity, InteractionManager.SOUND_EARS_RINGING, entity.getId());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -577,7 +577,7 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
|||
if (!isClient()) {
|
||||
entity.addStatusEffect(new StatusEffectInstance(UEffects.SUN_BLINDNESS, SunBlindnessStatusEffect.MAX_DURATION, 1, true, false));
|
||||
} else if (isClientPlayer()) {
|
||||
InteractionManager.instance().playLoopingSound(entity, InteractionManager.SOUND_EARS_RINGING, entity.getId());
|
||||
InteractionManager.getInstance().playLoopingSound(entity, InteractionManager.SOUND_EARS_RINGING, entity.getId());
|
||||
}
|
||||
}
|
||||
} else if (ticksInSun > 0) {
|
||||
|
@ -966,7 +966,7 @@ public class Pony extends Living<PlayerEntity> implements Copyable<Pony>, Update
|
|||
}
|
||||
|
||||
public boolean isClientPlayer() {
|
||||
return InteractionManager.instance().isClientPlayer(asEntity());
|
||||
return InteractionManager.getInstance().isClientPlayer(asEntity());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
|
@ -65,7 +65,7 @@ public class DummyClientPlayerEntity extends AbstractClientPlayerEntity implemen
|
|||
|
||||
@Override
|
||||
public boolean shouldRenderName() {
|
||||
return !InteractionManager.instance().isClientPlayer(getMaster());
|
||||
return !InteractionManager.getInstance().isClientPlayer(getMaster());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -53,7 +53,7 @@ public class DummyPlayerEntity extends PlayerEntity implements Owned<PlayerEntit
|
|||
|
||||
@Override
|
||||
public boolean shouldRenderName() {
|
||||
return !InteractionManager.instance().isClientPlayer(getMaster());
|
||||
return !InteractionManager.getInstance().isClientPlayer(getMaster());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -271,7 +271,7 @@ public class AlicornAmuletItem extends AmuletItem implements ItemTracker.Trackab
|
|||
pony.playSound(USounds.ITEM_ALICORN_AMULET_HALLUCINATION, 3, 1);
|
||||
} else if (attachedTicks < 2 || (attachedTicks % (10 * ItemTracker.SECONDS) < 9 && world.random.nextInt(90) == 0)) {
|
||||
if (attachedTicks % 5 == 0) {
|
||||
InteractionManager.INSTANCE.playLoopingSound(player, InteractionManager.SOUND_HEART_BEAT, 0);
|
||||
InteractionManager.getInstance().playLoopingSound(player, InteractionManager.SOUND_HEART_BEAT, 0);
|
||||
}
|
||||
|
||||
reserves.getExertion().addPercent(10);
|
||||
|
|
|
@ -49,7 +49,7 @@ public class ForageableItem extends Item {
|
|||
if (state.isIn(BlockTags.LEAVES)) {
|
||||
player.swingHand(hand);
|
||||
world.playSound(player, pos, state.getSoundGroup().getHitSound(), SoundCategory.BLOCKS);
|
||||
InteractionManager.instance().addBlockBreakingParticles(pos, hitResult.getSide());
|
||||
InteractionManager.getInstance().addBlockBreakingParticles(pos, hitResult.getSide());
|
||||
|
||||
int miningLevel = (stack.getItem() instanceof HoeItem hoe ? hoe.getMaterial().getMiningLevel() : 59);
|
||||
|
||||
|
|
|
@ -124,6 +124,10 @@ public class FriendshipBraceletItem extends WearableItem implements DyeableItem,
|
|||
.isPresent();
|
||||
}
|
||||
|
||||
public static boolean isComrade(UUID signator, Entity entity) {
|
||||
return entity instanceof LivingEntity l && getWornBangles(l).anyMatch(stack -> isSignedBy(stack, signator));
|
||||
}
|
||||
|
||||
public static Stream<Pony> getPartyMembers(Caster<?> caster, double radius) {
|
||||
return Pony.stream(caster.findAllEntitiesInRange(radius, entity -> isComrade(caster, entity)));
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import java.util.List;
|
|||
import java.util.function.Predicate;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import com.minelittlepony.unicopia.Unicopia;
|
||||
import com.minelittlepony.unicopia.InteractionManager;
|
||||
import com.minelittlepony.unicopia.ability.magic.spell.effect.CustomisedSpellType;
|
||||
import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType;
|
||||
import com.minelittlepony.unicopia.client.TextHelper;
|
||||
|
@ -84,7 +84,7 @@ public class GemstoneItem extends Item implements MultiItem, EnchantableItem {
|
|||
|
||||
MutableText line = Text.translatable(key.getTranslationKey() + ".lore").formatted(key.getAffinity().getColor());
|
||||
|
||||
if (!Unicopia.SIDE.getPlayerSpecies().canCast()) {
|
||||
if (!InteractionManager.getInstance().getClientSpecies().canCast()) {
|
||||
line = line.formatted(Formatting.OBFUSCATED);
|
||||
}
|
||||
|
||||
|
@ -105,13 +105,13 @@ public class GemstoneItem extends Item implements MultiItem, EnchantableItem {
|
|||
|
||||
@Override
|
||||
public boolean hasGlint(ItemStack stack) {
|
||||
return super.hasGlint(stack) || (Unicopia.SIDE.getPlayerSpecies().canCast() && EnchantableItem.isEnchanted(stack));
|
||||
return super.hasGlint(stack) || (InteractionManager.getInstance().getClientSpecies().canCast() && EnchantableItem.isEnchanted(stack));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName(ItemStack stack) {
|
||||
if (EnchantableItem.isEnchanted(stack)) {
|
||||
if (!Unicopia.SIDE.getPlayerSpecies().canCast()) {
|
||||
if (!InteractionManager.getInstance().getClientSpecies().canCast()) {
|
||||
return Text.translatable(getTranslationKey(stack) + ".obfuscated");
|
||||
}
|
||||
|
||||
|
|
|
@ -6,9 +6,9 @@ import org.jetbrains.annotations.Nullable;
|
|||
|
||||
import com.google.common.collect.ImmutableMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.minelittlepony.unicopia.InteractionManager;
|
||||
import com.minelittlepony.unicopia.Race;
|
||||
import com.minelittlepony.unicopia.USounds;
|
||||
import com.minelittlepony.unicopia.Unicopia;
|
||||
import com.minelittlepony.unicopia.entity.damage.UDamageTypes;
|
||||
import com.minelittlepony.unicopia.entity.mob.UEntityAttributes;
|
||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||
|
@ -53,18 +53,15 @@ public class HorseShoeItem extends HeavyProjectileItem {
|
|||
float inaccuracy = projectileInnacuracy + degradation * 30;
|
||||
tooltip.add(Text.empty());
|
||||
|
||||
Pony pony = Unicopia.SIDE.getPony().orElse(null);
|
||||
var race = InteractionManager.getInstance().getClientPony().map(Pony::getCompositeRace).orElse(null);
|
||||
float speed = baseProjectileSpeed;
|
||||
if (pony != null) {
|
||||
var race = pony.getCompositeRace();
|
||||
|
||||
if (race != null) {
|
||||
if (race.any(Race::canUseEarth)) {
|
||||
speed += 0.5F;
|
||||
}
|
||||
if (!race.includes(Race.ALICORN) && race.physical().canFly()) {
|
||||
speed /= 1.5F;
|
||||
}
|
||||
|
||||
}
|
||||
speed /= 1.5F;
|
||||
speed *= 1 - (0.6F * degradation);
|
||||
|
|
|
@ -31,6 +31,20 @@ public interface UFoodComponents {
|
|||
FoodComponent SCONE = builder(2, 0.2F).build();
|
||||
FoodComponent FRIED_EGG = builder(4, 0.4F).build();
|
||||
|
||||
FoodComponent ROTTEN_PUFFERFISH = new FoodComponent.Builder()
|
||||
.hunger(4)
|
||||
.saturationModifier(0.1F)
|
||||
.statusEffect(new StatusEffectInstance(StatusEffects.POISON, 1200, 1), 1)
|
||||
.statusEffect(new StatusEffectInstance(StatusEffects.HUNGER, 300, 2), 1)
|
||||
.statusEffect(new StatusEffectInstance(StatusEffects.NAUSEA, 300, 0), 1)
|
||||
.meat()
|
||||
.build();
|
||||
FoodComponent COOKED_PUFFERFISH = builder(5, 0.6F)
|
||||
.statusEffect(new StatusEffectInstance(StatusEffects.POISON, 1200, 1), 0.2F)
|
||||
.statusEffect(new StatusEffectInstance(StatusEffects.HUNGER, 300, 2), 0.3F)
|
||||
.statusEffect(new StatusEffectInstance(StatusEffects.NAUSEA, 300, 0), 0.4F)
|
||||
.build();
|
||||
|
||||
FoodComponent WORMS = builder(1, 1.5F).alwaysEdible().meat().build();
|
||||
FoodComponent INSECTS = builder(1, 0).alwaysEdible().build();
|
||||
|
||||
|
|
|
@ -231,13 +231,16 @@ public interface UItems {
|
|||
Item ROTTEN_COD = register("rotten_cod", new Item(new Item.Settings().food(FoodComponents.ROTTEN_FLESH)), ItemGroups.FOOD_AND_DRINK);
|
||||
Item ROTTEN_SALMON = register("rotten_salmon", new Item(new Item.Settings().food(FoodComponents.ROTTEN_FLESH)), ItemGroups.FOOD_AND_DRINK);
|
||||
Item ROTTEN_TROPICAL_FISH = register("rotten_tropical_fish", new Item(new Item.Settings().food(FoodComponents.ROTTEN_FLESH)), ItemGroups.FOOD_AND_DRINK);
|
||||
Item ROTTEN_PUFFERFISH = register("rotten_pufferfish", new Item(new Item.Settings().food(FoodComponents.ROTTEN_FLESH)), ItemGroups.FOOD_AND_DRINK);
|
||||
Item ROTTEN_PUFFERFISH = register("rotten_pufferfish", new Item(new Item.Settings().food(UFoodComponents.ROTTEN_PUFFERFISH)), ItemGroups.FOOD_AND_DRINK);
|
||||
|
||||
Item COOKED_TROPICAL_FISH = register("cooked_tropical_fish", new Item(new Item.Settings().food(FoodComponents.COOKED_COD)), ItemGroups.FOOD_AND_DRINK);
|
||||
Item COOKED_PUFFERFISH = register("cooked_pufferfish", new Item(new Item.Settings().food(FoodComponents.COOKED_COD)), ItemGroups.FOOD_AND_DRINK);
|
||||
Item COOKED_PUFFERFISH = register("cooked_pufferfish", new Item(new Item.Settings().food(UFoodComponents.COOKED_PUFFERFISH)), ItemGroups.FOOD_AND_DRINK);
|
||||
Item FRIED_AXOLOTL = register("fried_axolotl", new ConsumableItem(new Item.Settings().food(FoodComponents.COOKED_CHICKEN).maxCount(1).recipeRemainder(Items.BUCKET), UseAction.EAT), ItemGroups.FOOD_AND_DRINK);
|
||||
Item GREEN_FRIED_EGG = register("green_fried_egg", new Item(new Item.Settings().food(UFoodComponents.FRIED_EGG)), ItemGroups.FOOD_AND_DRINK);
|
||||
|
||||
Item FROG_LEGS = register("frog_legs", new Item(new Item.Settings().food(FoodComponents.CHICKEN)), ItemGroups.FOOD_AND_DRINK);
|
||||
Item COOKED_FROG_LEGS = register("cooked_frog_legs", new Item(new Item.Settings().food(FoodComponents.COOKED_CHICKEN)), ItemGroups.FOOD_AND_DRINK);
|
||||
|
||||
Item CARAPACE = register("carapace", new Item(new Item.Settings()), ItemGroups.INGREDIENTS);
|
||||
Item CLOTH_BED = register("cloth_bed", new FancyBedItem(UBlocks.CLOTH_BED, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
|
||||
Item CLOUD_BED = register("cloud_bed", new CloudBedItem(UBlocks.CLOUD_BED, new Item.Settings().maxCount(1)), ItemGroups.FUNCTIONAL);
|
||||
|
|
|
@ -2,8 +2,8 @@ package com.minelittlepony.unicopia.item;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import com.minelittlepony.unicopia.InteractionManager;
|
||||
import com.minelittlepony.unicopia.UConventionalTags;
|
||||
import com.minelittlepony.unicopia.Unicopia;
|
||||
import com.minelittlepony.unicopia.advancement.UCriteria;
|
||||
import com.minelittlepony.unicopia.entity.Living;
|
||||
import com.minelittlepony.unicopia.entity.damage.UDamageTypes;
|
||||
|
@ -101,7 +101,7 @@ public class ZapAppleItem extends Item implements ChameleonItem, MultiItem {
|
|||
|
||||
@Override
|
||||
public List<ItemStack> getDefaultStacks() {
|
||||
return Unicopia.SIDE.getPony().map(Pony::asWorld)
|
||||
return InteractionManager.getInstance().getClientPony().map(Pony::asWorld)
|
||||
.stream()
|
||||
.flatMap(world -> RegistryUtils.valuesForTag(world, UConventionalTags.Items.APPLES))
|
||||
.filter(a -> a != this).map(item -> {
|
||||
|
|
|
@ -31,7 +31,7 @@ public class CloudBlockItem extends BlockItem {
|
|||
|
||||
@Override
|
||||
public TypedActionResult<ItemStack> use(World world, PlayerEntity user, Hand hand) {
|
||||
InteractionManager.instance().sendPlayerLookAngles(user);
|
||||
InteractionManager.getInstance().sendPlayerLookAngles(user);
|
||||
Vec3d targetPos = user.getEyePos().add(user.getRotationVec(1).multiply(1, 1.5, 1).normalize().multiply(2));
|
||||
ItemPlacementContext context = new ItemPlacementContext(user, hand, user.getStackInHand(hand), new BlockHitResult(
|
||||
targetPos,
|
||||
|
|
|
@ -30,7 +30,7 @@ public record MsgServerResources (
|
|||
public MsgServerResources(PacketByteBuf buffer) {
|
||||
this(
|
||||
buffer.readMap(PacketByteBuf::readIdentifier, SpellTraits::fromPacket),
|
||||
InteractionManager.instance().readChapters(buffer),
|
||||
InteractionManager.getInstance().readChapters(buffer),
|
||||
buffer.readMap(PacketByteBuf::readIdentifier, TreeTypeLoader.TreeTypeDef::new),
|
||||
new PonyDiets(buffer)
|
||||
);
|
||||
|
|
|
@ -131,7 +131,7 @@ public class MagicBeamEntity extends MagicProjectileEntity implements Caster<Mag
|
|||
@Override
|
||||
public void onSpawnPacket(EntitySpawnS2CPacket packet) {
|
||||
super.onSpawnPacket(packet);
|
||||
InteractionManager.instance().playLoopingSound(this, InteractionManager.SOUND_MAGIC_BEAM, getId());
|
||||
InteractionManager.getInstance().playLoopingSound(this, InteractionManager.SOUND_MAGIC_BEAM, getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -181,7 +181,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl
|
|||
BlockPos belowPos = buttonPos.down();
|
||||
BlockState below = getWorld().getBlockState(belowPos);
|
||||
ItemStack stack = getStack();
|
||||
if (below.getBlock() instanceof HopperBlock hopper) {
|
||||
if (below.getBlock() instanceof HopperBlock) {
|
||||
BlockEntity e = getWorld().getBlockEntity(belowPos);
|
||||
if (e instanceof Inventory inventory) {
|
||||
for (int i = 0; i < inventory.size(); i++) {
|
||||
|
|
|
@ -54,7 +54,7 @@ public interface URecipes {
|
|||
LootTable table = manager.getLootTable(modId);
|
||||
|
||||
if (table != LootTable.EMPTY) {
|
||||
if (id.getPath().startsWith("blocks/")) {
|
||||
if (id.getPath().startsWith("blocks/") || supplier.build().pools.length == 0) {
|
||||
for (var pool : table.pools) {
|
||||
supplier.pool(pool);
|
||||
}
|
||||
|
|
1649
src/main/resources/assets/unicopia/lang/de_de.json
Normal file
1649
src/main/resources/assets/unicopia/lang/de_de.json
Normal file
File diff suppressed because it is too large
Load diff
1649
src/main/resources/assets/unicopia/lang/en_GB.json
Normal file
1649
src/main/resources/assets/unicopia/lang/en_GB.json
Normal file
File diff suppressed because it is too large
Load diff
1649
src/main/resources/assets/unicopia/lang/en_UD.json
Normal file
1649
src/main/resources/assets/unicopia/lang/en_UD.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -82,6 +82,8 @@
|
|||
"item.unicopia.cooked_pufferfish": "Cooked Pufferfish",
|
||||
"item.unicopia.fried_axolotl": "Fried Axolotl",
|
||||
"item.unicopia.green_fried_egg": "Green Fried Egg",
|
||||
"item.unicopia.frog_legs": "Frog's Legs",
|
||||
"item.unicopia.cooked_frog_legs": "Cooked Frog's Legs",
|
||||
|
||||
"item.unicopia.love_bottle": "Bottle o' Love",
|
||||
"item.unicopia.love_bucket": "Love Bucket",
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,11 +1,9 @@
|
|||
{
|
||||
|
||||
"block.unicopia.bed.not_safe": "Вы не можете уснуть, пока рядом есть монстры",
|
||||
"block.unicopia.bed.not_tired": "Сейчас вы не чувствуете усталости",
|
||||
"block.unicopia.bed.no_sleep.nocturnal": "Вы можете спать только днём или во время грозы",
|
||||
"sleep.not_possible.nocturnal": "Никакой отдых не может пройти в этот день",
|
||||
"sleep.skipping_day": "Проспал этот день",
|
||||
|
||||
"ability.unicopia.empty_hooves": "Мне нужно найти банку",
|
||||
"ability.unicopia.indoors": "Я не вижу отсюда неба",
|
||||
"ability.unicopia.too_low": "Мне нужно подняться повыше",
|
||||
|
@ -14,7 +12,6 @@
|
|||
"ability.unicopia.too_calm.2": "Я не чувствую злости...",
|
||||
"ability.unicopia.too_calm.3": "У Брюса это выглядело проще...",
|
||||
"ability.unicopia.too_calm.4": "Селестия, дай мне силы...",
|
||||
|
||||
"itemGroup.unicopia.items": "Unicopia",
|
||||
"itemGroup.unicopia.foraging": "Unicopia - Корм",
|
||||
"itemGroup.unicopia.earth_pony": "Unicopia - Понивилль",
|
||||
|
@ -23,11 +20,9 @@
|
|||
"itemGroup.unicopia.bat_pony": "Unicopia - Лощина Теней",
|
||||
"itemGroup.unicopia.sea_pony": "Unicopia - Из глубин",
|
||||
"itemGroup.unicopia.changeling": "Unicopia - Сырные Холмы",
|
||||
|
||||
"item.unicopia.friendship_bracelet": "Браслет товарищества",
|
||||
"item.unicopia.friendship_bracelet.issuer": "Подписано %s",
|
||||
"item.unicopia.friendship_bracelet.glowing": "Светящийся",
|
||||
|
||||
"item.unicopia.oak_basket": "Дубовая корзина",
|
||||
"item.unicopia.spruce_basket": "Еловая корзина",
|
||||
"item.unicopia.birch_basket": "Берёзовая корзина",
|
||||
|
@ -39,20 +34,16 @@
|
|||
"item.unicopia.bamboo_basket": "Бамбуковая корзина",
|
||||
"item.unicopia.palm_basket": "Пальмовая корзина",
|
||||
"item.unicopia.giant_balloon": "Гигантский воздушный шар",
|
||||
|
||||
"item.unicopia.palm_boat": "Пальмовая лодка",
|
||||
"item.unicopia.palm_chest_boat": "Пальмовая лодка с сундуком",
|
||||
|
||||
"item.unicopia.spellbook": "Книга заклинаний",
|
||||
"item.unicopia.spectral_clock": "Спектральные часы",
|
||||
|
||||
"emi.category.unicopia.spellbook": "Книга заклинаний",
|
||||
"emi.category.unicopia.cloud_shaping": "Формоизменение",
|
||||
"emi.category.unicopia.growing": "Выращивание",
|
||||
"emi.category.unicopia.altar": "Тёмный ритуал",
|
||||
"recipe.unicopia.altar.instruction": "Бросить предмет в огонь",
|
||||
"recipe.unicopia.growing.instruction": "Сфокусировать магию земного пони",
|
||||
|
||||
"item.unicopia.alicorn_badge": "Эмблема аликорна",
|
||||
"item.unicopia.unicorn_badge": "Эмблема единорога",
|
||||
"item.unicopia.pegasus_badge": "Эмблема пегаса",
|
||||
|
@ -61,12 +52,10 @@
|
|||
"item.unicopia.bat_badge": "Эмблема бэтпони",
|
||||
"item.unicopia.kirin_badge": "Эмблема кирина",
|
||||
"item.unicopia.hippogriff_badge": "Эмблема гиппогрифа",
|
||||
|
||||
"item.unicopia.butterfly_spawn_egg": "Яйцо призыва бабочки",
|
||||
"item.unicopia.butterfly": "Бабочка",
|
||||
"item.unicopia.loot_bug_spawn_egg": "Яйцо призыва жука-сборщика",
|
||||
"item.unicopia.loot_bug": "Жук-сборщик",
|
||||
|
||||
"item.unicopia.green_apple": "Яблоко Гренни Смит",
|
||||
"item.unicopia.sweet_apple": "Яблоко Яблочной Аллеи",
|
||||
"item.unicopia.sour_apple": "Кислое яблоко",
|
||||
|
@ -82,11 +71,11 @@
|
|||
"item.unicopia.cooked_pufferfish": "Приготовленный иглобрюх",
|
||||
"item.unicopia.fried_axolotl": "Жареный аксолотль",
|
||||
"item.unicopia.green_fried_egg": "Жареное зелёное яйцо",
|
||||
|
||||
"item.unicopia.frog_legs": "Лягушачьи лапки",
|
||||
"item.unicopia.cooked_frog_legs": "Приготовленные лягушачьи лапки",
|
||||
"item.unicopia.love_bottle": "Бутылочка любви",
|
||||
"item.unicopia.love_bucket": "Ведро любви",
|
||||
"item.unicopia.love_mug": "Кружка любви",
|
||||
|
||||
"item.unicopia.plunder_vine": "Чёрная лоза",
|
||||
"item.unicopia.empty_jar": "Стеклянная банка",
|
||||
"block.unicopia.jar": "Стеклянная банка",
|
||||
|
@ -99,11 +88,9 @@
|
|||
"block.unicopia.lightning_jar": "Молния в банке",
|
||||
"item.unicopia.zap_apple_jam_jar": "Джем из зап-яблока",
|
||||
"block.unicopia.zap_jar": "Банка зап-яблочного джема",
|
||||
|
||||
"item.unicopia.toast": "Тост",
|
||||
"item.unicopia.burned_toast": "Подгоревший тост",
|
||||
"item.unicopia.jam_toast": "Тост с зап-яблочным джемом",
|
||||
|
||||
"item.unicopia.crystal_heart": "Кристальное сердце",
|
||||
"item.unicopia.crystal_shard": "Осколок кристалла",
|
||||
"item.unicopia.dragon_breath_scroll": "Свиток дыхания дракона",
|
||||
|
@ -111,26 +98,21 @@
|
|||
"item.unicopia.gemstone.enchanted": "Самоцвет \"%s\"",
|
||||
"item.unicopia.gemstone.obfuscated": "Загадочный самоцвет",
|
||||
"item.unicopia.botched_gem": "Неудачный самоцвет",
|
||||
|
||||
"item.unicopia.pegasus_feather": "Перо пегаса",
|
||||
"item.unicopia.gryphon_feather": "Перо грифона",
|
||||
"item.unicopia.golden_feather": "Золотое перо",
|
||||
"item.unicopia.golden_wing": "Золотое крыло",
|
||||
|
||||
"item.unicopia.mug": "Кружка",
|
||||
"item.unicopia.cider": "Сидр",
|
||||
"item.unicopia.juice": "Сок",
|
||||
"item.unicopia.burned_juice": "Жжёный сок",
|
||||
|
||||
"item.unicopia.mango": "Манго",
|
||||
"item.unicopia.banana": "Банан",
|
||||
"item.unicopia.pineapple": "Ананас",
|
||||
"item.unicopia.pineapple_crown": "Ботва ананаса",
|
||||
"item.unicopia.sunglasses": "Солнцезащитные очки",
|
||||
"item.unicopia.broken_sunglasses": "Сломанные солнцезащитные очки",
|
||||
|
||||
"item.unicopia.carapace": "Панцырь",
|
||||
|
||||
"item.unicopia.pebbles": "Галька",
|
||||
"item.unicopia.rock": "Камень",
|
||||
"item.unicopia.weird_rock": "Странный камень",
|
||||
|
@ -147,7 +129,6 @@
|
|||
"item.unicopia.apple_pie_hoof": "Яблочный пирог с отпечатком копыта",
|
||||
"item.unicopia.apple_pie_slice": "Кусочек яблочного пирога",
|
||||
"item.unicopia.candied_apple": "Засахаренное яблоко",
|
||||
|
||||
"item.unicopia.oats": "Овёс",
|
||||
"item.unicopia.imported_oats": "Шикарный импортный овёс",
|
||||
"item.unicopia.oatmeal": "Овсянка",
|
||||
|
@ -165,32 +146,26 @@
|
|||
"item.unicopia.chocolate_oatmeal_cookie": "Шоколадное овсяное печенье",
|
||||
"item.unicopia.pinecone_cookie": "Печенье из шишек",
|
||||
"item.unicopia.bowl_of_nuts": "Миска с орехами",
|
||||
|
||||
"item.unicopia.pegasus_amulet": "Крылья Икара",
|
||||
"item.unicopia.pegasus_amulet.lore": "Дарует временный полёт тому, кто носит его",
|
||||
"item.unicopia.amulet.energy": "Энергия: %d / %d",
|
||||
|
||||
"item.unicopia.alicorn_amulet": "Амулет аликорна",
|
||||
"item.unicopia.alicorn_amulet.lore": "Время ношения: %d",
|
||||
|
||||
"item.unicopia.pearl_necklace": "Жемчужное ожерелье",
|
||||
"item.unicopia.pearl_necklace.lore": "Наделяет владельца подводными способностями",
|
||||
"item.unicopia.clam_shell": "Раковина моллюска",
|
||||
"item.unicopia.scallop_shell": "Раковина гребешка",
|
||||
"item.unicopia.turret_shell": "Раковина туррителлы",
|
||||
"item.unicopia.shelly": "Шелли",
|
||||
|
||||
"item.unicopia.horse_shoe.accuracy": "Точность: %d%%",
|
||||
"item.unicopia.horse_shoe.speed": "Скорость: %d",
|
||||
"item.unicopia.iron_horse_shoe": "Железная подкова",
|
||||
"item.unicopia.golden_horse_shoe": "Золотая подкова",
|
||||
"item.unicopia.copper_horse_shoe": "Медная подкова",
|
||||
"item.unicopia.netherite_horse_shoe": "Незеритовая подкова",
|
||||
|
||||
"item.unicopia.broken_alicorn_amulet": "Сломанный амулет аликорна",
|
||||
"item.unicopia.unicorn_amulet": "Амулет единорога",
|
||||
"item.unicopia.unicorn_amulet.lore": "Наделяет носящего магическими способностями",
|
||||
|
||||
"item.unicopia.grogars_bell": "Колокольчик Грогара",
|
||||
"item.unicopia.grogars_bell.charges": "Заряды: %d / %d",
|
||||
"item.unicopia.magic_staff": "Волшебный посох",
|
||||
|
@ -198,23 +173,20 @@
|
|||
"item.unicopia.magic_staff.charges": "Заряды: %d / %d",
|
||||
"item.unicopia.meadowbrooks_staff": "Посох Медоубрук",
|
||||
"item.unicopia.meadowbrooks_staff.lore": "Тяжёлая палка",
|
||||
|
||||
"item.unicopia.wooden_polearm": "Деревянное копьё",
|
||||
"item.unicopia.stone_polearm": "Каменное копьё",
|
||||
"item.unicopia.iron_polearm": "Железное копьё",
|
||||
"item.unicopia.golden_polearm": "Золотое копьё",
|
||||
"item.unicopia.diamond_polearm": "Алмазное копьё",
|
||||
"item.unicopia.netherite_polearm": "Незеритовое копьё",
|
||||
|
||||
"item.unicopia.music_disc_pet": "Пластинка",
|
||||
"item.unicopia.music_disc_pet.desc": "Дэниел Инграм - pet",
|
||||
"item.unicopia.music_disc_pet.desc": "Daniel Ingram - pet",
|
||||
"item.unicopia.music_disc_popular": "Пластинка",
|
||||
"item.unicopia.music_disc_popular.desc": "Дэниел Инграм - popular",
|
||||
"item.unicopia.music_disc_crusade": "Пластинка",
|
||||
"item.unicopia.music_disc_crusade.desc": "Дэниел Инграм - crusade",
|
||||
"item.unicopia.music_disc_crusade.desc": "Daniel Ingram - crusade",
|
||||
"item.unicopia.music_disc_funk": "Пластинка",
|
||||
"item.unicopia.music_disc_funk.desc": "Фанк, просто фанк",
|
||||
|
||||
"item.unicopia.cloud_lump": "Облачный ком",
|
||||
"item.unicopia.white_bed_sheets": "Белая простынь",
|
||||
"item.unicopia.light_gray_bed_sheets": "Светло-серая простынь",
|
||||
|
@ -241,7 +213,6 @@
|
|||
"item.unicopia.rainbow_bpy_bed_sheets": "Простынь с радужным СРЖ узором",
|
||||
"item.unicopia.rainbow_pbg_bed_sheets": "Простынь с радужным ФСЧ узором",
|
||||
"item.unicopia.rainbow_pwr_bed_sheets": "Простынь с радужным РБК узором",
|
||||
|
||||
"block.unicopia.rocks": "Камни",
|
||||
"block.unicopia.plunder_vine": "Чёрная лоза",
|
||||
"block.unicopia.plunder_vine_bud": "Бутон чёрной лозы",
|
||||
|
@ -304,11 +275,9 @@
|
|||
"block.unicopia.mango_sapling": "Саженец мангового дерева",
|
||||
"block.unicopia.potted_mango_sapling": "Саженец манго в горшке",
|
||||
"block.unicopia.pineapple": "Ананас",
|
||||
|
||||
"block.unicopia.clam_shell": "Раковина моллюска",
|
||||
"block.unicopia.scallop_shell": "Раковина гребешка",
|
||||
"block.unicopia.turret_shell": "Раковина туррителлы",
|
||||
|
||||
"block.unicopia.green_apple_leaves": "Листья яблони Гренни Смит",
|
||||
"block.unicopia.green_apple_sapling": "Саженец яблони Гренни Смит",
|
||||
"block.unicopia.potted_green_apple_sapling": "Саженец яблони Гренни Смит в горшке",
|
||||
|
@ -321,7 +290,6 @@
|
|||
"block.unicopia.sour_apple_sapling": "Саженец кислой яблони",
|
||||
"block.unicopia.potted_sour_apple_sapling": "Саженец кислой яблони в горшке",
|
||||
"block.unicopia.sour_apple_sprout": "Росток кислой яблони",
|
||||
|
||||
"block.unicopia.surface_chitin": "Поверхностный хитин",
|
||||
"block.unicopia.mysterious_egg": "Загадочное яйцо",
|
||||
"block.unicopia.hive": "Улей",
|
||||
|
@ -332,7 +300,6 @@
|
|||
"block.unicopia.chiselled_chitin_hull": "Резной хитиновый остов",
|
||||
"block.unicopia.chiselled_chitin_slab": "Резная хитиновая плита",
|
||||
"block.unicopia.chiselled_chitin_stairs": "Резные хитиновые ступеньки",
|
||||
|
||||
"block.unicopia.shaping_bench": "Стенд формоизменения",
|
||||
"block.unicopia.cloud": "Облако",
|
||||
"block.unicopia.cloud_slab": "Плита из облака",
|
||||
|
@ -368,11 +335,9 @@
|
|||
"block.unicopia.crystal_door": "Кристальная дверь",
|
||||
"block.unicopia.stable_door": "Дверь конюшни",
|
||||
"block.unicopia.dark_oak_stable_door": "Деревянная дверь конюшни",
|
||||
|
||||
"block.unicopia.oats": "Овёс",
|
||||
"block.unicopia.oats_stem": "Овёс",
|
||||
"block.unicopia.oats_crown": "Овёс",
|
||||
|
||||
"entity.unicopia.butterfly": "Бабочка",
|
||||
"entity.unicopia.twittermite": "Твиттермит",
|
||||
"entity.unicopia.specter": "Призрак",
|
||||
|
@ -386,22 +351,18 @@
|
|||
"entity.unicopia.crystal_shards": "Кристальные осколки",
|
||||
"entity.unicopia.ignominious_vine": "Позорная лоза",
|
||||
"entity.unicopia.ignominious_bulb": "Позорная лампочка",
|
||||
|
||||
"player.reachDistance": "Расстояние до цели",
|
||||
"player.miningSpeed": "Скорость добычи",
|
||||
"player.gravityModifier": "Гравитация",
|
||||
|
||||
"unicopia.effect.tribe.stage.initial": "Похоже, что эффекта нет",
|
||||
"unicopia.effect.tribe.stage.crawling": "Вы чувствуете, как кожа ползёт по спине",
|
||||
"unicopia.effect.tribe.stage.determination": "По мере того, как ваши кости выравниваются, вы наполняетесь решимостью",
|
||||
"unicopia.effect.tribe.stage.resurection": "Зная то, что вы вернетесь в этот мир как %s",
|
||||
|
||||
"effect.unicopia.food_poisoning": "Пищевое отравление",
|
||||
"effect.unicopia.sun_blindness": "Солнечная слепота",
|
||||
"effect.unicopia.corrupt_influence": "Испорченное влияние",
|
||||
"effect.unicopia.paralysis": "Паралич",
|
||||
"effect.unicopia.butter_fingers": "Растяпа",
|
||||
|
||||
"effect.unicopia.change_race_earth": "Метаморфозы земного пони",
|
||||
"effect.unicopia.change_race_unicorn": "Метаморфозы единорога",
|
||||
"effect.unicopia.change_race_pegasus": "Метаморфозы пегаса",
|
||||
|
@ -409,7 +370,6 @@
|
|||
"effect.unicopia.change_race_bat": "Метаморфозы бэтпони",
|
||||
"effect.unicopia.change_race_kirin": "Метаморфозы кирина",
|
||||
"effect.unicopia.change_race_hippogriff": "Метаморфозы гиппогрифа",
|
||||
|
||||
"effect.unicopia.morph_race_earth": "Превращение в земного пони",
|
||||
"effect.unicopia.morph_race_unicorn": "Превращение в единорога",
|
||||
"effect.unicopia.morph_race_pegasus": "Превращение в пегаса",
|
||||
|
@ -417,115 +377,92 @@
|
|||
"effect.unicopia.morph_race_bat": "Превращение в бэтпони",
|
||||
"effect.unicopia.morph_race_kirin": "Превращение в кирина",
|
||||
"effect.unicopia.morph_race_hippogriff": "Превращение в гиппогрифа",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.tribe_swap_earth": "Зелье метаморфоз земного пони",
|
||||
"item.minecraft.splash_potion.effect.unicopia.tribe_swap_earth": "Взрывное зелье метаморфоз земного пони",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.tribe_swap_earth": "Туманное зелье метаморфоз земного пони",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.tribe_swap_earth": "Стрела метаморфоз земного пони",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.tribe_swap_unicorn": "Зелье метаморфоз единорога",
|
||||
"item.minecraft.splash_potion.effect.unicopia.tribe_swap_unicorn": "Взрывное зелье метаморфоз единорога",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.tribe_swap_unicorn": "Туманное зелье метаморфоз единорога",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.tribe_swap_unicorn": "Стрела метаморфоз единорога",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.tribe_swap_pegasus": "Зелье метаморфоз пегаса",
|
||||
"item.minecraft.splash_potion.effect.unicopia.tribe_swap_pegasus": "Взрывное зелье метаморфоз пегаса",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.tribe_swap_pegasus": "Туманное зелье метаморфоз пегаса",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.tribe_swap_pegasus": "Стрела метаморфоз пегаса",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.tribe_swap_changeling": "Зелье метаморфоз чейнджлинга",
|
||||
"item.minecraft.splash_potion.effect.unicopia.tribe_swap_changeling": "Взрывное зелье метаморфоз чейнджлинга",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.tribe_swap_changeling": "Туманное зелье метаморфоз чейнджлинга",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.tribe_swap_changeling": "Стрела метаморфоз чейнджлинга",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.tribe_swap_bat": "Зелье метаморфоз бэтпони",
|
||||
"item.minecraft.splash_potion.effect.unicopia.tribe_swap_bat": "Взрывное зелье метаморфоз бэтпони",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.tribe_swap_bat": "Туманное зелье метаморфоз бэтпони",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.tribe_swap_bat": "Стрела метаморфоз бэтпони",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.tribe_swap_kirin": "Зелье метаморфоз кирина",
|
||||
"item.minecraft.splash_potion.effect.unicopia.tribe_swap_kirin": "Взрывное зелье метаморфоз кирина",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.tribe_swap_kirin": "Туманное зелье метаморфоз кирина",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.tribe_swap_kirin": "Стрела метаморфоз кирина",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.tribe_swap_hippogriff": "Зелье метаморфоз гиппогрифа",
|
||||
"item.minecraft.splash_potion.effect.unicopia.tribe_swap_hippogriff": "Взрывное зелье метаморфоз гиппогрифа",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.tribe_swap_hippogriff": "Туманное зелье метаморфоз гиппогрифа",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.tribe_swap_hippogriff": "Стрела метаморфоз гиппогрифа",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.short_morph_earth": "Зелье быстрого превращения в земного пони",
|
||||
"item.minecraft.splash_potion.effect.unicopia.short_morph_earth": "Взрывное зелье быстрого превращения в земного пони",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.short_morph_earth": "Туманное зелье быстрого превращения в земного пони",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.short_morph_earth": "Стрела быстрого превращения в земного пони",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.short_morph_unicorn": "Зелье быстрого превращения в единорога",
|
||||
"item.minecraft.splash_potion.effect.unicopia.short_morph_unicorn": "Взрывное зелье быстрого превращения в единорога",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.short_morph_unicorn": "Туманное зелье быстрого превращения в единорога",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.short_morph_unicorn": "Стрела быстрого превращения в единорога",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.short_morph_pegasus": "Зелье быстрого превращения в пегаса",
|
||||
"item.minecraft.splash_potion.effect.unicopia.short_morph_pegasus": "Взрывное зелье быстрого превращения в пегаса",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.short_morph_pegasus": "Туманное зелье быстрого превращения в пегаса",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.short_morph_pegasus": "Стрела быстрого превращения в пегаса",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.short_morph_changeling": "Зелье быстрого превращения в чейнджлинга",
|
||||
"item.minecraft.splash_potion.effect.unicopia.short_morph_changeling": "Взрывное зелье быстрого превращения в чейнджлинга",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.short_morph_changeling": "Туманное зелье быстрого превращения в чейнджлинга",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.short_morph_changeling": "Стрела быстрого превращения в чейнджлинга",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.short_morph_bat": "Зелье быстрого превращения в бэтпони",
|
||||
"item.minecraft.splash_potion.effect.unicopia.short_morph_bat": "Взрывное зелье быстрого превращения в бэтпони",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.short_morph_bat": "Туманное зелье быстрого превращения в бэтпони",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.short_morph_bat": "Стрела быстрого превращения в бэтпони",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.short_morph_kirin": "Зелье быстрого превращения в кирина",
|
||||
"item.minecraft.splash_potion.effect.unicopia.short_morph_kirin": "Взрывное зелье быстрого превращения в кирина",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.short_morph_kirin": "Туманное зелье быстрого превращения в кирина",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.short_morph_kirin": "Стрела быстрого превращения в кирина",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.short_morph_hippogriff": "Зелье быстрого превращения в гиппогрифа",
|
||||
"item.minecraft.splash_potion.effect.unicopia.short_morph_hippogriff": "Взрывное зелье быстрого превращения в гиппогрифа",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.short_morph_hippogriff": "Туманное зелье быстрого превращения в гиппогрифа",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.short_morph_hippogriff": "Стрела быстрого превращения в гиппогрифа",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.long_morph_earth": "Зелье долгого превращения в земного пони",
|
||||
"item.minecraft.splash_potion.effect.unicopia.long_morph_earth": "Взрывное зелье долгого превращения в земного пони",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.long_morph_earth": "Туманное зелье долгого превращения в земного пони",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.long_morph_earth": "Стрела долгого превращения в земного пони",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.long_morph_unicorn": "Зелье долгого превращения в единорога",
|
||||
"item.minecraft.splash_potion.effect.unicopia.long_morph_unicorn": "Взрывное зелье долгого превращения в единорога",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.long_morph_unicorn": "Туманное зелье долгого превращения в единорога",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.long_morph_unicorn": "Стрела долгого превращения в единорога",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.long_morph_pegasus": "Зелье долгого превращения в пегаса",
|
||||
"item.minecraft.splash_potion.effect.unicopia.long_morph_pegasus": "Взрывное зелье долгого превращения в пегаса",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.long_morph_pegasus": "Туманное зелье долгого превращения в пегаса",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.long_morph_pegasus": "Стрела долгого превращения в пегаса",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.long_morph_changeling": "Зелье долгого превращения в чейнджлинга",
|
||||
"item.minecraft.splash_potion.effect.unicopia.long_morph_changeling": "Взрывное зелье долгого превращения в чейнджлинга",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.long_morph_changeling": "Туманное зелье долгого превращения в чейнджлинга",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.long_morph_changeling": "Стрела долгого превращения в чейнджлинга",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.long_morph_bat": "Зелье долгого превращения в бэтпони",
|
||||
"item.minecraft.splash_potion.effect.unicopia.long_morph_bat": "Взрывное зелье долгого превращения в бэтпони",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.long_morph_bat": "Туманное зелье долгого превращения в бэтпони",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.long_morph_bat": "Стрела долгого превращения в бэтпони",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.long_morph_kirin": "Зелье долгого превращения в кирина",
|
||||
"item.minecraft.splash_potion.effect.unicopia.long_morph_kirin": "Взрывное зелье долгого превращения в кирина",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.long_morph_kirin": "Туманное зелье долгого превращения в кирина",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.long_morph_kirin": "Стрела долгого превращения в кирина",
|
||||
|
||||
"item.minecraft.potion.effect.unicopia.long_morph_hippogriff": "Зелье долгого превращения в гиппогрифа",
|
||||
"item.minecraft.splash_potion.effect.unicopia.long_morph_hippogriff": "Взрывное зелье долгого превращения в гиппогрифа",
|
||||
"item.minecraft.lingering_potion.effect.unicopia.long_morph_hippogriff": "Туманное зелье долгого превращения в гиппогрифа",
|
||||
"item.minecraft.tipped_arrow.effect.unicopia.long_morph_hippogriff": "Стрела долгого превращения в гиппогрифа",
|
||||
|
||||
"potion.withChance": "Шанс 1 к %s получить %s",
|
||||
"potion.potency.6": "VII",
|
||||
|
||||
"spell.unicopia.frost": "Заморозка",
|
||||
"spell.unicopia.frost.lore": "Холодный на ощупь, этот самоцвет заморозит всё, на что он будет использован",
|
||||
"spell.unicopia.hydrophobic": "Отталкивание воды",
|
||||
|
@ -576,7 +513,6 @@
|
|||
"spell.unicopia.catapult.lore": "Хватает ближайший блок или объект и подбрасывает его в воздух",
|
||||
"spell.unicopia.dispel_evil": "Изгнание зла",
|
||||
"spell.unicopia.dispel_evil.lore": "Изгоняет все находящиеся поблизости неземные силы",
|
||||
|
||||
"trait.unicopia.strength.name": "Силы",
|
||||
"trait.unicopia.strength.description": "Наделяет физической силой или повышает выносливость.\nЗаклинания с большим количеством силы бьют сильнее и действуют дольше.",
|
||||
"trait.unicopia.focus.name": "Фокусировки",
|
||||
|
@ -617,7 +553,6 @@
|
|||
"trait.unicopia.life.description": "Воплощает энергию, которая живёт внутри всех живых существ.",
|
||||
"trait.unicopia.poison.name": "Яда",
|
||||
"trait.unicopia.poison.description": "Смертоносный дротик убивает зверя",
|
||||
|
||||
"unicopia.diet.information": "Информация о диете:",
|
||||
"unicopia.diet.side_effects": "Побочные эффекты:",
|
||||
"unicopia.diet.not_edible": "Предмет не съедобен",
|
||||
|
@ -626,7 +561,6 @@
|
|||
"unicopia.diet.saturation.detailed": "Насыщения получено: %s из %s (%s%%)",
|
||||
"unicopia.diet.hunger": "Коэффициент голода: %s%%",
|
||||
"unicopia.diet.saturation": "Коэффициент насыщения: %s%%",
|
||||
|
||||
"food_group.unicopia.meat.rotten": "Гниющее мясо",
|
||||
"food_group.unicopia.meat.raw": "Свежее мясо",
|
||||
"food_group.unicopia.meat.cooked": "Готовое мясо",
|
||||
|
@ -664,18 +598,15 @@
|
|||
"food_group.unicopia.foraging.dangerous": "Опасное",
|
||||
"food_group.unicopia.foraging.blinding": "Токсичное",
|
||||
"food_group.unicopia.foraging.leafy_greens": "Листовая зелень",
|
||||
|
||||
"toxicity.safe.name": "Безопасное",
|
||||
"toxicity.mild.name": "Слаботоксичное",
|
||||
"toxicity.fair.name": "Достаточно токсичное",
|
||||
"toxicity.severe.name": "Токсичное",
|
||||
"toxicity.lethal.name": "Смертельное",
|
||||
|
||||
"affliction.unicopia.empty": "Нет эффекта",
|
||||
"affliction.unicopia.healing": "Восполняет %s%% здоровья",
|
||||
"affliction.unicopia.cure_love_sickness": "Лечит от любовной болезни",
|
||||
"affliction.unicopia.lose_hunger": "Теряет %s%% сытости",
|
||||
|
||||
"ability.unicopia.shoot": "Стрелять магией",
|
||||
"ability.unicopia.shoot.with_spell": "Стрелять \"%s\"",
|
||||
"ability.unicopia.shoot.with_spell.active": "Стрельба \"%s\"",
|
||||
|
@ -719,23 +650,18 @@
|
|||
"ability.unicopia.dash": "Рывок",
|
||||
"ability.unicopia.change_form": "Изменить форму",
|
||||
"ability.unicopia.sonar_pulse": "Сонарный импульс",
|
||||
|
||||
"gui.unicopia.trait.label": "Элемент %s",
|
||||
"gui.unicopia.trait.group": "\n %s",
|
||||
"gui.unicopia.trait.corruption": "\n %s порчи",
|
||||
|
||||
"gui.unicopia.dispell_screen.cancel": "Нажмите ESC для выхода",
|
||||
"gui.unicopia.dispell_screen.spell_type": "Тип заклинания: %s",
|
||||
"gui.unicopia.dispell_screen.affinity": "Сродство: %s",
|
||||
"gui.unicopia.dispell_screen.time_left": "Времени осталось: %s",
|
||||
"gui.unicopia.dispell_screen.discard": "[Нажмите для отмены]",
|
||||
|
||||
"gui.unicopia": "Unicopia...",
|
||||
"gui.unicopia.page_num": "%d из %d",
|
||||
|
||||
"respawn.reason.joined_new_tribe": "%1$s был перерождён как %2$s",
|
||||
"respawn.reason.illegal_race": "Раса %s не разрешена конфигурацией вашего сервера.",
|
||||
|
||||
"gui.unicopia.tribe_selection.respawn": "Вы умерли.",
|
||||
"gui.unicopia.tribe_selection.respawn.journey": "Но конец - это еще не всё, потому что в конце каждого конца есть другое начало.",
|
||||
"gui.unicopia.tribe_selection.respawn.choice": "Выбирайте мудро, потому что выбор, который вы сделаете сейчас, изменит мир вокруг вас и пути, по которым вы можете пойти.",
|
||||
|
@ -745,7 +671,6 @@
|
|||
"gui.unicopia.tribe_selection.preference": "Ваше текущее предпочитаемое племя установлено на %s.",
|
||||
"gui.unicopia.tribe_selection.options": "Доступные племена:",
|
||||
"gui.unicopia.tribe_selection.options.disabled": "Опция недоступна",
|
||||
|
||||
"gui.unicopia.tribe_selection.describe.unicopia.earth": "Присоединяйтесь к племени земных пони",
|
||||
"gui.unicopia.tribe_selection.describe.unicopia.unicorn": "Присоединитесь к племени единорогов, овладейте магическими искусствами",
|
||||
"gui.unicopia.tribe_selection.describe.unicopia.pegasus": "Присоединяйтесь к племени пегасов, парите вместе с Вондерболтами",
|
||||
|
@ -753,14 +678,11 @@
|
|||
"gui.unicopia.tribe_selection.describe.unicopia.kirin": "Присоединяйтесь к Деревне Киринов, дайте обет молчания",
|
||||
"gui.unicopia.tribe_selection.describe.unicopia.hippogriff": "Присоединяйтесь к племени гиппогрифов, кричите на своих соседей",
|
||||
"gui.unicopia.tribe_selection.describe.unicopia.changeling": "Присоединяйтесь к Улью Чейнджлингов, ваша королева требует этого",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm": "Вы выбрали племя \"%s\"",
|
||||
"gui.unicopia.tribe_selection.confirm.goods": "%s имеют следующие преимущества:",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.goods.1.unicopia.human": " - Всеядны и могут есть все виды пищи, кроме любви",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.2.unicopia.human": " - Противоположные большие пальцы",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.3.unicopia.human": " - Ходят прямо",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.goods.1.unicopia.earth": " - Более сильная отдача и сопротивление магии",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.2.unicopia.earth": " - Дополнительный вес делает их эффективными против магии и грубой силы",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.3.unicopia.earth": " - Особая связь с землёй, которая делает земледелие на 10,000% эффективнее!",
|
||||
|
@ -768,82 +690,65 @@
|
|||
"gui.unicopia.tribe_selection.confirm.goods.5.unicopia.earth": " - Единственные, кто может обняться с крипером и выжить",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.6.unicopia.earth": " - Могут есть камни",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.7.unicopia.earth": " - Милые висячие пони-ушки",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.goods.1.unicopia.unicorn": " - Телепортация и магические заклинания",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.2.unicopia.unicorn": " - Исследуют и создают магические артефакты, усиливающие их способности",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.3.unicopia.unicorn": " - Могут использовать магию для обнаружения или раскрытия находящихся поблизости чейнджлингов",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.4.unicopia.unicorn": " - Имеют заостренные палки на голове",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.goods.1.unicopia.pegasus": " - Полёт и способность к тренировкам для повышения выносливости",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.2.unicopia.pegasus": " - Используют накопленную ману для выполнения мощной звуковой радуги",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.3.unicopia.pegasus": " - Двигаются быстрее и получают меньше урона от падения",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.4.unicopia.pegasus": " - Можно напрямую взаимодействовать с облачными предметами и блоками",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.5.unicopia.pegasus": " - Могут есть овощи и некоторые виды рыбы",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.goods.1.unicopia.bat": " - Полёт и способность к тренировкам для повышения выносливости",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.2.unicopia.bat": " - Лучше видят ночью",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.3.unicopia.bat": " - Способность цепляться за нижнюю часть блоков",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.4.unicopia.bat": " - Имеют ужасающий, но очаровательный (и слегка раздражающий) визг",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.goods.1.unicopia.changeling": " - Могут летать и зависать на месте",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.2.unicopia.changeling": " - Перевоплощаются практически в кого и что угодно",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.3.unicopia.changeling": " - Прилипают к стенам и могут перелезть практически через всё",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.4.unicopia.changeling": " - Плотоядны. Могут есть всё, от чего не тошнит",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.goods.1.unicopia.kirin": " - Невосприимчивы ко всем видам огненного урона",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.2.unicopia.kirin": " - Могут открыть способность ярости, получая урон",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.3.unicopia.kirin": " - В обычном состоянии бесшумны и могут спокойно ходить рядом с Хранителем",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.4.unicopia.kirin": " - Могут есть фрукты и овощи, мясо и некоторые виды кормов, обычно ядовитые для других рас",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.goods.1.unicopia.hippogriff": " - Полёт и способность к тренировкам для повышения выносливости",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.2.unicopia.hippogriff": " - Могут совершать рывки в полёте",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.3.unicopia.hippogriff": " - Имеют острый и шумный клюв для кричания и клевания",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.4.unicopia.hippogriff": " - Могут употреблять сырую и варёную рыбу, варёное мясо",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.5.unicopia.hippogriff": " - При поедании шишек восстанавливают здоровье",
|
||||
"gui.unicopia.tribe_selection.confirm.goods.6.unicopia.hippogriff": " - Любят лестницы",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.bads": "но они...",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.bads.1.unicopia.human": " - Не имеют никаких магических способностей",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.2.unicopia.human": " - Требуют элитры для полёта",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.3.unicopia.human": " - Должны выращивают пищу по старинке, с помощью тяжёлой работы и ручного труда",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.4.unicopia.human": " - Не имеют висячих ушей",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.bads.1.unicopia.earth": " - Не могут летать",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.2.unicopia.earth": " - Слабы к некоторым видам магии",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.3.unicopia.earth": " - Могут есть только растения и овощи",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.4.unicopia.earth": " - Тяжелее и передвигаются медленнее, чем другие пони",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.bads.1.unicopia.unicorn": " - Не могут летать",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.2.unicopia.unicorn": " - Слабы к грубым атакам",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.3.unicopia.unicorn": " - Могут есть только растения и овощи",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.bads.1.unicopia.pegasus": " - Слабы к грубым атакам",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.2.unicopia.pegasus": " - Должны отдыхать между полётами",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.3.unicopia.pegasus": " - Не могут использовать магию без помощи",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.bads.1.unicopia.bat": " - Слабы к грубым атакам",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.2.unicopia.bat": " - Должны отдыхать между полётами",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.3.unicopia.bat": " - Иногда боятся даже самих себя",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.4.unicopia.bat": " - Плотоядны. Могут есть сырое и варёное мясо или питаться исключительно ворованной любовью",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.bads.1.unicopia.changeling": " - Постоянно голодают",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.2.unicopia.changeling": " - Требуют любви, которую собирают с пони или других мобов для поддержания своего рациона",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.3.unicopia.changeling": " - Становятся больными от употребления самой обычной пищи и должны собирать любовь, чтобы ускорить излечение",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.bads.1.unicopia.kirin": " - Теряют свою бесшумность в состоянии ярости",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.2.unicopia.kirin": " - Поджигают вещи, особенно когда близки к ярости",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.3.unicopia.kirin": " - Легче, чем другие пони, и сильнее оттакливаются",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.4.unicopia.kirin": " - Не любят воду",
|
||||
|
||||
"gui.unicopia.tribe_selection.confirm.bads.1.unicopia.hippogriff": " - Слабы к грубым атакам",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.2.unicopia.hippogriff": " - Не могут взаимодействовать с облаками",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.3.unicopia.hippogriff": " - Должны отдыхать между полётами, чтобы восстановить силы",
|
||||
"gui.unicopia.tribe_selection.confirm.bads.4.unicopia.hippogriff": " - Имеют куриный мозг",
|
||||
|
||||
"gui.unicopia.tribe_selection.join": "Присоединиться",
|
||||
"gui.unicopia.tribe_selection.cancel": "Назад",
|
||||
|
||||
"gui.unicopia.spellbook.empty_spell_slot": "Пустой слот для заклинаний",
|
||||
"gui.unicopia.spellbook.page.inventory": "Инвентарь",
|
||||
"gui.unicopia.spellbook.page.recipes": "Рецепты",
|
||||
|
@ -853,7 +758,6 @@
|
|||
"gui.unicopia.spellbook.page.requirements.entry.item": "- %1$sx %2$s",
|
||||
"gui.unicopia.spellbook.page.requirements.entry.trait": "- Не менее %1$sx черт %2$s",
|
||||
"gui.unicopia.spellbook.page.requirements.entry.spell": "- %1$sx самоцвет \"%2$s\"",
|
||||
|
||||
"gui.unicopia.spellbook.recipe.requires": "Требования:",
|
||||
"gui.unicopia.spellbook.author1.sign_off": "По приказу принцессы",
|
||||
"gui.unicopia.spellbook.author1.sign_off.b": "По приказу принцессы, так ужасно сожалея",
|
||||
|
@ -891,7 +795,6 @@
|
|||
"gui.unicopia.spellbook.chapter.introduction.p9.title": "13-ое Мэйра 12-го",
|
||||
"gui.unicopia.spellbook.chapter.introduction.p9.1.body": "Извините за долгую задержку с обновлениями. Я много работал, изучая различные заклинания и определяя свой подход.",
|
||||
"gui.unicopia.spellbook.chapter.introduction.p9.2.body": "Огонь становится очень интересным аспектом, учитывая, что черты для него легко доступны.",
|
||||
|
||||
"gui.unicopia.spellbook.chapter.fire.p1.title": "Гл.2 - Магия огня",
|
||||
"gui.unicopia.spellbook.chapter.fire.p2.title": "9-ое Пониюня 12-го",
|
||||
"gui.unicopia.spellbook.chapter.fire.p2.1.body": "Это заняло больше времени, чем я ожидал, - почти месяц! Ха! Но я представляю тебе, дорогой читатель, свои находки для первой элементарной формы магии: ОГОНЬ.",
|
||||
|
@ -945,7 +848,6 @@
|
|||
"gui.unicopia.spellbook.chapter.fire.p18.title": "Черновик: 9-ое Пониюня 12-го",
|
||||
"gui.unicopia.spellbook.chapter.fire.p18.1.body": "Магия огня оказалась немного более... непредсказуемой. Каждый раз, когда я делаю успехи, она находит способ отбросить меня назад.",
|
||||
"gui.unicopia.spellbook.chapter.fire.p18.2.body": "Но я не могу остановиться... Мне сказали, что ситуация на западе становится всё более ужасной. Они попросили меня ускорить темп и создать что-то, что мы сможем использовать, чтобы одержать верх над §kШтормом Чейнджлингов§r.",
|
||||
|
||||
"gui.unicopia.spellbook.chapter.ice.p1.title": "Гл.1 - Магия льда",
|
||||
"gui.unicopia.spellbook.chapter.ice.p2.title": "4-ое Пониюля 12-го",
|
||||
"gui.unicopia.spellbook.chapter.ice.p2.1.body": "А вот это интересная штучка. Довольно простая, признаюсь, но Луна настояла, чтобы я сделал что-нибудь холодное, чтобы помочь нам справиться с этой проклятой жарой.",
|
||||
|
@ -1013,7 +915,6 @@
|
|||
"gui.unicopia.spellbook.chapter.ice.hydrophobic.2.body": "Я называю это отталкиванием воды, потому что оно именно так и действует: Отталкивает воду от заклинателя.",
|
||||
"gui.unicopia.spellbook.chapter.ice.hydrophobic.modifier.1": "* Добавив больше фокусировки, вы можете увеличить продолжительность заклинания.",
|
||||
"gui.unicopia.spellbook.chapter.ice.hydrophobic.modifier.2": "* Добавьте черту щедрости, чтобы привязать это заклинание к месту, а не к себе.",
|
||||
|
||||
"gui.unicopia.spellbook.chapter.air.p1.title": "Гл.4 - Магия воздуха",
|
||||
"gui.unicopia.spellbook.chapter.air.p2.title": "1-ое Хуфгуста 12-го",
|
||||
"gui.unicopia.spellbook.chapter.air.p1.1.body": "Новый месяц, новая глава. Малышке Луне надоело сидеть в башне целый день (да и кто её винит? Мы выполняем это задание уже больше двух месяцев.)",
|
||||
|
@ -1058,7 +959,6 @@
|
|||
"gui.unicopia.spellbook.chapter.air.p15.2.body": "Мне пришлось всё время следить за тем, чтобы Луна не выпала, и, конечно, отвечать на вопросы о разных видах облаков. К счастью, оператор воздушного шара был рядом, чтобы помочь разобраться в тонкостях.",
|
||||
"gui.unicopia.spellbook.chapter.air.p15.3.body": "Находясь здесь, над всеми нашими проблемами, я на мгновение забываю об остальном мире. Это возвращает меня в более простые времена, до...",
|
||||
"gui.unicopia.spellbook.chapter.air.p15.4.body": "Конечно, вспышки взрывов на западе должны были всё испортить. Кажется, на горизонте надвигается буря. Я очень надеюсь, что это не будет плохим предзнаменованием...",
|
||||
|
||||
"gui.unicopia.spellbook.chapter.dark_magic.p1.title": "Гл.5 - Арканная магия",
|
||||
"gui.unicopia.spellbook.chapter.dark_magic.p2.title": "30-ое Хуфгуста 12-го",
|
||||
"gui.unicopia.spellbook.chapter.dark_magic.p2.1.body": "Сегодня пришло новое письмо от короны. Похоже, ситуация на западе ухудшается, и хотя до сих пор они были довольны моей работой, теперь они давят на меня, чтобы я создал что-то более разрушительное.",
|
||||
|
@ -1141,7 +1041,6 @@
|
|||
"gui.unicopia.spellbook.chapter.dark_magic.p27.4.body": "Нет, не может быть.",
|
||||
"gui.unicopia.spellbook.chapter.dark_magic.p28.1.body": "Я нашёл это заклинание под старыми записями во время уборки лаборатории. Оно... простое и сложное в обращении, но оно справляется со своей задачей.",
|
||||
"gui.unicopia.spellbook.chapter.dark_magic.dispel_evil.modifier.1": "* Добавьте черту силы для увеличения дальности действия.",
|
||||
|
||||
"gui.unicopia.spellbook.chapter.otherworldly.p1.title": "Гл.6 - Потустороннее",
|
||||
"gui.unicopia.spellbook.chapter.otherworldly.p2.title": "1-ое Круптября 12-го",
|
||||
"gui.unicopia.spellbook.chapter.otherworldly.p2.1.body": "Эта глава служит исследованием миров за пределами нашего собственного и погружением в то, чего большинство единорогов обычно сторонятся.",
|
||||
|
@ -1156,7 +1055,6 @@
|
|||
"gui.unicopia.spellbook.chapter.otherworldly.mind_swap.1.body": "Продолжая исследования способностей чейнджлингов, я усовершенствовал его мимическое заклинание, добавив немного хаоса.",
|
||||
"gui.unicopia.spellbook.chapter.otherworldly.mind_swap.2.body": "Обмен разумом распространяет действие мимики на двух личностей, фактически меняя их тела местами на ограниченное время.",
|
||||
"gui.unicopia.spellbook.chapter.otherworldly.mind_swap.3.body": "* Добавив больше фокусировки, вы можете увеличить продолжительность заклинания.",
|
||||
|
||||
"gui.unicopia.spellbook.chapter.artefacts.p1.title": "Гл.7 - Артефакты",
|
||||
"gui.unicopia.spellbook.chapter.artefacts.p2.title": "2-ое Мэйра 12-го",
|
||||
"gui.unicopia.spellbook.chapter.artefacts.p2.1.body": "Далее следует сборник исследований некоторых объектов, представляющих интерес, выявленных в ходе моих исследований.",
|
||||
|
@ -1210,10 +1108,8 @@
|
|||
"gui.unicopia.spellbook.chapter.artefacts.alicorn_amulet.title": "23-е Пониюля 12-го",
|
||||
"gui.unicopia.spellbook.chapter.artefacts.alicorn_amulet.2.body": "Амулет аликорна - это мощный источник тёмной магии, созданный неизвестным магом в попытке создать совершенное существо.",
|
||||
"gui.unicopia.spellbook.chapter.artefacts.alicorn_amulet.3.body": "Он сочетает в себе черты всех рас в одной мощной форме, но его трудно контролировать, и он вызывает привыкание. Любой, кто использует его, быстро становится зависимым от него, и лишь немногие, кто пытался избавиться от него, выдерживают это испытание.",
|
||||
|
||||
"gui.unicopia.action.spells_cleared": "Удалены все заклинания",
|
||||
"gui.unicopia.action.no_spells_cleared": "У вас нет активных заклинаний",
|
||||
|
||||
"chapter.unicopia.crafting": "Создание заклинаний",
|
||||
"chapter.unicopia.profile": "Профиль",
|
||||
"chapter.unicopia.traits": "Исследования",
|
||||
|
@ -1224,107 +1120,91 @@
|
|||
"chapter.unicopia.dark_magic": "Тёмная магия",
|
||||
"chapter.unicopia.the_otherworldly": "Запретная магия",
|
||||
"chapter.unicopia.crystal_heart": "Артефакты",
|
||||
|
||||
"experience.unicopia.pure.magical_kindergartner": "Свежая кровь",
|
||||
"experience.unicopia.impure.magical_kindergartner": "Испорченный",
|
||||
"experience.unicopia.tainted.magical_kindergartner": "Заблудший",
|
||||
"experience.unicopia.twisted.magical_kindergartner": "Потерянный",
|
||||
"experience.unicopia.corrupt.magical_kindergartner": "Пони-изверг",
|
||||
"experience.unicopia.monstrous.magical_kindergartner": "Злой жеребёнок",
|
||||
|
||||
"experience.unicopia.pure.friendship_student": "Ученик дружбы",
|
||||
"experience.unicopia.impure.friendship_student": "Испорченная душа",
|
||||
"experience.unicopia.tainted.friendship_student": "Заблудшая душа",
|
||||
"experience.unicopia.twisted.friendship_student": "Потерянная душа",
|
||||
"experience.unicopia.corrupt.friendship_student": "Зловещий ученик дружбы",
|
||||
"experience.unicopia.monstrous.friendship_student": "Чудовищная душа",
|
||||
|
||||
"experience.unicopia.pure.senior_friendship_student": "Многообещающий ученик дружбы",
|
||||
"experience.unicopia.impure.senior_friendship_student": "Испорченный студент дружбы",
|
||||
"experience.unicopia.tainted.senior_friendship_student": "Заблудший студент дружбы",
|
||||
"experience.unicopia.twisted.senior_friendship_student": "Влияние группы",
|
||||
"experience.unicopia.corrupt.senior_friendship_student": "Зловещий друг",
|
||||
"experience.unicopia.monstrous.senior_friendship_student": "Культист обучения",
|
||||
|
||||
"experience.unicopia.pure.junior_mage": "Младший маг",
|
||||
"experience.unicopia.impure.junior_mage": "Испорченный младший маг",
|
||||
"experience.unicopia.tainted.junior_mage": "Заблудший младший маг",
|
||||
"experience.unicopia.twisted.junior_mage": "Зловещий младший маг",
|
||||
"experience.unicopia.corrupt.junior_mage": "Младший антимаг",
|
||||
"experience.unicopia.monstrous.junior_mage": "Младший культист",
|
||||
|
||||
"experience.unicopia.pure.mage": "Маг",
|
||||
"experience.unicopia.impure.mage": "Испорченный маг",
|
||||
"experience.unicopia.tainted.mage": "Заблудший маг",
|
||||
"experience.unicopia.twisted.mage": "Зловещий маг",
|
||||
"experience.unicopia.corrupt.mage": "Анти-маг",
|
||||
"experience.unicopia.monstrous.mage": "Культист",
|
||||
|
||||
"experience.unicopia.pure.archmage": "Архимаг",
|
||||
"experience.unicopia.impure.archmage": "Испорченный архимаг",
|
||||
"experience.unicopia.tainted.archmage": "Заблудший архимаг",
|
||||
"experience.unicopia.twisted.archmage": "Зловещий архимаг",
|
||||
"experience.unicopia.corrupt.archmage": "Анти-архимаг",
|
||||
"experience.unicopia.monstrous.archmage": "Опытный культист",
|
||||
|
||||
"experience.unicopia.pure.archmagus": "Архмагус",
|
||||
"experience.unicopia.impure.archmagus": "Испорченный архимагус",
|
||||
"experience.unicopia.tainted.archmagus": "Заблудший архимагус",
|
||||
"experience.unicopia.twisted.archmagus": "Зловещий архимагус",
|
||||
"experience.unicopia.corrupt.archmagus": "Анти-архимагус",
|
||||
"experience.unicopia.monstrous.archmagus": "Старший культист",
|
||||
|
||||
"experience.unicopia.pure.senior_archmagus": "Старший архимагус",
|
||||
"experience.unicopia.impure.senior_archmagus": "Испорченный старший архимагус",
|
||||
"experience.unicopia.tainted.senior_archmagus": "Заблудший старший архимагус",
|
||||
"experience.unicopia.twisted.senior_archmagus": "Зловещий старший архимагус",
|
||||
"experience.unicopia.corrupt.senior_archmagus": "Старший анти-архимагус",
|
||||
"experience.unicopia.monstrous.senior_archmagus": "Лидер секты",
|
||||
|
||||
"experience.unicopia.pure.ascended_senior_archmagus": "Вознесённый старший архимагус",
|
||||
"experience.unicopia.impure.ascended_senior_archmagus": "Испорченный старший архимагус",
|
||||
"experience.unicopia.tainted.ascended_senior_archmagus": "Заблудший старший архимагус",
|
||||
"experience.unicopia.twisted.ascended_senior_archmagus": "Падший старший архимагус",
|
||||
"experience.unicopia.corrupt.ascended_senior_archmagus": "Теневой старший анти-архимагус",
|
||||
"experience.unicopia.monstrous.ascended_senior_archmagus": "Лидер тёмного культа",
|
||||
|
||||
"experience.unicopia.pure.demi_god": "Стремящаяся принцесса",
|
||||
"experience.unicopia.impure.demi_god": "Испорченная стремящаяся принцесса",
|
||||
"experience.unicopia.tainted.demi_god": "Заблудшая стремящаяся принцесса",
|
||||
"experience.unicopia.twisted.demi_god": "Падшая принцесса",
|
||||
"experience.unicopia.corrupt.demi_god": "Восходящий Тёмный Лорд",
|
||||
"experience.unicopia.monstrous.demi_god": "Восходящий Тёмный Властелин",
|
||||
|
||||
"experience.unicopia.pure.arch_demi_god": "Многообещающая принцесса",
|
||||
"experience.unicopia.impure.arch_demi_god": "Испорченная принцесса",
|
||||
"experience.unicopia.tainted.arch_demi_god": "Заблудшая принцесса",
|
||||
"experience.unicopia.twisted.arch_demi_god": "Падший полубог",
|
||||
"experience.unicopia.corrupt.arch_demi_god": "Тёмный полубог",
|
||||
"experience.unicopia.monstrous.arch_demi_god": "Тёмный Властелин",
|
||||
|
||||
"experience.unicopia.pure.alicorn_princess": "Принцесса аликорн",
|
||||
"experience.unicopia.impure.alicorn_princess": "Испорченная принцесса аликорн",
|
||||
"experience.unicopia.tainted.alicorn_princess": "Заблудшая принцесса аликорн",
|
||||
"experience.unicopia.twisted.alicorn_princess": "Падшая принцесса Аликорн",
|
||||
"experience.unicopia.corrupt.alicorn_princess": "Теневой Лорд аликорн",
|
||||
"experience.unicopia.monstrous.alicorn_princess": "Тёмный Властелин аликорн",
|
||||
|
||||
"experience.unicopia.pure.polycorn_princess": "Принцесса поликорн",
|
||||
"experience.unicopia.impure.polycorn_princess": "Испорченная принцесса поликорн",
|
||||
"experience.unicopia.tainted.polycorn_princess": "Заблудшая принцесса поликорн",
|
||||
"experience.unicopia.twisted.polycorn_princess": "Падшая принцесса поликорн",
|
||||
"experience.unicopia.corrupt.polycorn_princess": "Теневая королева поликорн",
|
||||
"experience.unicopia.monstrous.polycorn_princess": "Тёмная королева поликорн",
|
||||
|
||||
"experience.unicopia.pure.faustian_legend": "Герой легенды",
|
||||
"experience.unicopia.impure.faustian_legend": "Легендарный",
|
||||
"experience.unicopia.tainted.faustian_legend": "Историческая фигура далёкого происхождения",
|
||||
"experience.unicopia.twisted.faustian_legend": "Тёмная личность легенды",
|
||||
"experience.unicopia.corrupt.faustian_legend": "Старый Бог",
|
||||
"experience.unicopia.monstrous.faustian_legend": "Потусторонний ужас",
|
||||
|
||||
"unicopia.category.name": "Способности пони",
|
||||
|
||||
"key.unicopia.primary": "Первичная способность",
|
||||
"key.unicopia.secondary": "Вторичная способность",
|
||||
"key.unicopia.tertiary": "Третичная способность",
|
||||
|
@ -1332,10 +1212,8 @@
|
|||
"key.unicopia.ability_modifier_tap": "Модификатор способностей VR (1-TAP)",
|
||||
"key.unicopia.ability_modifier_double_tap": "Модификатор способностей VR (2-TAP)",
|
||||
"key.unicopia.ability_modifier_triple_tap": "Модификатор способностей VR (3-TAP)",
|
||||
|
||||
"key.unicopia.hud_page_dn": "Предыдущая страница",
|
||||
"key.unicopia.hud_page_up": "Следующая страница",
|
||||
|
||||
"enchantment.unicopia.gem_finder": "Поиск самоцветов",
|
||||
"enchantment.unicopia.gem_finder.desc": "Издает низкий гул, когда вы приближаетесь к ценным рудам",
|
||||
"enchantment.unicopia.padded": "Мягкость",
|
||||
|
@ -1360,7 +1238,6 @@
|
|||
"enchantment.unicopia.consumption.desc": "Преобразует предметы, добытые с помощью инструмента, в опыт",
|
||||
"enchantment.unicopia.feather_touch": "Касание пера",
|
||||
"enchantment.unicopia.feather_touch.desc": "Позволяет ломать и размещать облачные блоки при держании",
|
||||
|
||||
"commands.race.success.self": "Изменена раса на %1$s.",
|
||||
"commands.race.success": "%1$s изменил расу на %2$s.",
|
||||
"commands.race.success.other": "Сменил расу %1$s на %2$s.",
|
||||
|
@ -1368,17 +1245,13 @@
|
|||
"commands.race.list": "Доступные расы:",
|
||||
"commands.race.permission": "Выбранная раса не разрешена на данном сервере.",
|
||||
"commands.race.fail": "\"%s\" не является признанной расой.",
|
||||
|
||||
"commands.skyangle.get": "Текущий угол наклона солнца составляет %sdeg",
|
||||
"commands.skyangle.set": "Изменён угол наклона неба на %sdeg",
|
||||
|
||||
"commands.race.tell.self": "Вы - ",
|
||||
"commands.race.tell.self.alt": "Вы - ",
|
||||
"commands.race.tell.other": "%s - это ",
|
||||
"commands.race.tell.other.alt": "%s - это ",
|
||||
|
||||
"commands.racelist.illegal": "Раса %s по умолчанию не может быть использована этой командой.",
|
||||
|
||||
"commands.racelist.get.allowed": "Разрешены (%s):",
|
||||
"commands.racelist.get.not_allowed": "Не разрешены (%s):",
|
||||
"commands.racelist.get.list_item": "- %s (%s)",
|
||||
|
@ -1391,10 +1264,8 @@
|
|||
"commands.racelist.allowed.failed": "Раса %1$s уже разрешена.",
|
||||
"commands.racelist.disallowed": "Раса %1$s удалена из списка разрешений.",
|
||||
"commands.racelist.disallowed.failed": "Раса %1$s уже не разрешена.",
|
||||
|
||||
"commands.worldtribe.success.get": "Раса по умолчанию для всех новых игроков в настоящее время установлена на: %s.",
|
||||
"commands.worldtribe.success.set": "Установка расы по умолчанию для новых игроков теперь имеет значение: %s.",
|
||||
|
||||
"commands.disguise.notfound": "Идентификатор сущности \"%s\" не существует.",
|
||||
"commands.disguise.removed": "Ваша маскировка была удалена.",
|
||||
"commands.disguise.removed.self": "Удалена собственная маскировка.",
|
||||
|
@ -1402,14 +1273,12 @@
|
|||
"commands.disguise.success": "Вы замаскировались как %s.",
|
||||
"commands.disguise.success.self": "Установил собственную маскировку на %s",
|
||||
"commands.disguise.success.other": "%s изменил маскировку на %s",
|
||||
|
||||
"commands.gravity.get": "Ваша гравитация равна %f",
|
||||
"commands.gravity.get.other": "%s имеет гравитацию %f",
|
||||
"commands.gravity.set": "Ваша гравитация была обновлена до %f",
|
||||
"commands.gravity.set.self": "Установить собственную гравитацию на %f",
|
||||
"commands.gravity.set.other": "Установить гравитацию %s на %f",
|
||||
"commands.gravity.set.multiple": "Обновлено %s сущностей",
|
||||
|
||||
"unicopia.options.title": "Опции Unicopia",
|
||||
"unicopia.options.toggle_ability_keys": "Нажатие кнопки способности вместо зажатия",
|
||||
"unicopia.options.ignore_mine_lp": "Игнорировать Mine Little Pony",
|
||||
|
@ -1425,12 +1294,10 @@
|
|||
"unicopia.options.world": "Настройки мира",
|
||||
"unicopia.options.world.default_race": "Раса по умолчанию: %s",
|
||||
"unicopia.options.lan": "Настройки многопользовательской игры (LAN)",
|
||||
|
||||
"command.unicopia.config.add": "[Config] Добавлено %s в свойство %s",
|
||||
"command.unicopia.config.remove": "[Config] Удалено %s из свойства %s",
|
||||
"command.unicopia.config.list": "[Config] Свойство (%s) содержит (%s) записей:",
|
||||
"command.unicopia.config.clear": "[Config] Удалены все значения из свойства %s",
|
||||
|
||||
"race.unicopia.unset": "Не выбрано",
|
||||
"race.unicopia.unset.alt": "не выбрано",
|
||||
"race.unicopia.human": "Человек",
|
||||
|
@ -1453,7 +1320,6 @@
|
|||
"race.unicopia.hippogriff.alt": "Гиппогрифы",
|
||||
"race.unicopia.seapony": "Морской пони",
|
||||
"race.unicopia.seapony.alt": "Морские пони",
|
||||
|
||||
"death.attack.unicopia.generic.and_also": "%1$s и %2$s",
|
||||
"death.attack.unicopia.generic.whilst_flying": "%1$s во время полёта",
|
||||
"death.attack.unicopia.tribe_swap": "%1$s был перерождён в другое племя",
|
||||
|
@ -1484,9 +1350,9 @@
|
|||
"death.attack.unicopia.life_draining.self": "%1$s был убит своим собственным заклинанием",
|
||||
"death.attack.unicopia.life_draining.player": "%1$s был убит заклинанием, созданным %2$s",
|
||||
"death.attack.unicopia.bat_screech": "%1$s был напуган до смерти",
|
||||
"death.attack.unicopia.bat_screech.self": "%1$ напугали себя до смерти",
|
||||
"death.attack.unicopia.bat_screech.player": "%2$s напугал %1$s",
|
||||
"death.attack.unicopia.bat_screech.item": "%1$s был напуган до смерти %2$s с помощью %3$s",
|
||||
"death.attack.unicopia.bat_screech.self": "%1$ напугали себя до смерти",
|
||||
"death.attack.unicopia.gravity_well_recoil": "%1$ превратился в спагетти",
|
||||
"death.attack.unicopia.gravity_well_recoil.player": "%1$s превращён в спагетти заклинанием, созданным %2$s",
|
||||
"death.attack.unicopia.gravity_well_recoil.item": "%1$s превращён в спагетти заклинанием, созданным %2$s с помощью %3$s",
|
||||
|
@ -1524,7 +1390,6 @@
|
|||
"death.attack.unicopia.horseshoe.player": "%2$s зарядил подковой в %1$s",
|
||||
"death.attack.unicopia.spikes": "%1$s был заколот до смерти",
|
||||
"death.attack.unicopia.spikes.player": "%1$s упал на шипы, пытаясь спастись от %2$s",
|
||||
|
||||
"death.fell.accident.ladder.pegasus": "%1$s забыл, что умеет летать, и упал с лестницы",
|
||||
"death.fell.accident.vines.pegasus": "%1$s забыл, что умеет летать, и упал с лозы",
|
||||
"death.fell.accident.weeping_vines.pegasus": "%1$ забыл, что умеет летать, и упал с плакучих лоз",
|
||||
|
@ -1534,7 +1399,6 @@
|
|||
"death.fell.accident.generic.pegasus": "%1$s забыл, что умеет летать",
|
||||
"death.fell.accident.pegasus": "%1$s забыл, что умеет летать",
|
||||
"death.fell.accident.water": "%1$s намочил свои крылья",
|
||||
|
||||
"painting.unicopia.hurricane.title": "Ураган",
|
||||
"painting.unicopia.hurricane.author": "Племя пегасов",
|
||||
"painting.unicopia.platinum.title": "Платина",
|
||||
|
@ -1565,7 +1429,6 @@
|
|||
"painting.unicopia.solar.author": "Королевская стража",
|
||||
"painting.unicopia.equality.title": "Равенство",
|
||||
"painting.unicopia.equality.author": "Старлайт Глиммер",
|
||||
|
||||
"unicopia.subtitle.flap_wings": "Взмах крыла",
|
||||
"unicopia.subtitle.dash": "Пони мчится",
|
||||
"unicopia.subtitle.wind_rush": "Порыв ветра",
|
||||
|
@ -1574,7 +1437,7 @@
|
|||
"unicopia.subtitle.batpony_eeee": "Бэтпони кричит",
|
||||
"unicopia.subtitle.sonar": "Сонарные импульсы",
|
||||
"unicopia.subtitle.changeling.transform": "Чейнджлинг трансформируется",
|
||||
"unicopia.subtitle.screech": "Гиппогриф кричит",
|
||||
"unicopia.subtitle.screech": "Игрок кричит",
|
||||
"unicopia.subtitle.pegasus.molt": "Пегас теряет перо",
|
||||
"unicopia.subtitle.unicorn.teleport": "Звук магии",
|
||||
"unicopia.subtitle.player.wololo": "Вололо!",
|
||||
|
@ -1583,7 +1446,6 @@
|
|||
"unicopia.subtitle.entity.player.kick": "Игрок бьёт",
|
||||
"unicopia.subtitle.magic_aura": "Магическое гудение",
|
||||
"unicopia.subtitle.player.rebound": "Игрок отскакивает от стены",
|
||||
"unicopia.subtitle.screech": "Игрок кричит",
|
||||
"unicopia.subtitle.ears_ringing": "Звон в ушах",
|
||||
"unicopia.subtitle.heartbeat": "Стук сердца",
|
||||
"unicopia.subtitle.entity.artefact.ambient": "Магическое гудение",
|
||||
|
@ -1616,7 +1478,6 @@
|
|||
"unicopia.subtitle.spell.fire.shoot.bolt": "Стрельба огненным снарядом",
|
||||
"unicopia.subtitle.spell.shield.projectile.burn": "Стрела горит",
|
||||
"unicopia.subtitle.spell.transform.transmute.entity": "Звук магии",
|
||||
|
||||
"advancements.unicopia.root.title": "Unicopia",
|
||||
"advancements.unicopia.root.description": "Мир волшебства и приключений",
|
||||
"advancements.unicopia.praise_the_sun.title": "Хвала Солнцу!",
|
||||
|
@ -1659,17 +1520,14 @@
|
|||
"advancements.unicopia.oats_so_easy.description": "Вырастите немного овса",
|
||||
"advancements.unicopia.imported_oats.title": "Столь же вкусные, сколь и дорогие",
|
||||
"advancements.unicopia.imported_oats.description": "Отправьте или получите шикарный импортный овёс",
|
||||
|
||||
"advancements.unicopia.experimental.title": "Ты не можешь взять это с собой",
|
||||
"advancements.unicopia.experimental.description": "Зачаровать инструмент на Потребление",
|
||||
"advancements.unicopia.xp_miner.title": "Майнер опыта",
|
||||
"advancements.unicopia.xp_miner.description": "Используйте Потребление, чтобы накопить опыт",
|
||||
|
||||
"advancements.unicopia.hearts_stronger_than_horses.title": "Сердца сильнее лошадей",
|
||||
"advancements.unicopia.hearts_stronger_than_horses.description": "Зачаровать инструмент Связанным сердцем",
|
||||
"advancements.unicopia.soulmate.title": "Ты можешь взять это с собой",
|
||||
"advancements.unicopia.soulmate.description": "Умереть, держа в руках предмет связанный сердцем",
|
||||
|
||||
"advancements.unicopia.burn_juice.title": "Это кажется неправильным",
|
||||
"advancements.unicopia.burn_juice.description": "Сжечь сок",
|
||||
"advancements.unicopia.apple_route.title": "Яблоко, яблоко, яблоко",
|
||||
|
@ -1692,7 +1550,6 @@
|
|||
"advancements.unicopia.aeronaut.description": "Оснастите свою корзину фонарём и воздушным шаром",
|
||||
"advancements.unicopia.travelling_in_style.title": "Путешествие со стилем",
|
||||
"advancements.unicopia.travelling_in_style.description": "Прокатитесь на воздушном шаре",
|
||||
|
||||
"advancements.unicopia.bat_route.title": "Дети Ночи",
|
||||
"advancements.unicopia.bat_route.description": "Пойдите по пути ночи",
|
||||
"advancements.unicopia.screech_twenty_mobs.title": "Ужас с неба",
|
||||
|
@ -1701,12 +1558,10 @@
|
|||
"advancements.unicopia.screech_self.description": "Будьте настолько страшным, что даже немного напугайте себя",
|
||||
"advancements.unicopia.extra_spooky.title": "Экстра жуткий",
|
||||
"advancements.unicopia.extra_spooky.description": "Напугайте моба так сильно, чтобы он выронил кирпич",
|
||||
|
||||
"advancements.unicopia.sweet_sweet_revenge.title": "Сладкая, сладкая месть",
|
||||
"advancements.unicopia.sweet_sweet_revenge.description": "Отомстите Селестии за то, что она выжгла вам глаза",
|
||||
"advancements.unicopia.blasphemy.title": "Кощунство!",
|
||||
"advancements.unicopia.blasphemy.description": "Ударьте Селестию по башке. Упс!",
|
||||
|
||||
"advancements.unicopia.earth_route.title": "Очаг Земли",
|
||||
"advancements.unicopia.earth_route.description": "Вступить в клан Яблока",
|
||||
"advancements.unicopia.sticks_and_stones.title": "Палки и камни",
|
||||
|
@ -1725,7 +1580,6 @@
|
|||
"advancements.unicopia.born_on_a_rock_farm.description": "Успешно вырастить свой первый камень",
|
||||
"advancements.unicopia.thats_unusual.title": "Это необычно",
|
||||
"advancements.unicopia.thats_unusual.description": "Но что оно делает?",
|
||||
|
||||
"advancements.unicopia.pegasus_route.title": "Путь Пегаса",
|
||||
"advancements.unicopia.pegasus_route.description": "Присоединитесь к пегасам Клаудсдейла",
|
||||
"advancements.unicopia.molting_season_1.title": "Сезон линьки",
|
||||
|
@ -1758,10 +1612,8 @@
|
|||
"advancements.unicopia.second_wind.description": "Летите сквозь боль",
|
||||
"advancements.unicopia.deter_phantom.title": "Что летает вокруг",
|
||||
"advancements.unicopia.deter_phantom.description": "Поднимитесь и дайте этим фантомам попробовать их собственное лекарство",
|
||||
|
||||
"advancements.unicopia.unicorn_route.title": "Рог единорога",
|
||||
"advancements.unicopia.unicorn_route.description": "Окунитесь в мир блеска и радуги",
|
||||
|
||||
"advancements.unicopia.books.title": "Книги!",
|
||||
"advancements.unicopia.books.description": "Это МОЯ книга заклинаний, и я собираюсь её ПРОЧИТАТЬ!",
|
||||
"advancements.unicopia.books_books_books.title": "Книги! Книги! Книги!",
|
||||
|
@ -1772,7 +1624,6 @@
|
|||
"advancements.unicopia.hello_darkness_my_old_friend.description": "Углубитесь в силы тёмной стороны",
|
||||
"advancements.unicopia.a_falling_wizard.title": "Падший волшебник",
|
||||
"advancements.unicopia.a_falling_wizard.description": "Единорог безуспешно попытался наложить заклинание полёта",
|
||||
|
||||
"advancements.unicopia.split_the_sea.title": "Ты кто? Моисей?",
|
||||
"advancements.unicopia.split_the_sea.description": "Используйте магию, чтобы переместить более 100 блоков воды за один раз",
|
||||
"advancements.unicopia.save_the_day.title": "Спасти день",
|
||||
|
@ -1787,14 +1638,12 @@
|
|||
"advancements.unicopia.power_up_heart.description": "Увеличьте мощность кристального сердца",
|
||||
"advancements.unicopia.love_is_power.title": "Любовь - это сила",
|
||||
"advancements.unicopia.love_is_power.description": "Изгоните короля Сомбра с помощью кристального сердца",
|
||||
|
||||
"advancements.unicopia.hippogriff_route.title": "Всплеск Сиквестрии",
|
||||
"advancements.unicopia.hippogriff_route.description": "Присоединитесь к гнезду гиппогрифов",
|
||||
"advancements.unicopia.shoo_be_doo.title": "Шу-би-ду!",
|
||||
"advancements.unicopia.shoo_be_doo.description": "Используйте жемчужное ожерелье, чтобы превратиться в морское существо",
|
||||
"advancements.unicopia.shoo_be_done.title": "Шу-би-всё!",
|
||||
"advancements.unicopia.shoo_be_done.description": "Используйте жемчужное ожерелье, чтобы стать снова собой",
|
||||
|
||||
"unicopia.toast.discoveries.title": "Новые открытия!",
|
||||
"unicopia.toast.discoveries.description": "Проверьте свою книгу заклинаний"
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Binary file not shown.
After Width: | Height: | Size: 6.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"animation": {
|
||||
"frametime": 200,
|
||||
"frames": [
|
||||
0, 1, 2, 3,
|
||||
1, 2, 3, 0,
|
||||
2, 3, 0, 1,
|
||||
3, 0, 1, 2
|
||||
]
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
BIN
src/main/resources/assets/unicopia/textures/item/frog_legs.png
Normal file
BIN
src/main/resources/assets/unicopia/textures/item/frog_legs.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.3 KiB |
|
@ -1,15 +0,0 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"#c:raw_insect",
|
||||
"#unicopia:polearms",
|
||||
"unicopia:mango_leaves",
|
||||
"unicopia:mango_sapling",
|
||||
"unicopia:mango",
|
||||
"unicopia:pineapple",
|
||||
"unicopia:pineapple_crown",
|
||||
"unicopia:banana",
|
||||
"unicopia:sunglasses",
|
||||
"unicopia:broken_sunglasses"
|
||||
]
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"unicopia:carapace",
|
||||
"unicopia:surface_chitin",
|
||||
"unicopia:chitin",
|
||||
"unicopia:chiselled_chitin",
|
||||
"unicopia:chiselled_chitin_slab",
|
||||
"unicopia:chiselled_chitin_stairs",
|
||||
"unicopia:chiselled_chitin_hull",
|
||||
"unicopia:chitin_spikes",
|
||||
"unicopia:mysterious_egg",
|
||||
"unicopia:green_fried_egg",
|
||||
"unicopia:hive",
|
||||
"unicopia:dark_oak_stable_door",
|
||||
"#c:cooked_meat",
|
||||
"#c:raw_meat",
|
||||
"#c:raw_insect",
|
||||
"#c:rotten_meat",
|
||||
"#unicopia:container_with_love"
|
||||
]
|
||||
}
|
|
@ -1,93 +0,0 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"unicopia:green_apple_leaves",
|
||||
"unicopia:sweet_apple_leaves",
|
||||
"unicopia:sour_apple_leaves",
|
||||
"unicopia:zap_leaves",
|
||||
"unicopia:flowering_zap_leaves",
|
||||
"unicopia:zap_log",
|
||||
"unicopia:zap_wood",
|
||||
"unicopia:stripped_zap_log",
|
||||
"unicopia:stripped_zap_wood",
|
||||
"unicopia:zap_planks",
|
||||
"unicopia:zap_stairs",
|
||||
"unicopia:zap_slab",
|
||||
"unicopia:zap_fence",
|
||||
"unicopia:zap_fence_gate",
|
||||
"unicopia:waxed_zap_log",
|
||||
"unicopia:waxed_zap_wood",
|
||||
"unicopia:waxed_stripped_zap_log",
|
||||
"unicopia:waxed_stripped_zap_wood",
|
||||
"unicopia:waxed_zap_planks",
|
||||
"unicopia:waxed_zap_stairs",
|
||||
"unicopia:waxed_zap_slab",
|
||||
"unicopia:waxed_zap_fence",
|
||||
"unicopia:waxed_zap_fence_gate",
|
||||
"unicopia:candied_apple",
|
||||
"unicopia:stable_door",
|
||||
"unicopia:dark_oak_stable_door",
|
||||
"minecraft:apple",
|
||||
"unicopia:green_apple",
|
||||
"unicopia:sweet_apple",
|
||||
"unicopia:sour_apple",
|
||||
"unicopia:zap_apple",
|
||||
"unicopia:zap_bulb",
|
||||
"unicopia:rotten_apple",
|
||||
"unicopia:green_apple_seeds",
|
||||
"unicopia:sweet_apple_seeds",
|
||||
"unicopia:sour_apple_seeds",
|
||||
"unicopia:green_apple_sapling",
|
||||
"unicopia:sweet_apple_sapling",
|
||||
"unicopia:sour_apple_sapling",
|
||||
"unicopia:zapling",
|
||||
"unicopia:palm_sapling",
|
||||
"unicopia:curing_joke",
|
||||
"unicopia:mango",
|
||||
"unicopia:empty_jar",
|
||||
"unicopia:cooked_zap_apple",
|
||||
"unicopia:zap_apple_jam_jar",
|
||||
"unicopia:oat_seeds",
|
||||
"unicopia:oats",
|
||||
"unicopia:imported_oats",
|
||||
"unicopia:oatmeal",
|
||||
"unicopia:oatmeal_cookie",
|
||||
"unicopia:chocolate_oatmeal_cookie",
|
||||
"unicopia:daffodil_daisy_sandwich",
|
||||
"unicopia:hay_burger",
|
||||
"unicopia:hay_fries",
|
||||
"unicopia:crispy_hay_fries",
|
||||
"unicopia:horse_shoe_fries",
|
||||
"unicopia:wheat_worms",
|
||||
"unicopia:baited_fishing_rod",
|
||||
"unicopia:worm_block",
|
||||
"unicopia:muffin",
|
||||
"unicopia:scone",
|
||||
"unicopia:acorn",
|
||||
"unicopia:pinecone",
|
||||
"unicopia:pinecone_cookie",
|
||||
"unicopia:bowl_of_nuts",
|
||||
"unicopia:crystal_shard",
|
||||
"unicopia:pebbles",
|
||||
"unicopia:rock",
|
||||
"unicopia:weird_rock",
|
||||
"unicopia:rock_stew",
|
||||
"unicopia:rock_candy",
|
||||
"unicopia:salt_cube",
|
||||
"unicopia:mug",
|
||||
"unicopia:cider",
|
||||
"unicopia:juice",
|
||||
"unicopia:burned_juice",
|
||||
"unicopia:toast",
|
||||
"unicopia:jam_toast",
|
||||
"unicopia:burned_toast",
|
||||
"unicopia:apple_pie",
|
||||
"unicopia:apple_pie_hoof",
|
||||
"unicopia:apple_pie_slice",
|
||||
"unicopia:weather_vane",
|
||||
"#unicopia:baskets",
|
||||
"unicopia:giant_balloon",
|
||||
"unicopia:cloth_bed",
|
||||
"#unicopia:bed_sheets"
|
||||
]
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"#unicopia:forage/dangerous",
|
||||
"#unicopia:forage/filling",
|
||||
"#unicopia:forage/safe",
|
||||
"#unicopia:forage/nauseating",
|
||||
"#unicopia:forage/blinding",
|
||||
"#unicopia:forage/prickly",
|
||||
"#unicopia:forage/glowing",
|
||||
"#unicopia:forage/risky",
|
||||
"#unicopia:forage/severe/nauseating",
|
||||
"#unicopia:forage/severe/prickly",
|
||||
"#unicopia:forage/strenghtening"
|
||||
]
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"unicopia:shaping_bench",
|
||||
"unicopia:cloud_chest",
|
||||
"unicopia:cloud_lump",
|
||||
"unicopia:cloud",
|
||||
"unicopia:cloud_slab",
|
||||
"unicopia:cloud_stairs",
|
||||
"unicopia:cloud_planks",
|
||||
"unicopia:cloud_plank_slab",
|
||||
"unicopia:cloud_plank_stairs",
|
||||
"unicopia:cloud_bricks",
|
||||
"unicopia:cloud_brick_slab",
|
||||
"unicopia:cloud_brick_stairs",
|
||||
"unicopia:dense_cloud",
|
||||
"unicopia:dense_cloud_slab",
|
||||
"unicopia:dense_cloud_stairs",
|
||||
"unicopia:etched_cloud",
|
||||
"unicopia:etched_cloud_slab",
|
||||
"unicopia:etched_cloud_stairs",
|
||||
"unicopia:unstable_cloud",
|
||||
"unicopia:cloud_pillar",
|
||||
"unicopia:cloud_door",
|
||||
"unicopia:cloud_bed",
|
||||
"#unicopia:bed_sheets",
|
||||
"#c:raw_fish",
|
||||
"#c:cooked_fish",
|
||||
"#c:rotten_fish",
|
||||
"unicopia:rain_cloud_jar",
|
||||
"unicopia:storm_cloud_jar",
|
||||
"unicopia:lightning_jar",
|
||||
"#unicopia:polearms",
|
||||
"unicopia:pegasus_feather",
|
||||
"unicopia:gryphon_feather",
|
||||
"unicopia:golden_feather",
|
||||
"unicopia:golden_wing"
|
||||
]
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"unicopia:pearl_necklace",
|
||||
"#unicopia:shells",
|
||||
"#unicopia:special_shells",
|
||||
"#unicopia:food_types/low_quality_sea_vegetables",
|
||||
"#unicopia:food_types/high_quality_sea_vegetables"
|
||||
]
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"unicopia:spellbook",
|
||||
"unicopia:gemstone",
|
||||
"unicopia:botched_gem",
|
||||
"unicopia:friendship_bracelet",
|
||||
"unicopia:crystal_heart",
|
||||
"unicopia:crystal_shard",
|
||||
"unicopia:crystal_door",
|
||||
"unicopia:meadowbrooks_staff",
|
||||
"unicopia:magic_staff",
|
||||
"unicopia:grogars_bell",
|
||||
"unicopia:dragon_breath_scroll",
|
||||
"unicopia:pegasus_amulet",
|
||||
"unicopia:alicorn_amulet",
|
||||
"unicopia:broken_alicorn_amulet",
|
||||
"unicopia:unicorn_amulet",
|
||||
"unicopia:spectral_clock"
|
||||
]
|
||||
}
|
Loading…
Reference in a new issue