No files matched your search
@@ -1,14 +1,12 @@
|
||||
package net.dnorberg.rivencraft.block;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
import net.minecraft.world.level.LevelReader;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
||||
/** Solid footing for Age arrivals, rendered as a translucent cloud. */
|
||||
/** Solid crystal-textured footing for Age arrivals that cannot be collected. */
|
||||
public final class CloudPlatformBlock extends Block {
|
||||
public CloudPlatformBlock(Properties properties) {
|
||||
super(properties);
|
||||
@@ -18,19 +16,4 @@ public final class CloudPlatformBlock extends Block {
|
||||
public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state) {
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean skipRendering(BlockState state, BlockState adjacent, Direction side) {
|
||||
return adjacent.is(this) || super.skipRendering(state, adjacent, side);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean propagatesSkylightDown(BlockState state, BlockGetter level, BlockPos pos) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getLightBlock(BlockState state, BlockGetter level, BlockPos pos) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,9 @@ public final class CloudPlatformGameTests {
|
||||
helper.getLevel().setBlock(pos, state, 2);
|
||||
helper.assertTrue(!state.getCollisionShape(helper.getLevel(), pos).isEmpty(),
|
||||
"Cloud platform must support a standing player");
|
||||
helper.assertTrue(state.canOcclude(), "Arrival platform must be opaque");
|
||||
helper.assertValueEqual(state.getDestroySpeed(helper.getLevel(), pos), 0.3F,
|
||||
"Arrival platform should break as easily as glass");
|
||||
helper.assertTrue(ModBlocks.CLOUD_PLATFORM.get().getCloneItemStack(helper.getLevel(), pos, state).isEmpty(),
|
||||
"Cloud platform must not provide a pick-block item");
|
||||
helper.succeed();
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package net.dnorberg.rivencraft.book;
|
||||
|
||||
import net.dnorberg.rivencraft.registry.ModSounds;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
/** Legacy-style sound and particle bursts at both ends of a successful link. */
|
||||
public final class LinkVisualEffects {
|
||||
private static final int PARTICLE_COUNT = 50;
|
||||
|
||||
private LinkVisualEffects() {}
|
||||
|
||||
public static SoundEvent sound(LinkProperties properties, boolean portal) {
|
||||
// Legacy's Disarm flag takes precedence over a portal's sound override.
|
||||
if (properties.has(LinkProperties.DISARM)) return ModSounds.LINK_DISARM.get();
|
||||
if (portal) return ModSounds.LINK_PORTAL.get();
|
||||
if (properties.has(LinkProperties.INTRA_LINKING)) return ModSounds.LINK_INTRA.get();
|
||||
return ModSounds.LINK.get();
|
||||
}
|
||||
|
||||
public static void play(ServerLevel source, Vec3 departure, ServerPlayer player,
|
||||
LinkProperties properties, boolean portal) {
|
||||
SoundEvent event = sound(properties, portal);
|
||||
burst(source, departure, event);
|
||||
burst(player.serverLevel(), player.position(), event);
|
||||
}
|
||||
|
||||
private static void burst(ServerLevel level, Vec3 position, SoundEvent event) {
|
||||
level.playSound(null, position.x, position.y, position.z, event,
|
||||
SoundSource.PLAYERS, 0.8F, level.random.nextFloat() * 0.2F + 0.9F);
|
||||
// Legacy emitted 50 small neutral particles in a roughly one-by-two-
|
||||
// block space. Cloud particles are a vanilla gray-white stand-in for
|
||||
// its removed fixed-function particle class.
|
||||
level.sendParticles(ParticleTypes.CLOUD, position.x, position.y, position.z,
|
||||
PARTICLE_COUNT, 0.5, 1.0, 0.5, 0.005);
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,7 @@ public final class ClientEvents {
|
||||
ItemBlockRenderTypes.setRenderLayer(ModBlocks.MEDIUM_CRYSTAL_BUD.get(), RenderType.cutout());
|
||||
ItemBlockRenderTypes.setRenderLayer(ModBlocks.LARGE_CRYSTAL_BUD.get(), RenderType.cutout());
|
||||
ItemBlockRenderTypes.setRenderLayer(ModBlocks.CRYSTAL_CLUSTER.get(), RenderType.cutout());
|
||||
ItemBlockRenderTypes.setRenderLayer(ModBlocks.CLOUD_PLATFORM.get(), RenderType.translucent());
|
||||
ItemBlockRenderTypes.setRenderLayer(ModBlocks.INK_MIXER.get(), RenderType.cutout());
|
||||
ItemBlockRenderTypes.setRenderLayer(ModBlocks.CRYSTAL_PORTAL.get(), RenderType.translucent());
|
||||
// Immersive Portals composes the remote view before translucent blocks.
|
||||
// Draw the opaque crystal frame in that later pass so it masks the view;
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package net.dnorberg.rivencraft.gametest;
|
||||
|
||||
import net.dnorberg.rivencraft.Rivencraft;
|
||||
import net.dnorberg.rivencraft.book.LinkProperties;
|
||||
import net.dnorberg.rivencraft.book.LinkVisualEffects;
|
||||
import net.dnorberg.rivencraft.registry.ModSounds;
|
||||
import net.minecraft.gametest.framework.GameTest;
|
||||
import net.minecraft.gametest.framework.GameTestHelper;
|
||||
import net.neoforged.neoforge.gametest.GameTestHolder;
|
||||
import net.neoforged.neoforge.gametest.PrefixGameTestTemplate;
|
||||
|
||||
@GameTestHolder(Rivencraft.MOD_ID)
|
||||
@PrefixGameTestTemplate(false)
|
||||
public final class Milestone7PolishGameTests {
|
||||
private Milestone7PolishGameTests() {}
|
||||
|
||||
@GameTest(template = "empty")
|
||||
public static void linkSoundPriorityMatchesLegacy(GameTestHelper helper) {
|
||||
helper.assertTrue(LinkVisualEffects.sound(LinkProperties.NONE, false) == ModSounds.LINK.get(),
|
||||
"Ordinary book travel uses the Legacy link sound");
|
||||
helper.assertTrue(LinkVisualEffects.sound(new LinkProperties(LinkProperties.INTRA_LINKING), false)
|
||||
== ModSounds.LINK_INTRA.get(),
|
||||
"Intra Linking uses its Legacy sound");
|
||||
helper.assertTrue(LinkVisualEffects.sound(LinkProperties.NONE, true) == ModSounds.LINK_PORTAL.get(),
|
||||
"Portal travel uses its Legacy sound");
|
||||
helper.assertTrue(LinkVisualEffects.sound(new LinkProperties(LinkProperties.DISARM), true)
|
||||
== ModSounds.LINK_DISARM.get(),
|
||||
"Legacy Disarm takes precedence over the portal sound");
|
||||
helper.succeed();
|
||||
}
|
||||
}
|
||||
@@ -6,21 +6,21 @@ import net.dnorberg.rivencraft.book.AgeVisitSavedData;
|
||||
import net.dnorberg.rivencraft.book.LinkTarget;
|
||||
import net.dnorberg.rivencraft.book.LinkProperties;
|
||||
import net.dnorberg.rivencraft.book.LinkingService;
|
||||
import net.dnorberg.rivencraft.book.LinkVisualEffects;
|
||||
import net.dnorberg.rivencraft.book.AgeDimensionService;
|
||||
import net.dnorberg.rivencraft.config.RivencraftConfig;
|
||||
import net.dnorberg.rivencraft.registry.ModDataComponents;
|
||||
import net.dnorberg.rivencraft.registry.ModItems;
|
||||
import net.dnorberg.rivencraft.registry.ModSounds;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.MutableComponent;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
/**
|
||||
* A book that will eventually describe and link to a generated Age.
|
||||
@@ -62,7 +62,7 @@ public final class DescriptiveBookItem extends Item {
|
||||
}
|
||||
|
||||
ServerLevel sourceLevel = player.serverLevel();
|
||||
var sourcePosition = player.blockPosition();
|
||||
Vec3 sourcePosition = player.position();
|
||||
LinkProperties properties = stack.getOrDefault(ModDataComponents.LINK_PROPERTIES.get(), LinkProperties.NONE)
|
||||
.forDescriptiveBook();
|
||||
LinkingService.LinkResult result = portal
|
||||
@@ -85,10 +85,7 @@ public final class DescriptiveBookItem extends Item {
|
||||
player.drop(returnBook, false);
|
||||
}
|
||||
}
|
||||
sourceLevel.playSound(null, sourcePosition, (portal ? ModSounds.LINK_PORTAL : ModSounds.LINK).get(), SoundSource.PLAYERS,
|
||||
0.8F, sourceLevel.random.nextFloat() * 0.2F + 0.9F);
|
||||
player.level().playSound(null, player.blockPosition(), (portal ? ModSounds.LINK_PORTAL : ModSounds.LINK).get(), SoundSource.PLAYERS,
|
||||
0.8F, player.level().random.nextFloat() * 0.2F + 0.9F);
|
||||
LinkVisualEffects.play(sourceLevel, sourcePosition, player, properties, portal);
|
||||
player.displayClientMessage(Component.translatable(
|
||||
createReturnLink ? "message.rivencraft.descriptive_book.linked_first" : "message.rivencraft.descriptive_book.linked",
|
||||
age.name()
|
||||
|
||||
@@ -4,16 +4,15 @@ import java.util.List;
|
||||
import net.dnorberg.rivencraft.book.LinkTarget;
|
||||
import net.dnorberg.rivencraft.book.AgeRegistrySavedData;
|
||||
import net.dnorberg.rivencraft.book.LinkingService;
|
||||
import net.dnorberg.rivencraft.book.LinkVisualEffects;
|
||||
import net.dnorberg.rivencraft.book.LinkProperties;
|
||||
import net.dnorberg.rivencraft.registry.ModDataComponents;
|
||||
import net.dnorberg.rivencraft.registry.ModSounds;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResultHolder;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
@@ -21,6 +20,7 @@ import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public final class LinkingBookItem extends Item {
|
||||
public LinkingBookItem(Properties properties) {
|
||||
@@ -56,23 +56,14 @@ public final class LinkingBookItem extends Item {
|
||||
return InteractionResultHolder.fail(stack);
|
||||
}
|
||||
|
||||
Level sourceLevel = player.level();
|
||||
BlockPos sourcePosition = player.blockPosition();
|
||||
ServerLevel sourceLevel = player.serverLevel();
|
||||
Vec3 sourcePosition = player.position();
|
||||
LinkProperties properties = stack.getOrDefault(ModDataComponents.LINK_PROPERTIES.get(), LinkProperties.NONE);
|
||||
LinkingService.LinkResult result = portal
|
||||
? LinkingService.travelPortal(player, target, properties)
|
||||
: LinkingService.travel(player, target, properties);
|
||||
if (result == LinkingService.LinkResult.SUCCESS) {
|
||||
sourceLevel.playSound(null, sourcePosition, (portal ? ModSounds.LINK_PORTAL : ModSounds.LINK).get(), SoundSource.PLAYERS,
|
||||
0.8F, sourceLevel.random.nextFloat() * 0.2F + 0.9F);
|
||||
player.level().playSound(
|
||||
null,
|
||||
player.blockPosition(),
|
||||
(portal ? ModSounds.LINK_PORTAL : ModSounds.LINK).get(),
|
||||
SoundSource.PLAYERS,
|
||||
0.8F,
|
||||
player.level().random.nextFloat() * 0.2F + 0.9F
|
||||
);
|
||||
LinkVisualEffects.play(sourceLevel, sourcePosition, player, properties, portal);
|
||||
player.displayClientMessage(Component.translatable("message.rivencraft.linking_book.linked"), true);
|
||||
return InteractionResultHolder.success(stack);
|
||||
}
|
||||
|
||||
@@ -70,8 +70,8 @@ public final class ModBlocks {
|
||||
DecayBlock::new, BlockBehaviour.Properties.ofFullCopy(Blocks.STONE)
|
||||
.strength(5.0F, 10.0F).noLootTable());
|
||||
public static final DeferredBlock<CloudPlatformBlock> CLOUD_PLATFORM = BLOCKS.registerBlock("cloud_platform",
|
||||
CloudPlatformBlock::new, BlockBehaviour.Properties.ofFullCopy(Blocks.WHITE_STAINED_GLASS)
|
||||
.strength(1.5F).noOcclusion().noLootTable());
|
||||
CloudPlatformBlock::new, BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK)
|
||||
.mapColor(MapColor.COLOR_BLUE).strength(0.3F).noLootTable());
|
||||
|
||||
private ModBlocks() {
|
||||
}
|
||||
|
||||
@@ -14,6 +14,8 @@ public final class ModSounds {
|
||||
DeferredRegister.create(Registries.SOUND_EVENT, Rivencraft.MOD_ID);
|
||||
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> LINK = register("linking.link");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> LINK_DISARM = register("linking.link-disarm");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> LINK_INTRA = register("linking.link-intra");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> LINK_FISSURE = register("linking.link-fissure");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> LINK_PORTAL = register("linking.link-portal");
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> METEOR_ROAR = register("entity.meteor.roar");
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"container.rivencraft.book_binder": "Book Binder",
|
||||
"block.rivencraft.ink_mixer": "Ink Mixer",
|
||||
"block.rivencraft.decay": "Decay",
|
||||
"block.rivencraft.cloud_platform": "Cloud Platform",
|
||||
"block.rivencraft.cloud_platform": "Crystal Platform",
|
||||
"container.rivencraft.ink_mixer": "Ink Mixer",
|
||||
"screen.rivencraft.ink_mixer.ink": "Ink: %s/%s",
|
||||
"screen.rivencraft.ink_mixer.additive_hint": "Click the basin with an additive; right-click adds one.",
|
||||
|
||||
@@ -39,6 +39,28 @@
|
||||
"down": {"texture":"#press","uv":[8.5,0,10,7]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6, 10, 1], "to": [7, 14, 15],
|
||||
"faces": {
|
||||
"north": {"texture":"#press","uv":[7,13,7.5,15]},
|
||||
"east": {"texture":"#press","uv":[7.5,13,14.5,15]},
|
||||
"south": {"texture":"#press","uv":[14.5,13,15,15]},
|
||||
"west": {"texture":"#press","uv":[0,13,7,15]},
|
||||
"up": {"texture":"#press","uv":[0,6,0.5,13]},
|
||||
"down": {"texture":"#press","uv":[0.5,6,1,13]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [9, 10, 1], "to": [10, 14, 15],
|
||||
"faces": {
|
||||
"north": {"texture":"#press","uv":[7,13,7.5,15]},
|
||||
"east": {"texture":"#press","uv":[0,13,7,15]},
|
||||
"south": {"texture":"#press","uv":[14.5,13,15,15]},
|
||||
"west": {"texture":"#press","uv":[7.5,13,14.5,15]},
|
||||
"up": {"texture":"#press","uv":[0,6,0.5,13]},
|
||||
"down": {"texture":"#press","uv":[0.5,6,1,13]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3, 11, 3], "to": [13, 12, 4],
|
||||
"faces": {
|
||||
@@ -56,6 +78,17 @@
|
||||
"up": {"texture":"#press","uv":[0.5,15,5.5,15.5]},
|
||||
"down": {"texture":"#press","uv":[5.5,15,10.5,15.5]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7, 10, 4.5], "to": [9, 15, 11.5],
|
||||
"faces": {
|
||||
"north": {"texture":"#press","uv":[4.5,10.5,5.5,13]},
|
||||
"east": {"texture":"#press","uv":[1,10.5,4.5,13]},
|
||||
"south": {"texture":"#press","uv":[9,10,10,13]},
|
||||
"west": {"texture":"#press","uv":[5.5,10.5,9,13]},
|
||||
"up": {"texture":"#press","uv":[4.5,7,5.5,10.5]},
|
||||
"down": {"texture":"#press","uv":[5.5,7,6.5,10.5]}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
{"parent":"minecraft:block/cube_all","render_type":"minecraft:translucent","textures":{"all":"rivencraft:block/cloud_platform"}}
|
||||
{"parent":"minecraft:block/cube_all","textures":{"all":"rivencraft:block/crystal_block"}}
|
||||
@@ -1 +1 @@
|
||||
{"textures":{"portal":"rivencraft:block/crystal_portal"},"elements":[{"from":[0,0,7.5],"to":[16,16,8.5],"shade":false,"faces":{"north":{"texture":"#portal"},"south":{"texture":"#portal"}}}]}
|
||||
{"render_type":"minecraft:translucent","ambientocclusion":false,"textures":{"particle":"rivencraft:block/crystal_portal","portal":"rivencraft:block/crystal_portal"},"elements":[{"from":[0,0,6],"to":[16,16,10],"shade":false,"faces":{"north":{"texture":"#portal"},"south":{"texture":"#portal"}}}]}
|
||||
@@ -1,23 +1,971 @@
|
||||
{
|
||||
"parent": "minecraft:block/block",
|
||||
"textures": {
|
||||
"particle": "rivencraft:block/ink_mixer_side",
|
||||
"side": "rivencraft:block/ink_mixer_side",
|
||||
"top": "rivencraft:block/ink_mixer_top",
|
||||
"bottom": "rivencraft:block/ink_mixer_bottom"
|
||||
"0": "rivencraft:block/inkwell_base",
|
||||
"1": "rivencraft:block/inkwell_cup",
|
||||
"2": "rivencraft:block/ink",
|
||||
"3": "rivencraft:block/ink_glass",
|
||||
"particle": "rivencraft:block/inkwell_base",
|
||||
"paper": "minecraft:block/white_concrete"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [0, 0, 0],
|
||||
"to": [16, 12, 16],
|
||||
"from": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"to": [
|
||||
16,
|
||||
9,
|
||||
16
|
||||
],
|
||||
"faces": {
|
||||
"north": { "texture": "#side", "uv": [0, 4, 16, 16] },
|
||||
"east": { "texture": "#side", "uv": [0, 4, 16, 16] },
|
||||
"south": { "texture": "#side", "uv": [0, 4, 16, 16] },
|
||||
"west": { "texture": "#side", "uv": [0, 4, 16, 16] },
|
||||
"up": { "texture": "#top" },
|
||||
"down": { "texture": "#bottom" }
|
||||
"north": {
|
||||
"texture": "#0",
|
||||
"uv": [
|
||||
0,
|
||||
5,
|
||||
4,
|
||||
7
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#0",
|
||||
"uv": [
|
||||
4,
|
||||
5,
|
||||
8,
|
||||
7
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#0",
|
||||
"uv": [
|
||||
8,
|
||||
5,
|
||||
12,
|
||||
7
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#0",
|
||||
"uv": [
|
||||
12,
|
||||
5,
|
||||
16,
|
||||
7
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#0",
|
||||
"uv": [
|
||||
8,
|
||||
0,
|
||||
12,
|
||||
4
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
0,
|
||||
9,
|
||||
0
|
||||
],
|
||||
"to": [
|
||||
16,
|
||||
12,
|
||||
16
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#0",
|
||||
"uv": [
|
||||
0,
|
||||
4,
|
||||
4,
|
||||
5
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#0",
|
||||
"uv": [
|
||||
4,
|
||||
4,
|
||||
8,
|
||||
5
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#0",
|
||||
"uv": [
|
||||
8,
|
||||
4,
|
||||
12,
|
||||
5
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#0",
|
||||
"uv": [
|
||||
12,
|
||||
4,
|
||||
16,
|
||||
5
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#0",
|
||||
"uv": [
|
||||
4,
|
||||
0,
|
||||
8,
|
||||
4
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
9,
|
||||
12,
|
||||
6
|
||||
],
|
||||
"to": [
|
||||
13,
|
||||
13,
|
||||
10
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
4,
|
||||
1
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
4,
|
||||
0,
|
||||
8,
|
||||
1
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
8,
|
||||
0,
|
||||
12,
|
||||
1
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
12,
|
||||
0,
|
||||
16,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
8,
|
||||
13,
|
||||
5
|
||||
],
|
||||
"to": [
|
||||
14,
|
||||
16,
|
||||
6
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
7,
|
||||
1,
|
||||
13,
|
||||
4
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
6,
|
||||
1,
|
||||
7,
|
||||
4
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
1,
|
||||
6,
|
||||
4
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
13,
|
||||
1,
|
||||
14,
|
||||
4
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
6,
|
||||
1
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
6,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
8,
|
||||
13,
|
||||
10
|
||||
],
|
||||
"to": [
|
||||
14,
|
||||
16,
|
||||
11
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
6,
|
||||
3
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
3
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
6,
|
||||
3
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
3
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
6,
|
||||
1
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
6,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
8,
|
||||
13,
|
||||
6
|
||||
],
|
||||
"to": [
|
||||
9,
|
||||
16,
|
||||
10
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
3
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
4,
|
||||
3
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
3
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
4,
|
||||
3
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
4
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
4
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
13,
|
||||
13,
|
||||
6
|
||||
],
|
||||
"to": [
|
||||
14,
|
||||
16,
|
||||
10
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
3
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
4,
|
||||
3
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
3
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
4,
|
||||
3
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
4
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#1",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
4
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
9,
|
||||
14,
|
||||
6
|
||||
],
|
||||
"to": [
|
||||
13,
|
||||
15,
|
||||
10
|
||||
],
|
||||
"faces": {
|
||||
"up": {
|
||||
"texture": "#2",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
4,
|
||||
3
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
7,
|
||||
12,
|
||||
2
|
||||
],
|
||||
"to": [
|
||||
9,
|
||||
14,
|
||||
4
|
||||
],
|
||||
"rotation": {
|
||||
"origin": [
|
||||
8,
|
||||
8,
|
||||
8
|
||||
],
|
||||
"axis": "y",
|
||||
"angle": 22.5
|
||||
},
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
2,
|
||||
0,
|
||||
4,
|
||||
2
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
4,
|
||||
0,
|
||||
6,
|
||||
2
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
6,
|
||||
0,
|
||||
8,
|
||||
2
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
4
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
1,
|
||||
12,
|
||||
6
|
||||
],
|
||||
"to": [
|
||||
3,
|
||||
14,
|
||||
8
|
||||
],
|
||||
"rotation": {
|
||||
"origin": [
|
||||
8,
|
||||
8,
|
||||
8
|
||||
],
|
||||
"axis": "y",
|
||||
"angle": -22.5
|
||||
},
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
2,
|
||||
0,
|
||||
4,
|
||||
2
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
4,
|
||||
0,
|
||||
6,
|
||||
2
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
6,
|
||||
0,
|
||||
8,
|
||||
2
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
4
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
7.5,
|
||||
14,
|
||||
2.5
|
||||
],
|
||||
"to": [
|
||||
8.5,
|
||||
15,
|
||||
3.5
|
||||
],
|
||||
"rotation": {
|
||||
"origin": [
|
||||
8,
|
||||
8,
|
||||
8
|
||||
],
|
||||
"axis": "y",
|
||||
"angle": 22.5
|
||||
},
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
2,
|
||||
0,
|
||||
3,
|
||||
1
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
4,
|
||||
0,
|
||||
5,
|
||||
1
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
6,
|
||||
0,
|
||||
7,
|
||||
1
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
1.5,
|
||||
14,
|
||||
6.5
|
||||
],
|
||||
"to": [
|
||||
2.5,
|
||||
15,
|
||||
7.5
|
||||
],
|
||||
"rotation": {
|
||||
"origin": [
|
||||
8,
|
||||
8,
|
||||
8
|
||||
],
|
||||
"axis": "y",
|
||||
"angle": -22.5
|
||||
},
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
2,
|
||||
0,
|
||||
3,
|
||||
1
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
4,
|
||||
0,
|
||||
5,
|
||||
1
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
6,
|
||||
0,
|
||||
7,
|
||||
1
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
4,
|
||||
12,
|
||||
5
|
||||
],
|
||||
"to": [
|
||||
6,
|
||||
14,
|
||||
7
|
||||
],
|
||||
"rotation": {
|
||||
"origin": [
|
||||
8,
|
||||
8,
|
||||
8
|
||||
],
|
||||
"axis": "y",
|
||||
"angle": 22.5
|
||||
},
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
2,
|
||||
0,
|
||||
4,
|
||||
2
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
4,
|
||||
0,
|
||||
6,
|
||||
2
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
6,
|
||||
0,
|
||||
8,
|
||||
2
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
2,
|
||||
2,
|
||||
4
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
2,
|
||||
2
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
4.5,
|
||||
14,
|
||||
5.5
|
||||
],
|
||||
"to": [
|
||||
5.5,
|
||||
15,
|
||||
6.5
|
||||
],
|
||||
"rotation": {
|
||||
"origin": [
|
||||
8,
|
||||
8,
|
||||
8
|
||||
],
|
||||
"axis": "y",
|
||||
"angle": 22.5
|
||||
},
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
"east": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
2,
|
||||
0,
|
||||
3,
|
||||
1
|
||||
]
|
||||
},
|
||||
"south": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
4,
|
||||
0,
|
||||
5,
|
||||
1
|
||||
]
|
||||
},
|
||||
"west": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
6,
|
||||
0,
|
||||
7,
|
||||
1
|
||||
]
|
||||
},
|
||||
"up": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
3
|
||||
]
|
||||
},
|
||||
"down": {
|
||||
"texture": "#3",
|
||||
"uv": [
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
1,
|
||||
12.01,
|
||||
2
|
||||
],
|
||||
"to": [
|
||||
7,
|
||||
12.16,
|
||||
11
|
||||
],
|
||||
"faces": {
|
||||
"north": {
|
||||
"texture": "#paper"
|
||||
},
|
||||
"east": {
|
||||
"texture": "#paper"
|
||||
},
|
||||
"south": {
|
||||
"texture": "#paper"
|
||||
},
|
||||
"west": {
|
||||
"texture": "#paper"
|
||||
},
|
||||
"up": {
|
||||
"texture": "#paper"
|
||||
},
|
||||
"down": {
|
||||
"texture": "#paper"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
"render_type": "minecraft:cutout"
|
||||
}
|
||||
@@ -7,6 +7,14 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"linking.link-disarm": {
|
||||
"category": "player",
|
||||
"sounds": [{"name": "rivencraft:linking/link-disarm"}]
|
||||
},
|
||||
"linking.link-intra": {
|
||||
"category": "player",
|
||||
"sounds": [{"name": "rivencraft:linking/link-intra"}]
|
||||
},
|
||||
"linking.link-fissure": {
|
||||
"category": "player",
|
||||
"sounds": [{"name": "rivencraft:linking/link-fissure"}]
|
||||
|
||||
|
Before Width: | Height: | Size: 868 B |
|
After Width: | Height: | Size: 311 B |
|
After Width: | Height: | Size: 304 B |
|
Before Width: | Height: | Size: 747 B |
|
Before Width: | Height: | Size: 616 B |
|
Before Width: | Height: | Size: 715 B |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 288 B |