waaaaaa
This commit is contained in:
parent
d6ed36063d
commit
0f5f9e43cc
|
|
@ -21,6 +21,8 @@ import net.minecraft.client.multiplayer.ClientAdvancements;
|
||||||
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
|
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
|
||||||
|
import net.minecraft.client.renderer.texture.TextureAtlas;
|
||||||
|
import net.minecraft.client.resources.model.Material;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.NonNullList;
|
import net.minecraft.core.NonNullList;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
|
@ -46,10 +48,7 @@ import net.minecraft.world.phys.BlockHitResult;
|
||||||
import net.minecraft.world.phys.HitResult;
|
import net.minecraft.world.phys.HitResult;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.client.event.ModelEvent;
|
import net.minecraftforge.client.event.*;
|
||||||
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
|
|
||||||
import net.minecraftforge.client.event.RenderHandEvent;
|
|
||||||
import net.minecraftforge.client.event.RenderHighlightEvent;
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.level.LevelEvent;
|
import net.minecraftforge.event.level.LevelEvent;
|
||||||
|
|
@ -226,7 +225,6 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onClientSetup(FMLClientSetupEvent event) {
|
public static void onClientSetup(FMLClientSetupEvent event) {
|
||||||
BlockEntityRenderers.register(TileInit.SCREEN_BLOCK_ENTITY.get(), new ScreenRenderer.ScreenRendererProvider());
|
BlockEntityRenderers.register(TileInit.SCREEN_BLOCK_ENTITY.get(), new ScreenRenderer.ScreenRendererProvider());
|
||||||
registerBlockRenderLayers(RenderType.cutout(), BlockInit.blockKeyBoard.get(), BlockInit.blockKbRight.get());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|
@ -579,16 +577,17 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
|
||||||
|
|
||||||
/**************************************** EVENT METHODS ****************************************/
|
/**************************************** EVENT METHODS ****************************************/
|
||||||
|
|
||||||
// @SubscribeEvent TODO: CHeck if we need this at all
|
@SubscribeEvent
|
||||||
// public void onStitchTextures(TextureStitchEvent.Pre ev) {
|
public void onStitchTextures(TextureStitchEvent.Pre ev) {
|
||||||
// TextureAtlas texMap = ev.getAtlas();
|
TextureAtlas texMap = ev.getAtlas();
|
||||||
//
|
|
||||||
// if(texMap == mc.getTextureManager()..getTextureAtlas()) {
|
if (texMap.location().equals(TextureAtlas.LOCATION_BLOCKS)) {
|
||||||
// for(ResourceModelPair pair : modelBakers)
|
for (Material materialsSide : ScreenModelLoader.MATERIALS_SIDES) {
|
||||||
// pair.getModel().loadTextures(texMap);
|
ev.addSprite(materialsSide.texture());
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
//
|
}
|
||||||
|
|
||||||
// @SubscribeEvent
|
// @SubscribeEvent
|
||||||
// public void onBakeModel(ModelBakeEvent ev) {
|
// public void onBakeModel(ModelBakeEvent ev) {
|
||||||
// for(ResourceModelPair pair : modelBakers)
|
// for(ResourceModelPair pair : modelBakers)
|
||||||
|
|
|
||||||
|
|
@ -230,7 +230,7 @@ public class GuiServer extends WDScreen {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
|
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||||
if (keyCode == GLFW.GLFW_KEY_ESCAPE) {
|
if (keyCode == GLFW.GLFW_KEY_ESCAPE && !uploadWizard) {
|
||||||
Minecraft.getInstance().setScreen(null);
|
Minecraft.getInstance().setScreen(null);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -371,6 +371,10 @@ public class GuiServer extends WDScreen {
|
||||||
|
|
||||||
if (keyCode == GLFW.GLFW_KEY_SPACE)
|
if (keyCode == GLFW.GLFW_KEY_SPACE)
|
||||||
typedChar = ' ';
|
typedChar = ' ';
|
||||||
|
if (
|
||||||
|
(typedChar == 'v' || typedChar == 'V') &&
|
||||||
|
(modifier & 2) == 2
|
||||||
|
) return;
|
||||||
|
|
||||||
if (keyCode == GLFW.GLFW_KEY_BACKSPACE) {
|
if (keyCode == GLFW.GLFW_KEY_BACKSPACE) {
|
||||||
if (prompt.length() > 0)
|
if (prompt.length() > 0)
|
||||||
|
|
@ -384,7 +388,6 @@ public class GuiServer extends WDScreen {
|
||||||
} else
|
} else
|
||||||
writeLine(userPrompt);
|
writeLine(userPrompt);
|
||||||
} else if (prompt.length() + 1 < MAX_LINE_LEN && typedChar >= 32 && typedChar <= 126)
|
} else if (prompt.length() + 1 < MAX_LINE_LEN && typedChar >= 32 && typedChar <= 126)
|
||||||
|
|
||||||
prompt = prompt + typedChar;
|
prompt = prompt + typedChar;
|
||||||
|
|
||||||
blinkTime = 0;
|
blinkTime = 0;
|
||||||
|
|
|
||||||
|
|
@ -5,19 +5,24 @@
|
||||||
package net.montoyo.wd.client.renderers;
|
package net.montoyo.wd.client.renderers;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||||
import net.minecraft.client.renderer.block.model.ItemOverrides;
|
import net.minecraft.client.renderer.block.model.ItemOverrides;
|
||||||
import net.minecraft.client.renderer.block.model.ItemTransforms;
|
import net.minecraft.client.renderer.block.model.ItemTransforms;
|
||||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||||
import net.minecraft.client.resources.model.BakedModel;
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
import net.minecraft.client.resources.model.ModelState;
|
import net.minecraft.client.resources.model.ModelState;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.util.RandomSource;
|
import net.minecraft.util.RandomSource;
|
||||||
|
import net.minecraft.world.level.BlockAndTintGetter;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.properties.IntegerProperty;
|
import net.minecraftforge.client.model.data.ModelData;
|
||||||
|
import net.minecraftforge.client.model.data.ModelProperty;
|
||||||
import net.montoyo.wd.utilities.BlockSide;
|
import net.montoyo.wd.utilities.BlockSide;
|
||||||
import net.montoyo.wd.utilities.Vector3f;
|
import net.montoyo.wd.utilities.Vector3f;
|
||||||
import net.montoyo.wd.utilities.Vector3i;
|
import net.montoyo.wd.utilities.Vector3i;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
@ -27,129 +32,184 @@ import java.util.function.Function;
|
||||||
|
|
||||||
public class ScreenBaker implements BakedModel {
|
public class ScreenBaker implements BakedModel {
|
||||||
|
|
||||||
private static final List<BakedQuad> noQuads = ImmutableList.of();
|
private static final List<BakedQuad> noQuads = ImmutableList.of();
|
||||||
private final TextureAtlasSprite[] texs = new TextureAtlasSprite[16];
|
private final TextureAtlasSprite[] texs = new TextureAtlasSprite[16];
|
||||||
private final BlockSide[] blockSides = BlockSide.values();
|
private final BlockSide[] blockSides = BlockSide.values();
|
||||||
private final Direction[] blockFacings = Direction.values();
|
private final Direction[] blockFacings = Direction.values();
|
||||||
private final ModelState modelState;
|
private final ModelState modelState;
|
||||||
private final Function<net.minecraft.client.resources.model.Material, TextureAtlasSprite> spriteGetter;
|
private final Function<net.minecraft.client.resources.model.Material, TextureAtlasSprite> spriteGetter;
|
||||||
private final ItemOverrides overrides;
|
private final ItemOverrides overrides;
|
||||||
private final ItemTransforms itemTransforms;
|
private final ItemTransforms itemTransforms;
|
||||||
|
|
||||||
public ScreenBaker(ModelState modelState, Function<net.minecraft.client.resources.model.Material, TextureAtlasSprite> spriteGetter, ItemOverrides overrides, ItemTransforms itemTransforms) {
|
IntegerModelProperty[] TEXTURES = new IntegerModelProperty[6];
|
||||||
this.modelState = modelState;
|
|
||||||
this.spriteGetter = spriteGetter;
|
|
||||||
this.overrides = overrides;
|
|
||||||
this.itemTransforms = itemTransforms;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void putVertex(int[] buf, int pos, Vector3f vpos, TextureAtlasSprite tex, Vector3f uv, Vector3i normal) {
|
public ScreenBaker(ModelState modelState, Function<net.minecraft.client.resources.model.Material, TextureAtlasSprite> spriteGetter, ItemOverrides overrides, ItemTransforms itemTransforms) {
|
||||||
buf[pos * 7 + 0] = Float.floatToRawIntBits(vpos.x);
|
this.modelState = modelState;
|
||||||
buf[pos * 7 + 1] = Float.floatToRawIntBits(vpos.y);
|
this.spriteGetter = spriteGetter;
|
||||||
buf[pos * 7 + 2] = Float.floatToRawIntBits(vpos.z);
|
this.overrides = overrides;
|
||||||
buf[pos * 7 + 3] = 0xFFFFFFFF; //Color, let this white...
|
this.itemTransforms = itemTransforms;
|
||||||
buf[pos * 7 + 4] = Float.floatToRawIntBits(tex.getU(uv.x));
|
|
||||||
buf[pos * 7 + 5] = Float.floatToRawIntBits(tex.getV(uv.y));
|
|
||||||
|
|
||||||
int nx = (normal.x * 127) & 0xFF;
|
for (int i = 0; i < texs.length; i++) {
|
||||||
int ny = (normal.y * 127) & 0xFF;
|
texs[i] = spriteGetter.apply(ScreenModelLoader.MATERIALS_SIDES[i]);
|
||||||
int nz = (normal.z * 127) & 0xFF;
|
}
|
||||||
buf[pos * 7 + 6] = nx | (ny << 8) | (nz << 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Vector3f rotateVec(Vector3f vec, BlockSide side) {
|
for (int i = 0; i < TEXTURES.length; i++) {
|
||||||
switch(side) {
|
TEXTURES[i] = new IntegerModelProperty();
|
||||||
case BOTTOM: return new Vector3f(vec.x, 1.0f, 1.0f - vec.z);
|
}
|
||||||
case TOP: return new Vector3f(vec.x, 0.0f, vec.z);
|
}
|
||||||
case NORTH: return new Vector3f(vec.x, vec.z, 1.0f);
|
|
||||||
case SOUTH: return new Vector3f(vec.x, 1.0f - vec.z, 0.0f);
|
|
||||||
case WEST: return new Vector3f(1.f , vec.x, vec.z);
|
|
||||||
case EAST: return new Vector3f(0.0f, 1.0f - vec.x, vec.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new RuntimeException("Unknown block side " + side);
|
private void putVertex(int[] buf, int pos, Vector3f vpos, TextureAtlasSprite tex, Vector3f uv, Vector3i normal) {
|
||||||
}
|
buf[pos * 8 + 0] = Float.floatToRawIntBits(vpos.x);
|
||||||
|
buf[pos * 8 + 1] = Float.floatToRawIntBits(vpos.y);
|
||||||
|
buf[pos * 8 + 2] = Float.floatToRawIntBits(vpos.z);
|
||||||
|
buf[pos * 8 + 3] = 0xFFFFFFFF; //Color, let this white...
|
||||||
|
buf[pos * 8 + 4] = Float.floatToRawIntBits(tex.getU(uv.x));
|
||||||
|
buf[pos * 8 + 5] = Float.floatToRawIntBits(tex.getV(uv.y));
|
||||||
|
|
||||||
private Vector3f rotateTex(BlockSide side, float u, float v) {
|
int nx = (normal.x * 127) & 0xFF;
|
||||||
switch(side) {
|
int ny = (normal.y * 127) & 0xFF;
|
||||||
case BOTTOM: return new Vector3f(u, 16.f - v, 0.0f);
|
int nz = (normal.z * 127) & 0xFF;
|
||||||
case TOP: return new Vector3f(u, v, 0.0f);
|
buf[pos * 8 + 7] = nx | (ny << 8) | (nz << 16);
|
||||||
case NORTH: return new Vector3f(16.f - u, 16.f - v, 0.0f);
|
}
|
||||||
case SOUTH: return new Vector3f(u, v, 0.0f);
|
|
||||||
case WEST: return new Vector3f(v, 16.f - u, 0.0f);
|
|
||||||
case EAST: return new Vector3f(16.f - v, u, 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new RuntimeException("Unknown block side " + side);
|
private Vector3f rotateVec(Vector3f vec, BlockSide side) {
|
||||||
}
|
return switch (side) {
|
||||||
|
case BOTTOM -> new Vector3f(vec.x, 1.0f, 1.0f - vec.z);
|
||||||
|
case TOP -> new Vector3f(vec.x, 0.0f, vec.z);
|
||||||
|
case NORTH -> new Vector3f(vec.x, vec.z, 1.0f);
|
||||||
|
case SOUTH -> new Vector3f(vec.x, 1.0f - vec.z, 0.0f);
|
||||||
|
case WEST -> new Vector3f(1.f, vec.x, vec.z);
|
||||||
|
case EAST -> new Vector3f(0.0f, 1.0f - vec.x, vec.z);
|
||||||
|
//noinspection UnnecessaryDefault
|
||||||
|
default -> throw new RuntimeException("Unknown block side " + side);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private BakedQuad bakeSide(BlockSide side, TextureAtlasSprite tex) {
|
private Vector3f rotateTex(BlockSide side, float u, float v) {
|
||||||
int[] data = new int[7 * 4];
|
return switch (side) {
|
||||||
|
case BOTTOM -> new Vector3f(16.f - u, 16.f - v, 0.0f);
|
||||||
|
case TOP -> new Vector3f(16.f - u, v, 0.0f);
|
||||||
|
case NORTH -> new Vector3f(16.f - u, 16.f - v, 0.0f);
|
||||||
|
case SOUTH -> new Vector3f(u, v, 0.0f);
|
||||||
|
case WEST -> new Vector3f(16.f - v, u, 0.0f);
|
||||||
|
case EAST -> new Vector3f(v, 16.f - u, 0.0f);
|
||||||
|
//noinspection UnnecessaryDefault
|
||||||
|
default -> throw new RuntimeException("Unknown block side " + side);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
putVertex(data, 3, rotateVec(new Vector3f(0.0f, 0.0f, 0.0f), side), tex, rotateTex(side, 0.0f, 0.0f ), side.backward);
|
private BakedQuad bakeSide(BlockSide side, TextureAtlasSprite tex) {
|
||||||
putVertex(data, 2, rotateVec(new Vector3f(0.0f, 0.0f, 1.0f), side), tex, rotateTex(side, 0.0f, 16.0f ), side.backward);
|
int[] data = new int[8 * 4];
|
||||||
putVertex(data, 1, rotateVec(new Vector3f(1.0f, 0.0f, 1.0f), side), tex, rotateTex(side, 16.0f, 16.0f), side.backward);
|
|
||||||
putVertex(data, 0, rotateVec(new Vector3f(1.0f, 0.0f, 0.0f), side), tex, rotateTex(side, 16.0f, 0.0f ), side.backward);
|
|
||||||
|
|
||||||
return new BakedQuad(data, 0xFFFFFFFF, blockFacings[side.ordinal()], tex, true);
|
int rotation = switch (side) {
|
||||||
}
|
case NORTH -> 0;
|
||||||
|
case SOUTH -> 0;
|
||||||
|
case EAST -> 0;
|
||||||
|
case WEST -> 0;
|
||||||
|
case TOP -> 0;
|
||||||
|
case BOTTOM -> 0;
|
||||||
|
//noinspection UnnecessaryDefault
|
||||||
|
default -> throw new RuntimeException("Unknown block side " + side);
|
||||||
|
};
|
||||||
|
|
||||||
@Override
|
putVertex(data, (rotation + 3) % 4, rotateVec(new Vector3f(0.0f, 0.0f, 0.0f), side), tex, rotateTex(side, 16.0f, 0.0f), side.backward);
|
||||||
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource random) {
|
putVertex(data, (rotation + 2) % 4, rotateVec(new Vector3f(0.0f, 0.0f, 1.0f), side), tex, rotateTex(side, 16.0f, 16.0f), side.backward);
|
||||||
if(side == null)
|
putVertex(data, (rotation + 1) % 4, rotateVec(new Vector3f(1.0f, 0.0f, 1.0f), side), tex, rotateTex(side, 0.0f, 16.0f), side.backward);
|
||||||
return noQuads;
|
putVertex(data, (rotation + 0) % 4, rotateVec(new Vector3f(1.0f, 0.0f, 0.0f), side), tex, rotateTex(side, 0.0f, 0.0f), side.backward);
|
||||||
BlockState bs = state;
|
|
||||||
List<BakedQuad> ret = new ArrayList<>();
|
|
||||||
|
|
||||||
int sid = BlockSide.reverse(side.ordinal());
|
return new BakedQuad(data, 0xFFFFFFFF, blockFacings[side.ordinal()].getOpposite(), tex, true);
|
||||||
BlockSide s = blockSides[sid];
|
}
|
||||||
TextureAtlasSprite tex = texs[15];
|
|
||||||
if(bs != null) {
|
|
||||||
IntegerProperty[] sideFlags = new IntegerProperty[6];
|
|
||||||
for(int i = 0; i < sideFlags.length; i++)
|
|
||||||
sideFlags[i] = IntegerProperty.create("neighbor" + i, 0, 15);
|
|
||||||
tex = texs[bs.getValue(sideFlags[sid])];
|
|
||||||
}
|
|
||||||
ret.add(bakeSide(s, tex));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean useAmbientOcclusion() {
|
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource random) {
|
||||||
return true;
|
return getQuads(state, side, random, ModelData.EMPTY, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isGui3d() {
|
public @NotNull List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, @NotNull RandomSource rand, @NotNull ModelData data, @Nullable RenderType renderType) {
|
||||||
return true;
|
if (side == null)
|
||||||
}
|
return noQuads;
|
||||||
|
|
||||||
@Override
|
List<BakedQuad> ret = new ArrayList<>();
|
||||||
public boolean usesBlockLight() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
int sid = BlockSide.reverse(side.ordinal());
|
||||||
public boolean isCustomRenderer() {
|
BlockSide s = blockSides[sid];
|
||||||
return false;
|
TextureAtlasSprite tex = texs[15];
|
||||||
}
|
if (data.has(TEXTURES[side.ordinal()]))
|
||||||
|
tex = texs[data.get(TEXTURES[side.ordinal()])];
|
||||||
|
ret.add(bakeSide(s, tex));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nonnull
|
public @NotNull ModelData getModelData(@NotNull BlockAndTintGetter level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ModelData modelData) {
|
||||||
public TextureAtlasSprite getParticleIcon() {
|
ModelData.Builder builder = ModelData.builder();
|
||||||
return texs[15];
|
for (int i = 0; i < TEXTURES.length; i++) {
|
||||||
}
|
int res = 0;
|
||||||
|
BlockSide side = blockSides[i];
|
||||||
|
BlockState u = level.getBlockState(pos.offset(side.up.x, side.up.y, side.up.z));
|
||||||
|
BlockState d = level.getBlockState(pos.offset(-side.up.x, -side.up.y, -side.up.z));
|
||||||
|
if (
|
||||||
|
u.getBlock() == state.getBlock() &&
|
||||||
|
d.getBlock() != state.getBlock()
|
||||||
|
) res = 1;
|
||||||
|
else res = 4;
|
||||||
|
|
||||||
@Override
|
BlockState r = level.getBlockState(pos.offset(side.right.x, side.right.y, side.right.z));
|
||||||
@Nonnull
|
BlockState l = level.getBlockState(pos.offset(-side.right.x, -side.right.y, -side.right.z));
|
||||||
public ItemTransforms getTransforms() {
|
if (
|
||||||
return ItemTransforms.NO_TRANSFORMS;
|
r.getBlock() == state.getBlock() &&
|
||||||
}
|
l.getBlock() != state.getBlock()
|
||||||
|
) {
|
||||||
|
if (res == 1) res = 9;
|
||||||
|
else if (res == 4) res = 12;
|
||||||
|
else res = 8;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
builder.with(TEXTURES[i], res);
|
||||||
@Nonnull
|
}
|
||||||
public ItemOverrides getOverrides() {
|
return builder.build();
|
||||||
return ItemOverrides.EMPTY;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean useAmbientOcclusion() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isGui3d() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean usesBlockLight() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCustomRenderer() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nonnull
|
||||||
|
public TextureAtlasSprite getParticleIcon() {
|
||||||
|
return texs[15];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nonnull
|
||||||
|
public ItemTransforms getTransforms() {
|
||||||
|
return ItemTransforms.NO_TRANSFORMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nonnull
|
||||||
|
public ItemOverrides getOverrides() {
|
||||||
|
return ItemOverrides.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
//@formatter:off
|
||||||
|
public final class IntegerModelProperty extends ModelProperty<Integer> {}
|
||||||
|
//@formatter:on
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,25 +13,31 @@ import net.minecraftforge.client.model.geometry.IGeometryBakingContext;
|
||||||
import net.minecraftforge.client.model.geometry.IGeometryLoader;
|
import net.minecraftforge.client.model.geometry.IGeometryLoader;
|
||||||
import net.minecraftforge.client.model.geometry.IUnbakedGeometry;
|
import net.minecraftforge.client.model.geometry.IUnbakedGeometry;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public class ScreenModelLoader implements IGeometryLoader<ScreenModelLoader.ScreenModelGeometry> {
|
public class ScreenModelLoader implements IGeometryLoader<ScreenModelLoader.ScreenModelGeometry> {
|
||||||
|
|
||||||
public static final ResourceLocation SCREEN_LOADER = new ResourceLocation("webdisplays", "screen_loader");
|
public static final ResourceLocation SCREEN_LOADER = new ResourceLocation("webdisplays", "screen_loader");
|
||||||
|
|
||||||
public static final ResourceLocation SCREEN_SIDE = new ResourceLocation("webdisplays", "block/screen");
|
public static final ResourceLocation SCREEN_SIDE = new ResourceLocation("webdisplays", "blocks/screen");
|
||||||
|
|
||||||
public static final Material MATERIAL_SIDE = ForgeHooksClient.getBlockMaterial(SCREEN_SIDE);
|
private static final ResourceLocation[] SIDES = new ResourceLocation[16];
|
||||||
|
public static final Material[] MATERIALS_SIDES = new Material[16];
|
||||||
|
|
||||||
|
static {
|
||||||
|
for (int i = 0; i < SIDES.length; i++) {
|
||||||
|
SIDES[i] = new ResourceLocation(SCREEN_SIDE.getNamespace(), SCREEN_SIDE.getPath() + i);
|
||||||
|
MATERIALS_SIDES[i] = ForgeHooksClient.getBlockMaterial(SIDES[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ScreenModelGeometry read(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
|
public ScreenModelGeometry read(JsonObject jsonObject, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
|
||||||
return new ScreenModelGeometry();
|
return new ScreenModelGeometry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class ScreenModelGeometry implements IUnbakedGeometry<ScreenModelGeometry> {
|
public static class ScreenModelGeometry implements IUnbakedGeometry<ScreenModelGeometry> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -41,12 +47,9 @@ public class ScreenModelLoader implements IGeometryLoader<ScreenModelLoader.Scre
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<Material> getMaterials(IGeometryBakingContext iGeometryBakingContext, Function<ResourceLocation, UnbakedModel> function, Set<Pair<String, String>> set) {
|
public Collection<Material> getMaterials(IGeometryBakingContext iGeometryBakingContext, Function<ResourceLocation, UnbakedModel> function, Set<Pair<String, String>> set) {
|
||||||
return List.of(MATERIAL_SIDE);
|
return Arrays.asList(MATERIALS_SIDES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,3 @@
|
||||||
{
|
{
|
||||||
"parent": "block/cube_all",
|
"loader": "webdisplays:screen_loader"
|
||||||
"textures": {
|
|
||||||
"all": "webdisplays:blocks/screen15"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 258 B |
Loading…
Reference in New Issue
Block a user