mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2024-11-11 13:04:05 +01:00
Removed Symmetry Particles from block registry
- Fixed fluid rendering in fan recipe JEI - Made symmetry mirror models partials instead of blockstates - Ported symmetry wand GUI Screen
This commit is contained in:
parent
78cee0bd5e
commit
9c96ee8bb8
@ -70,6 +70,10 @@ public enum AllBlockPartials {
|
||||
ROPE_HALF_MAGNET("pulley/rope_half_magnet"),
|
||||
MILLSTONE_COG("millstone/inner"),
|
||||
|
||||
SYMMETRY_PLANE("symmetry_effect/plane"),
|
||||
SYMMETRY_CROSSPLANE("symmetry_effect/crossplane"),
|
||||
SYMMETRY_TRIPLEPLANE("symmetry_effect/tripleplane"),
|
||||
|
||||
;
|
||||
|
||||
private ResourceLocation modelLocation;
|
||||
|
@ -52,9 +52,6 @@ import com.simibubi.create.modules.contraptions.relays.belt.BeltBlock;
|
||||
import com.simibubi.create.modules.contraptions.relays.encased.AdjustablePulleyBlock;
|
||||
import com.simibubi.create.modules.contraptions.relays.encased.EncasedBeltBlock;
|
||||
import com.simibubi.create.modules.contraptions.relays.gauge.GaugeBlock;
|
||||
import com.simibubi.create.modules.curiosities.symmetry.block.CrossPlaneSymmetryBlock;
|
||||
import com.simibubi.create.modules.curiosities.symmetry.block.PlaneSymmetryBlock;
|
||||
import com.simibubi.create.modules.curiosities.symmetry.block.TriplePlaneSymmetryBlock;
|
||||
import com.simibubi.create.modules.logistics.block.RedstoneLinkBlock;
|
||||
import com.simibubi.create.modules.logistics.block.StockswitchBlock;
|
||||
import com.simibubi.create.modules.logistics.block.belts.observer.BeltObserverBlock;
|
||||
@ -95,7 +92,6 @@ import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.tags.Tag;
|
||||
import net.minecraft.world.storage.loot.LootTable;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
@ -208,9 +204,9 @@ public enum AllBlocks implements NonNullSupplier<Block> {
|
||||
|
||||
_4_(Sections.CURIOSITIES),
|
||||
|
||||
SYMMETRY_PLANE(PlaneSymmetryBlock::new, ComesWith.NO_BLOCKITEM),
|
||||
SYMMETRY_CROSSPLANE(CrossPlaneSymmetryBlock::new, ComesWith.NO_BLOCKITEM),
|
||||
SYMMETRY_TRIPLEPLANE(TriplePlaneSymmetryBlock::new, ComesWith.NO_BLOCKITEM),
|
||||
// SYMMETRY_PLANE(PlaneSymmetryBlock::new, ComesWith.NO_BLOCKITEM),
|
||||
// SYMMETRY_CROSSPLANE(CrossPlaneSymmetryBlock::new, ComesWith.NO_BLOCKITEM),
|
||||
// SYMMETRY_TRIPLEPLANE(TriplePlaneSymmetryBlock::new, ComesWith.NO_BLOCKITEM),
|
||||
|
||||
_5_(Sections.SCHEMATICS),
|
||||
|
||||
|
@ -21,7 +21,7 @@ public abstract class ProcessingViaFanCategory<T extends IRecipe<?>> extends Cre
|
||||
public ProcessingViaFanCategory(String name, IDrawable icon) {
|
||||
super(name, icon, emptyBackground(177, 70));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setIngredients(T recipe, IIngredients ingredients) {
|
||||
ingredients.setInputIngredients(recipe.getIngredients());
|
||||
@ -32,7 +32,9 @@ public abstract class ProcessingViaFanCategory<T extends IRecipe<?>> extends Cre
|
||||
public void setRecipe(IRecipeLayout recipeLayout, T recipe, IIngredients ingredients) {
|
||||
IGuiItemStackGroup itemStacks = recipeLayout.getItemStacks();
|
||||
itemStacks.init(0, true, 20, 47);
|
||||
itemStacks.set(0, Arrays.asList(recipe.getIngredients().get(0).getMatchingStacks()));
|
||||
itemStacks.set(0, Arrays.asList(recipe.getIngredients()
|
||||
.get(0)
|
||||
.getMatchingStacks()));
|
||||
|
||||
itemStacks.init(1, false, 139, 47);
|
||||
itemStacks.set(1, recipe.getRecipeOutput());
|
||||
@ -50,26 +52,24 @@ public abstract class ProcessingViaFanCategory<T extends IRecipe<?>> extends Cre
|
||||
public void draw(T recipe, double mouseX, double mouseY) {
|
||||
renderWidgets(recipe, mouseX, mouseY);
|
||||
RenderSystem.pushMatrix();
|
||||
|
||||
RenderSystem.translatef(56, 33, 0);
|
||||
RenderSystem.rotatef(-12.5f, 1, 0, 0);
|
||||
RenderSystem.rotatef(22.5f, 0, 1, 0);
|
||||
int scale = 24;
|
||||
|
||||
|
||||
GuiGameElement.of(AllBlockPartials.ENCASED_FAN_INNER)
|
||||
.rotateBlock(180, 0, AnimatedKinetics.getCurrentAngle() * 16)
|
||||
.scale(scale)
|
||||
.render();
|
||||
.rotateBlock(180, 0, AnimatedKinetics.getCurrentAngle() * 16)
|
||||
.scale(scale)
|
||||
.render();
|
||||
|
||||
GuiGameElement.of(AllBlocks.ENCASED_FAN.getDefault())
|
||||
.rotateBlock(0, 180, 0)
|
||||
.atLocal(0, 0, 0)
|
||||
.scale(scale)
|
||||
.render();
|
||||
|
||||
.rotateBlock(0, 180, 0)
|
||||
.atLocal(0, 0, 0)
|
||||
.scale(scale)
|
||||
.render();
|
||||
|
||||
renderAttachedBlock();
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
}
|
||||
|
||||
public abstract void renderAttachedBlock();
|
||||
|
@ -8,14 +8,18 @@ import com.mojang.blaze3d.platform.GlStateManager.SourceFactor;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.mojang.blaze3d.vertex.IVertexBuilder;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
import com.simibubi.create.foundation.utility.WrappedWorld;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.FireBlock;
|
||||
import net.minecraft.block.FlowingFluidBlock;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.Atlases;
|
||||
import net.minecraft.client.renderer.BlockRendererDispatcher;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
@ -23,12 +27,17 @@ import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.RenderTypeLookup;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.fluid.Fluid;
|
||||
import net.minecraft.inventory.container.PlayerContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.AxisDirection;
|
||||
import net.minecraft.util.IItemProvider;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.LightType;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.client.model.data.EmptyModelData;
|
||||
|
||||
public class GuiGameElement {
|
||||
@ -51,8 +60,8 @@ public class GuiGameElement {
|
||||
|
||||
public static GuiRenderBuilder of(Fluid fluid) {
|
||||
return new GuiBlockStateRenderBuilder(fluid.getDefaultState()
|
||||
.getBlockState()
|
||||
.with(FlowingFluidBlock.LEVEL, 5));
|
||||
.getBlockState()
|
||||
.with(FlowingFluidBlock.LEVEL, 0));
|
||||
}
|
||||
|
||||
public static abstract class GuiRenderBuilder {
|
||||
@ -85,7 +94,7 @@ public class GuiGameElement {
|
||||
|
||||
public GuiRenderBuilder rotateBlock(double xRot, double yRot, double zRot) {
|
||||
return this.rotate(xRot, yRot, zRot)
|
||||
.withRotationOffset(VecHelper.getCenterOf(BlockPos.ZERO));
|
||||
.withRotationOffset(VecHelper.getCenterOf(BlockPos.ZERO));
|
||||
}
|
||||
|
||||
public GuiRenderBuilder scale(double scale) {
|
||||
@ -154,26 +163,27 @@ public class GuiGameElement {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
BlockRendererDispatcher blockRenderer = mc.getBlockRendererDispatcher();
|
||||
IRenderTypeBuffer.Impl buffer = mc.getBufferBuilders()
|
||||
.getEntityVertexConsumers();
|
||||
RenderType renderType = RenderTypeLookup.getEntityBlockLayer(blockState);
|
||||
.getEntityVertexConsumers();
|
||||
RenderType renderType = blockState.getBlock() == Blocks.AIR ? Atlases.getEntityTranslucent()
|
||||
: RenderTypeLookup.getEntityBlockLayer(blockState);
|
||||
IVertexBuilder vb = buffer.getBuffer(renderType);
|
||||
MatrixStack ms = new MatrixStack();
|
||||
|
||||
transform();
|
||||
|
||||
mc.getTextureManager()
|
||||
.bindTexture(PlayerContainer.BLOCK_ATLAS_TEXTURE);
|
||||
.bindTexture(PlayerContainer.BLOCK_ATLAS_TEXTURE);
|
||||
renderModel(blockRenderer, buffer, renderType, vb, ms);
|
||||
|
||||
cleanUp();
|
||||
}
|
||||
|
||||
protected void renderModel(BlockRendererDispatcher blockRenderer, IRenderTypeBuffer.Impl buffer,
|
||||
RenderType renderType, IVertexBuilder vb, MatrixStack ms) {
|
||||
RenderType renderType, IVertexBuilder vb, MatrixStack ms) {
|
||||
Vec3d rgb = ColorHelper.getRGB(color);
|
||||
blockRenderer.getBlockModelRenderer()
|
||||
.renderModel(ms.peek(), vb, blockState, blockmodel, (float) rgb.x, (float) rgb.y, (float) rgb.z,
|
||||
0xF000F0, OverlayTexture.DEFAULT_UV, EmptyModelData.INSTANCE);
|
||||
.renderModel(ms.peek(), vb, blockState, blockmodel, (float) rgb.x, (float) rgb.y, (float) rgb.z,
|
||||
0xF000F0, OverlayTexture.DEFAULT_UV, EmptyModelData.INSTANCE);
|
||||
buffer.draw();
|
||||
}
|
||||
}
|
||||
@ -182,17 +192,17 @@ public class GuiGameElement {
|
||||
|
||||
public GuiBlockStateRenderBuilder(BlockState blockstate) {
|
||||
super(Minecraft.getInstance()
|
||||
.getBlockRendererDispatcher()
|
||||
.getModelForState(blockstate), blockstate);
|
||||
.getBlockRendererDispatcher()
|
||||
.getModelForState(blockstate), blockstate);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderModel(BlockRendererDispatcher blockRenderer, IRenderTypeBuffer.Impl buffer,
|
||||
RenderType renderType, IVertexBuilder vb, MatrixStack ms) {
|
||||
RenderType renderType, IVertexBuilder vb, MatrixStack ms) {
|
||||
if (blockState.getBlock() instanceof FireBlock) {
|
||||
RenderHelper.disableGuiDepthLighting();
|
||||
blockRenderer.renderBlock(blockState, ms, buffer, 0xF000F0, OverlayTexture.DEFAULT_UV,
|
||||
EmptyModelData.INSTANCE);
|
||||
EmptyModelData.INSTANCE);
|
||||
RenderHelper.enable();
|
||||
buffer.draw();
|
||||
return;
|
||||
@ -200,18 +210,38 @@ public class GuiGameElement {
|
||||
|
||||
super.renderModel(blockRenderer, buffer, renderType, vb, ms);
|
||||
|
||||
if (blockState.getFluidState().isEmpty())
|
||||
if (blockState.getFluidState()
|
||||
.isEmpty())
|
||||
return;
|
||||
|
||||
// TODO fluids are not visible for some reason. See fan washing recipes in JEI for an example use case
|
||||
for (RenderType type : RenderType.getBlockLayers()) {
|
||||
if (!RenderTypeLookup.canRenderInLayer(blockState.getFluidState(), type))
|
||||
continue;
|
||||
|
||||
vb = buffer.getBuffer(type);
|
||||
blockRenderer.renderFluid(new BlockPos(0, 0, 0), Minecraft.getInstance().world, vb,
|
||||
blockState.getFluidState());
|
||||
buffer.draw(type);
|
||||
RenderSystem.pushMatrix();
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
|
||||
ClientWorld world = Minecraft.getInstance().world;
|
||||
if (renderWorld == null || renderWorld.getWorld() != world)
|
||||
renderWorld = new FluidRenderWorld(world);
|
||||
|
||||
for (Direction d : Iterate.directions) {
|
||||
vb = buffer.getBuffer(type);
|
||||
if (d.getAxisDirection() == AxisDirection.POSITIVE)
|
||||
continue;
|
||||
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(.5, .5, .5);
|
||||
RenderSystem.rotatef(AngleHelper.horizontalAngle(d), 0, 1, 0);
|
||||
RenderSystem.rotatef(AngleHelper.verticalAngle(d) - 90, 0, 0, 1);
|
||||
RenderSystem.translated(-.5, -.5, -.5);
|
||||
blockRenderer.renderFluid(new BlockPos(0, 1, 0), renderWorld, vb, blockState.getFluidState());
|
||||
buffer.draw(type);
|
||||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
||||
RenderHelper.enable();
|
||||
RenderSystem.popMatrix();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -242,10 +272,30 @@ public class GuiGameElement {
|
||||
prepare();
|
||||
transform();
|
||||
Minecraft.getInstance()
|
||||
.getItemRenderer()
|
||||
.renderItemIntoGUI(stack, 0, 0);
|
||||
.getItemRenderer()
|
||||
.renderItemIntoGUI(stack, 0, 0);
|
||||
cleanUp();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static FluidRenderWorld renderWorld;
|
||||
|
||||
private static class FluidRenderWorld extends WrappedWorld {
|
||||
|
||||
public FluidRenderWorld(World world) {
|
||||
super(world);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLightLevel(LightType p_226658_1_, BlockPos p_226658_2_) {
|
||||
return 15;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getBlockState(BlockPos pos) {
|
||||
return Blocks.AIR.getDefaultState();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -3,15 +3,21 @@ package com.simibubi.create.modules.curiosities.symmetry;
|
||||
import java.util.Random;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.mojang.blaze3d.vertex.IVertexBuilder;
|
||||
import com.simibubi.create.AllItems;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.modules.curiosities.symmetry.mirror.EmptyMirror;
|
||||
import com.simibubi.create.modules.curiosities.symmetry.mirror.SymmetryMirror;
|
||||
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
||||
import net.minecraft.client.renderer.ActiveRenderInfo;
|
||||
import net.minecraft.client.renderer.Atlases;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@ -40,7 +46,8 @@ public class SymmetryHandler {
|
||||
|
||||
@SubscribeEvent(priority = EventPriority.LOWEST)
|
||||
public static void onBlockPlaced(EntityPlaceEvent event) {
|
||||
if (event.getWorld().isRemote())
|
||||
if (event.getWorld()
|
||||
.isRemote())
|
||||
return;
|
||||
if (!(event.getEntity() instanceof PlayerEntity))
|
||||
return;
|
||||
@ -48,22 +55,27 @@ public class SymmetryHandler {
|
||||
PlayerEntity player = (PlayerEntity) event.getEntity();
|
||||
PlayerInventory inv = player.inventory;
|
||||
for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) {
|
||||
if (!inv.getStackInSlot(i).isEmpty() && inv.getStackInSlot(i).getItem() == AllItems.SYMMETRY_WAND.get()) {
|
||||
if (!inv.getStackInSlot(i)
|
||||
.isEmpty()
|
||||
&& inv.getStackInSlot(i)
|
||||
.getItem() == AllItems.SYMMETRY_WAND.get()) {
|
||||
SymmetryWandItem.apply(player.world, inv.getStackInSlot(i), player, event.getPos(),
|
||||
event.getPlacedBlock());
|
||||
event.getPlacedBlock());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent(priority = EventPriority.LOWEST)
|
||||
public static void onBlockDestroyed(BreakEvent event) {
|
||||
if (event.getWorld().isRemote())
|
||||
if (event.getWorld()
|
||||
.isRemote())
|
||||
return;
|
||||
|
||||
PlayerEntity player = event.getPlayer();
|
||||
PlayerInventory inv = player.inventory;
|
||||
for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) {
|
||||
if (!inv.getStackInSlot(i).isEmpty() && AllItems.SYMMETRY_WAND.typeOf(inv.getStackInSlot(i))) {
|
||||
if (!inv.getStackInSlot(i)
|
||||
.isEmpty() && AllItems.SYMMETRY_WAND.typeOf(inv.getStackInSlot(i))) {
|
||||
SymmetryWandItem.remove(player.world, inv.getStackInSlot(i), player, event.getPos());
|
||||
}
|
||||
}
|
||||
@ -77,34 +89,48 @@ public class SymmetryHandler {
|
||||
|
||||
for (int i = 0; i < PlayerInventory.getHotbarSize(); i++) {
|
||||
ItemStack stackInSlot = player.inventory.getStackInSlot(i);
|
||||
if (stackInSlot != null && AllItems.SYMMETRY_WAND.typeOf(stackInSlot)
|
||||
&& SymmetryWandItem.isEnabled(stackInSlot)) {
|
||||
SymmetryMirror mirror = SymmetryWandItem.getMirror(stackInSlot);
|
||||
if (mirror instanceof EmptyMirror)
|
||||
continue;
|
||||
if (!AllItems.SYMMETRY_WAND.typeOf(stackInSlot))
|
||||
continue;
|
||||
if (!SymmetryWandItem.isEnabled(stackInSlot))
|
||||
continue;
|
||||
SymmetryMirror mirror = SymmetryWandItem.getMirror(stackInSlot);
|
||||
if (mirror instanceof EmptyMirror)
|
||||
continue;
|
||||
|
||||
BlockPos pos = new BlockPos(mirror.getPosition());
|
||||
BlockPos pos = new BlockPos(mirror.getPosition());
|
||||
|
||||
float yShift = 0;
|
||||
double speed = 1 / 16d;
|
||||
yShift = MathHelper.sin((float) ((tickCounter) * speed)) / 5f;
|
||||
float yShift = 0;
|
||||
double speed = 1 / 16d;
|
||||
yShift = MathHelper.sin((float) (AnimationTickHolder.getRenderTick() * speed)) / 5f;
|
||||
|
||||
IRenderTypeBuffer buffer = Minecraft.getInstance().getBufferBuilders().getEntityVertexConsumers();
|
||||
ActiveRenderInfo info = mc.gameRenderer.getActiveRenderInfo();
|
||||
Vec3d view = info.getProjectedView();
|
||||
|
||||
MatrixStack ms = event.getMatrixStack();
|
||||
ms.push();
|
||||
ms.translate(-view.getX(), -view.getY(), -view.getZ());
|
||||
ms.translate(pos.getX(), pos.getY(), pos.getZ());
|
||||
ms.translate(0, yShift + .2f, 0);
|
||||
mc.getBlockRendererDispatcher().renderModel(mirror.getModel(), pos, player.world, ms, buffer.getBuffer(Atlases.getEntityTranslucent()),
|
||||
false, player.world.getRandom(), EmptyModelData.INSTANCE);
|
||||
|
||||
Minecraft.getInstance().getBufferBuilders().getEntityVertexConsumers().draw(Atlases.getEntityTranslucent());
|
||||
|
||||
ms.pop();
|
||||
}
|
||||
IRenderTypeBuffer buffer = Minecraft.getInstance()
|
||||
.getBufferBuilders()
|
||||
.getEntityVertexConsumers();
|
||||
ActiveRenderInfo info = mc.gameRenderer.getActiveRenderInfo();
|
||||
Vec3d view = info.getProjectedView();
|
||||
|
||||
MatrixStack ms = event.getMatrixStack();
|
||||
ms.push();
|
||||
ms.translate(-view.getX(), -view.getY(), -view.getZ());
|
||||
ms.translate(pos.getX(), pos.getY(), pos.getZ());
|
||||
ms.translate(0, yShift + .2f, 0);
|
||||
mirror.applyModelTransform(ms);
|
||||
IBakedModel model = mirror.getModel()
|
||||
.get();
|
||||
IVertexBuilder builder = buffer.getBuffer(RenderType.getTranslucent());
|
||||
|
||||
mc.getBlockRendererDispatcher()
|
||||
.getBlockModelRenderer()
|
||||
.renderModel(player.world, model, Blocks.AIR.getDefaultState(), pos, ms, builder, true,
|
||||
player.world.getRandom(), MathHelper.getPositionRandom(pos), OverlayTexture.DEFAULT_UV,
|
||||
EmptyModelData.INSTANCE);
|
||||
|
||||
Minecraft.getInstance()
|
||||
.getBufferBuilders()
|
||||
.getEntityVertexConsumers()
|
||||
.draw(Atlases.getEntityTranslucent());
|
||||
|
||||
ms.pop();
|
||||
}
|
||||
}
|
||||
|
||||
@ -128,7 +154,7 @@ public class SymmetryHandler {
|
||||
ItemStack stackInSlot = player.inventory.getStackInSlot(i);
|
||||
|
||||
if (stackInSlot != null && AllItems.SYMMETRY_WAND.typeOf(stackInSlot)
|
||||
&& SymmetryWandItem.isEnabled(stackInSlot)) {
|
||||
&& SymmetryWandItem.isEnabled(stackInSlot)) {
|
||||
|
||||
SymmetryMirror mirror = SymmetryWandItem.getMirror(stackInSlot);
|
||||
if (mirror instanceof EmptyMirror)
|
||||
@ -138,7 +164,8 @@ public class SymmetryHandler {
|
||||
double offsetX = (r.nextDouble() - 0.5) * 0.3;
|
||||
double offsetZ = (r.nextDouble() - 0.5) * 0.3;
|
||||
|
||||
Vec3d pos = mirror.getPosition().add(0.5 + offsetX, 1 / 4d, 0.5 + offsetZ);
|
||||
Vec3d pos = mirror.getPosition()
|
||||
.add(0.5 + offsetX, 1 / 4d, 0.5 + offsetZ);
|
||||
Vec3d speed = new Vec3d(0, r.nextDouble() * 1 / 8f, 0);
|
||||
mc.world.addParticle(ParticleTypes.END_ROD, pos.x, pos.y, pos.z, speed.x, speed.y, speed.z);
|
||||
}
|
||||
@ -153,7 +180,8 @@ public class SymmetryHandler {
|
||||
Vec3d end = new Vec3d(to).add(0.5, 0.5, 0.5);
|
||||
Vec3d diff = end.subtract(start);
|
||||
|
||||
Vec3d step = diff.normalize().scale(density);
|
||||
Vec3d step = diff.normalize()
|
||||
.scale(density);
|
||||
int steps = (int) (diff.length() / step.length());
|
||||
|
||||
Random r = new Random();
|
||||
@ -161,20 +189,19 @@ public class SymmetryHandler {
|
||||
Vec3d pos = start.add(step.scale(i));
|
||||
Vec3d speed = new Vec3d(0, r.nextDouble() * -40f, 0);
|
||||
|
||||
Minecraft.getInstance().world.addParticle(
|
||||
new RedstoneParticleData(1, 1, 1, 1),
|
||||
pos.x, pos.y, pos.z, speed.x, speed.y, speed.z);
|
||||
Minecraft.getInstance().world.addParticle(new RedstoneParticleData(1, 1, 1, 1), pos.x, pos.y, pos.z,
|
||||
speed.x, speed.y, speed.z);
|
||||
}
|
||||
|
||||
Vec3d speed = new Vec3d(0, r.nextDouble() * 1 / 32f, 0);
|
||||
Vec3d pos = start.add(step.scale(2));
|
||||
Minecraft.getInstance().world.addParticle(ParticleTypes.END_ROD, pos.x, pos.y, pos.z, speed.x, speed.y,
|
||||
speed.z);
|
||||
speed.z);
|
||||
|
||||
speed = new Vec3d(0, r.nextDouble() * 1 / 32f, 0);
|
||||
pos = start.add(step.scale(steps));
|
||||
Minecraft.getInstance().world.addParticle(ParticleTypes.END_ROD, pos.x, pos.y, pos.z, speed.x, speed.y,
|
||||
speed.z);
|
||||
speed.z);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,12 +1,11 @@
|
||||
package com.simibubi.create.modules.curiosities.symmetry;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.mojang.blaze3d.platform.GlStateManager.DestFactor;
|
||||
import com.mojang.blaze3d.platform.GlStateManager.SourceFactor;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.simibubi.create.AllPackets;
|
||||
import com.simibubi.create.ScreenResources;
|
||||
import com.simibubi.create.foundation.gui.AbstractSimiScreen;
|
||||
import com.simibubi.create.foundation.gui.GuiGameElement;
|
||||
import com.simibubi.create.foundation.gui.widgets.Label;
|
||||
import com.simibubi.create.foundation.gui.widgets.ScrollInput;
|
||||
import com.simibubi.create.foundation.gui.widgets.SelectionScrollInput;
|
||||
@ -18,18 +17,11 @@ import com.simibubi.create.modules.curiosities.symmetry.mirror.PlaneMirror;
|
||||
import com.simibubi.create.modules.curiosities.symmetry.mirror.SymmetryMirror;
|
||||
import com.simibubi.create.modules.curiosities.symmetry.mirror.TriplePlaneMirror;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.Vector3f;
|
||||
import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
import net.minecraft.inventory.container.PlayerContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraftforge.client.model.data.EmptyModelData;
|
||||
import net.minecraftforge.fml.network.PacketDistributor;
|
||||
|
||||
public class SymmetryWandScreen extends AbstractSimiScreen {
|
||||
@ -43,7 +35,6 @@ public class SymmetryWandScreen extends AbstractSimiScreen {
|
||||
private final String orientation = Lang.translate("gui.symmetryWand.orientation");
|
||||
|
||||
private SymmetryMirror currentElement;
|
||||
private float animationProgress;
|
||||
private ItemStack wand;
|
||||
private Hand hand;
|
||||
|
||||
@ -56,7 +47,6 @@ public class SymmetryWandScreen extends AbstractSimiScreen {
|
||||
}
|
||||
this.hand = hand;
|
||||
this.wand = wand;
|
||||
animationProgress = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -117,12 +107,6 @@ public class SymmetryWandScreen extends AbstractSimiScreen {
|
||||
widgets.add(areaAlign);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
animationProgress++;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
||||
ScreenResources.WAND_SYMMETRY.draw(this, guiLeft, guiTop);
|
||||
@ -133,54 +117,32 @@ public class SymmetryWandScreen extends AbstractSimiScreen {
|
||||
font.drawString(mirrorType, x - 5, y, ScreenResources.FONT_COLOR);
|
||||
font.drawString(orientation, x - 5, y + 20, ScreenResources.FONT_COLOR);
|
||||
|
||||
minecraft.getTextureManager()
|
||||
.bindTexture(PlayerContainer.BLOCK_ATLAS_TEXTURE);
|
||||
RenderSystem.enableBlend();
|
||||
|
||||
renderBlock();
|
||||
renderBlock();
|
||||
|
||||
RenderSystem.pushLightingAttributes();
|
||||
RenderSystem.pushMatrix();
|
||||
|
||||
RenderHelper.enable();
|
||||
RenderSystem.enableBlend();
|
||||
RenderSystem.enableRescaleNormal();
|
||||
RenderSystem.enableAlphaTest();
|
||||
RenderSystem.alphaFunc(516, 0.1F);
|
||||
RenderSystem.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA);
|
||||
RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
RenderSystem.translated((this.width - this.sWidth) / 2 + 250, this.height / 2 + this.sHeight / 2, 100);
|
||||
RenderSystem.rotatef(-30, .4f, 0, -.2f);
|
||||
RenderSystem.rotatef(90 + 0.2f * animationProgress, 0, 1, 0);
|
||||
RenderSystem.scaled(100, -100, 100);
|
||||
itemRenderer.renderItem(wand, TransformType.NONE, 0xF000F0, OverlayTexture.DEFAULT_UV, new MatrixStack(),
|
||||
Minecraft.getInstance()
|
||||
.getBufferBuilders()
|
||||
.getEntityVertexConsumers());
|
||||
|
||||
RenderSystem.disableAlphaTest();
|
||||
RenderSystem.disableRescaleNormal();
|
||||
RenderSystem.disableLighting();
|
||||
|
||||
RenderSystem.translated(0, 0, 200);
|
||||
RenderSystem.rotatef(-20, -3.5f, 1, 1);
|
||||
GuiGameElement.of(wand)
|
||||
.at(guiLeft + 220, guiTop + 220)
|
||||
.scale(4)
|
||||
.render();
|
||||
RenderSystem.popMatrix();
|
||||
RenderSystem.popAttributes();
|
||||
}
|
||||
|
||||
protected void renderBlock() {
|
||||
MatrixStack ms = new MatrixStack();
|
||||
IRenderTypeBuffer buffer = Minecraft.getInstance()
|
||||
.getBufferBuilders()
|
||||
.getEntityVertexConsumers();
|
||||
RenderSystem.pushMatrix();
|
||||
|
||||
ms.translate(guiLeft + 15, guiTop - 117, 20);
|
||||
MatrixStack ms = new MatrixStack();
|
||||
ms.translate(guiLeft + 18, guiTop + 11, 20);
|
||||
ms.multiply(new Vector3f(.3f, 1f, 0f).getDegreesQuaternion(-22.5f));
|
||||
ms.scale(32, -32, 32);
|
||||
ms.translate(0, -5, 0);
|
||||
minecraft.getBlockRendererDispatcher()
|
||||
.renderBlock(currentElement.getModel(), ms, buffer, 0xF000F0, OverlayTexture.DEFAULT_UV,
|
||||
EmptyModelData.INSTANCE);
|
||||
currentElement.applyModelTransform(ms);
|
||||
RenderSystem.multMatrix(ms.peek()
|
||||
.getModel());
|
||||
GuiGameElement.of(currentElement.getModel())
|
||||
.render();
|
||||
|
||||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,27 +0,0 @@
|
||||
package com.simibubi.create.modules.curiosities.symmetry.block;
|
||||
|
||||
import com.simibubi.create.modules.curiosities.symmetry.mirror.CrossPlaneMirror;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.state.EnumProperty;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
|
||||
public class CrossPlaneSymmetryBlock extends SymmetryBlock {
|
||||
|
||||
public static final EnumProperty<CrossPlaneMirror.Align> align = EnumProperty.create("align",
|
||||
CrossPlaneMirror.Align.class);
|
||||
|
||||
public CrossPlaneSymmetryBlock() {
|
||||
super(Properties.create(Material.AIR));
|
||||
this.setDefaultState(getDefaultState().with(align, CrossPlaneMirror.Align.Y));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||
builder.add(align);
|
||||
super.fillStateContainer(builder);
|
||||
}
|
||||
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package com.simibubi.create.modules.curiosities.symmetry.block;
|
||||
|
||||
import com.simibubi.create.modules.curiosities.symmetry.mirror.PlaneMirror;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.state.EnumProperty;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
|
||||
public class PlaneSymmetryBlock extends SymmetryBlock {
|
||||
|
||||
public static final EnumProperty<PlaneMirror.Align> align = EnumProperty.create("align", PlaneMirror.Align.class);
|
||||
|
||||
public PlaneSymmetryBlock() {
|
||||
super(Properties.create(Material.AIR));
|
||||
this.setDefaultState(getDefaultState().with(align, PlaneMirror.Align.XY));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||
builder.add(align);
|
||||
super.fillStateContainer(builder);
|
||||
}
|
||||
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
package com.simibubi.create.modules.curiosities.symmetry.block;
|
||||
|
||||
import com.simibubi.create.foundation.block.IRenderUtilityBlock;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
|
||||
public class SymmetryBlock extends Block implements IRenderUtilityBlock {
|
||||
|
||||
public SymmetryBlock(Properties properties) {
|
||||
super(properties.noDrops());
|
||||
}
|
||||
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
package com.simibubi.create.modules.curiosities.symmetry.block;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
|
||||
public class TriplePlaneSymmetryBlock extends SymmetryBlock {
|
||||
|
||||
public TriplePlaneSymmetryBlock() {
|
||||
super(Properties.create(Material.AIR));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -5,9 +5,10 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.modules.curiosities.symmetry.block.CrossPlaneSymmetryBlock;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.IStringSerializable;
|
||||
@ -84,9 +85,16 @@ public class CrossPlaneMirror extends SymmetryMirror {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getModel() {
|
||||
return AllBlocks.SYMMETRY_CROSSPLANE.get().getDefaultState().with(CrossPlaneSymmetryBlock.align,
|
||||
(Align) orientation);
|
||||
public AllBlockPartials getModel() {
|
||||
return AllBlockPartials.SYMMETRY_CROSSPLANE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyModelTransform(MatrixStack ms) {
|
||||
super.applyModelTransform(ms);
|
||||
ms.translate(.5, .5, .5);
|
||||
ms.multiply(VecHelper.rotateY(((Align) orientation) == Align.Y ? 0 : 45));
|
||||
ms.translate(-.5, -.5, -.5);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -5,6 +5,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.IStringSerializable;
|
||||
@ -48,7 +49,7 @@ public class EmptyMirror extends SymmetryMirror {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getModel() {
|
||||
public AllBlockPartials getModel() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -5,9 +5,10 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.modules.curiosities.symmetry.block.PlaneSymmetryBlock;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.IStringSerializable;
|
||||
@ -80,8 +81,16 @@ public class PlaneMirror extends SymmetryMirror {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getModel() {
|
||||
return AllBlocks.SYMMETRY_PLANE.get().getDefaultState().with(PlaneSymmetryBlock.align, (Align) orientation);
|
||||
public AllBlockPartials getModel() {
|
||||
return AllBlockPartials.SYMMETRY_PLANE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyModelTransform(MatrixStack ms) {
|
||||
super.applyModelTransform(ms);
|
||||
ms.translate(.5, .5, .5);
|
||||
ms.multiply(VecHelper.rotateY(((Align) orientation) == Align.XY ? 0 : 90));
|
||||
ms.translate(-.5, -.5, -.5);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -5,6 +5,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
@ -41,7 +43,7 @@ public abstract class SymmetryMirror {
|
||||
|
||||
public static List<String> getMirrors() {
|
||||
return ImmutableList.of(Lang.translate("symmetry.mirror.plane"), Lang.translate("symmetry.mirror.doublePlane"),
|
||||
Lang.translate("symmetry.mirror.triplePlane"));
|
||||
Lang.translate("symmetry.mirror.triplePlane"));
|
||||
}
|
||||
|
||||
public IStringSerializable getOrientation() {
|
||||
@ -77,7 +79,9 @@ public abstract class SymmetryMirror {
|
||||
|
||||
public abstract String typeName();
|
||||
|
||||
public abstract BlockState getModel();
|
||||
public abstract AllBlockPartials getModel();
|
||||
|
||||
public void applyModelTransform(MatrixStack ms) {}
|
||||
|
||||
private static final String $ORIENTATION = "direction";
|
||||
private static final String $POSITION = "pos";
|
||||
@ -126,7 +130,8 @@ public abstract class SymmetryMirror {
|
||||
}
|
||||
|
||||
protected Vec3d getDiff(BlockPos position) {
|
||||
return this.position.scale(-1).add(position.getX(), position.getY(), position.getZ());
|
||||
return this.position.scale(-1)
|
||||
.add(position.getX(), position.getY(), position.getZ());
|
||||
}
|
||||
|
||||
protected BlockPos getIDiff(BlockPos position) {
|
||||
@ -160,11 +165,13 @@ public abstract class SymmetryMirror {
|
||||
}
|
||||
|
||||
protected BlockState flipD1(BlockState in) {
|
||||
return in.rotate(Rotation.COUNTERCLOCKWISE_90).mirror(Mirror.FRONT_BACK);
|
||||
return in.rotate(Rotation.COUNTERCLOCKWISE_90)
|
||||
.mirror(Mirror.FRONT_BACK);
|
||||
}
|
||||
|
||||
protected BlockState flipD2(BlockState in) {
|
||||
return in.rotate(Rotation.COUNTERCLOCKWISE_90).mirror(Mirror.LEFT_RIGHT);
|
||||
return in.rotate(Rotation.COUNTERCLOCKWISE_90)
|
||||
.mirror(Mirror.LEFT_RIGHT);
|
||||
}
|
||||
|
||||
protected BlockPos flipX(BlockPos position) {
|
||||
@ -185,13 +192,13 @@ public abstract class SymmetryMirror {
|
||||
protected BlockPos flipD2(BlockPos position) {
|
||||
BlockPos diff = getIDiff(position);
|
||||
return new BlockPos(position.getX() - diff.getX() + diff.getZ(), position.getY(),
|
||||
position.getZ() - diff.getZ() + diff.getX());
|
||||
position.getZ() - diff.getZ() + diff.getX());
|
||||
}
|
||||
|
||||
protected BlockPos flipD1(BlockPos position) {
|
||||
BlockPos diff = getIDiff(position);
|
||||
return new BlockPos(position.getX() - diff.getX() - diff.getZ(), position.getY(),
|
||||
position.getZ() - diff.getZ() - diff.getX());
|
||||
position.getZ() - diff.getZ() - diff.getX());
|
||||
}
|
||||
|
||||
public void setPosition(Vec3d pos3d) {
|
||||
|
@ -5,7 +5,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
@ -42,8 +42,8 @@ public class TriplePlaneMirror extends SymmetryMirror {
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getModel() {
|
||||
return AllBlocks.SYMMETRY_TRIPLEPLANE.get().getDefaultState();
|
||||
public AllBlockPartials getModel() {
|
||||
return AllBlockPartials.SYMMETRY_TRIPLEPLANE;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"forgemarker": 1,
|
||||
"variants": {
|
||||
"align=y": { "model": "create:block/symmetry_crossplane"},
|
||||
"align=d": { "model": "create:block/symmetry_crossplane_diagonal"}
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
{
|
||||
"variants": {
|
||||
"align=xy": { "model": "create:block/symmetry_plane" },
|
||||
"align=yz": { "model": "create:block/symmetry_plane", "y": 90 }
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"variants": {
|
||||
"": { "model": "create:block/symmetry_tripleplane" }
|
||||
}
|
||||
}
|
@ -1,148 +0,0 @@
|
||||
{
|
||||
"__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)",
|
||||
"textures": {
|
||||
"0": "block/white_stained_glass",
|
||||
"1": "block/obsidian",
|
||||
"2": "block/packed_ice"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "Mirror",
|
||||
"from": [ 4.0, 1.0, 7.500000007450581 ],
|
||||
"to": [ 7.0, 12.0, 8.50000000745058 ],
|
||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 },
|
||||
"faces": {
|
||||
"north": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] },
|
||||
"east": { "texture": "#0", "uv": [ 3.0, 1.0, 4.0, 12.0 ] },
|
||||
"south": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] },
|
||||
"west": { "texture": "#0", "uv": [ 12.0, 1.0, 13.0, 12.0 ] },
|
||||
"up": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 2.0 ] },
|
||||
"down": { "texture": "#0", "uv": [ 4.0, 14.0, 7.0, 15.0 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rod_left_bottom",
|
||||
"from": [ 1.2000000029802322, 3.0, 7.0 ],
|
||||
"to": [ 3.2000000029802322, 4.0, 9.0 ],
|
||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 },
|
||||
"faces": {
|
||||
"north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
|
||||
"down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rod_left_top",
|
||||
"from": [ 1.2000000029802322, 12.0, 7.0 ],
|
||||
"to": [ 3.2000000029802322, 13.0, 9.0 ],
|
||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 },
|
||||
"faces": {
|
||||
"north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
|
||||
"down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rod_left",
|
||||
"from": [ 2.0, 4.0, 7.499999992549419 ],
|
||||
"to": [ 3.0, 12.0, 8.49999999254942 ],
|
||||
"shade": false,
|
||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 },
|
||||
"faces": {
|
||||
"north": { "texture": "#2", "uv": [ 3.0, 1.0, 4.0, 9.0 ] },
|
||||
"east": { "texture": "#2", "uv": [ 3.0, 0.0, 4.0, 8.0 ] },
|
||||
"south": { "texture": "#2", "uv": [ 3.0, 1.0, 4.0, 9.0 ] },
|
||||
"west": { "texture": "#2", "uv": [ 5.0, 1.0, 6.0, 9.0 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rod_right_bottom",
|
||||
"from": [ 12.799999997019768, 3.0, 7.0 ],
|
||||
"to": [ 14.799999997019768, 4.0, 9.0 ],
|
||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 },
|
||||
"faces": {
|
||||
"north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
|
||||
"down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rod_right",
|
||||
"from": [ 13.0, 4.0, 7.499999992549419 ],
|
||||
"to": [ 14.0, 12.0, 8.49999999254942 ],
|
||||
"shade": false,
|
||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 },
|
||||
"faces": {
|
||||
"north": { "texture": "#2", "uv": [ 3.0, 2.0, 4.0, 10.0 ] },
|
||||
"east": { "texture": "#2", "uv": [ 3.0, 3.0, 4.0, 11.0 ] },
|
||||
"south": { "texture": "#2", "uv": [ 4.0, 3.0, 5.0, 11.0 ] },
|
||||
"west": { "texture": "#2", "uv": [ 5.0, 0.0, 6.0, 8.0 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "rod_right_top",
|
||||
"from": [ 12.799999997019768, 12.0, 7.0 ],
|
||||
"to": [ 14.799999997019768, 13.0, 9.0 ],
|
||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 22.5 },
|
||||
"faces": {
|
||||
"north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"east": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"west": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 1.0 ] },
|
||||
"up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] },
|
||||
"down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CrossMirror",
|
||||
"from": [ 7.499999992549419, 4.0, 9.50000000745058 ],
|
||||
"to": [ 8.49999999254942, 15.0, 12.50000000745058 ],
|
||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 },
|
||||
"faces": {
|
||||
"north": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 12.0 ] },
|
||||
"east": { "texture": "#0", "uv": [ 3.0, 1.0, 6.0, 12.0 ] },
|
||||
"south": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 12.0 ] },
|
||||
"west": { "texture": "#0", "uv": [ 9.0, 1.0, 12.0, 12.0 ] },
|
||||
"up": { "texture": "#0", "uv": [ 3.0, 3.0, 4.0, 6.0 ] },
|
||||
"down": { "texture": "#0", "uv": [ 5.0, 9.0, 6.0, 12.0 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Mirror II",
|
||||
"from": [ 9.0, 3.0, 7.500000007450581 ],
|
||||
"to": [ 12.0, 14.0, 8.50000000745058 ],
|
||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 },
|
||||
"faces": {
|
||||
"north": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] },
|
||||
"east": { "texture": "#0", "uv": [ 3.0, 1.0, 4.0, 12.0 ] },
|
||||
"south": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 12.0 ] },
|
||||
"west": { "texture": "#0", "uv": [ 12.0, 1.0, 13.0, 12.0 ] },
|
||||
"up": { "texture": "#0", "uv": [ 4.0, 1.0, 7.0, 2.0 ] },
|
||||
"down": { "texture": "#0", "uv": [ 4.0, 14.0, 7.0, 15.0 ] }
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CrossMirror II",
|
||||
"from": [ 7.499999992549419, 2.0, 3.5000000074505806 ],
|
||||
"to": [ 8.49999999254942, 13.0, 6.500000007450581 ],
|
||||
"rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 },
|
||||
"faces": {
|
||||
"north": { "texture": "#0", "uv": [ 4.0, 1.0, 5.0, 12.0 ] },
|
||||
"east": { "texture": "#0", "uv": [ 3.0, 1.0, 6.0, 12.0 ] },
|
||||
"south": { "texture": "#0", "uv": [ 4.0, 3.0, 5.0, 14.0 ] },
|
||||
"west": { "texture": "#0", "uv": [ 9.0, 2.0, 12.0, 13.0 ] },
|
||||
"up": { "texture": "#0", "uv": [ 4.0, 3.0, 5.0, 6.0 ] },
|
||||
"down": { "texture": "#0", "uv": [ 4.0, 8.0, 5.0, 11.0 ] }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.7 KiB |
Loading…
Reference in New Issue
Block a user