Skip to content

Commit 7d0e48c

Browse files
committed
Separate render rewrite
1 parent c214f00 commit 7d0e48c

File tree

121 files changed

+3857
-1344
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

121 files changed

+3857
-1344
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package gregtech.api.block;
2+
3+
import net.minecraftforge.common.property.IUnlistedProperty;
4+
5+
import org.jetbrains.annotations.NotNull;
6+
7+
public class UnlistedByteProperty implements IUnlistedProperty<Byte> {
8+
9+
private final String name;
10+
11+
public UnlistedByteProperty(@NotNull String name) {
12+
this.name = name;
13+
}
14+
15+
@NotNull
16+
@Override
17+
public String getName() {
18+
return this.name;
19+
}
20+
21+
@Override
22+
public boolean isValid(Byte value) {
23+
return true;
24+
}
25+
26+
@NotNull
27+
@Override
28+
public Class<Byte> getType() {
29+
return Byte.class;
30+
}
31+
32+
@Override
33+
public String valueToString(@NotNull Byte value) {
34+
return value.toString();
35+
}
36+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package gregtech.api.block;
2+
3+
import net.minecraftforge.common.property.IUnlistedProperty;
4+
5+
import org.jetbrains.annotations.NotNull;
6+
7+
public class UnlistedFloatProperty implements IUnlistedProperty<Float> {
8+
9+
private final String name;
10+
11+
public UnlistedFloatProperty(@NotNull String name) {
12+
this.name = name;
13+
}
14+
15+
@NotNull
16+
@Override
17+
public String getName() {
18+
return this.name;
19+
}
20+
21+
@Override
22+
public boolean isValid(Float value) {
23+
return true;
24+
}
25+
26+
@NotNull
27+
@Override
28+
public Class<Float> getType() {
29+
return Float.class;
30+
}
31+
32+
@Override
33+
public String valueToString(@NotNull Float value) {
34+
return value.toString();
35+
}
36+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package gregtech.api.block;
2+
3+
import gregtech.api.unification.material.Material;
4+
5+
import net.minecraftforge.common.property.IUnlistedProperty;
6+
7+
import org.jetbrains.annotations.NotNull;
8+
9+
public class UnlistedPropertyMaterial implements IUnlistedProperty<Material> {
10+
11+
private final String name;
12+
13+
public UnlistedPropertyMaterial(@NotNull String name) {
14+
this.name = name;
15+
}
16+
17+
@NotNull
18+
@Override
19+
public String getName() {
20+
return name;
21+
}
22+
23+
@Override
24+
public boolean isValid(Material value) {
25+
return true;
26+
}
27+
28+
@Override
29+
public Class<Material> getType() {
30+
return Material.class;
31+
}
32+
33+
@Override
34+
public String valueToString(Material value) {
35+
return value.toString();
36+
}
37+
}

src/main/java/gregtech/api/cover/Cover.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package gregtech.api.cover;
22

3+
import gregtech.client.renderer.pipe.cover.CoverRenderer;
34
import gregtech.client.utils.BloomEffectUtil;
45

56
import net.minecraft.entity.player.EntityPlayer;
@@ -248,6 +249,10 @@ void renderCoverPlate(@NotNull CCRenderState renderState, @NotNull Matrix4 trans
248249
@NotNull IVertexOperation[] pipeline,
249250
@NotNull Cuboid6 plateBox, @NotNull BlockRenderLayer layer);
250251

252+
@SideOnly(Side.CLIENT)
253+
@NotNull
254+
CoverRenderer getRenderer();
255+
251256
default boolean canRenderBackside() {
252257
return true;
253258
}

src/main/java/gregtech/api/cover/CoverBase.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import gregtech.api.GTValues;
44
import gregtech.api.metatileentity.MetaTileEntity;
5+
import gregtech.client.renderer.pipe.cover.CoverRenderer;
56
import gregtech.client.renderer.texture.Textures;
67
import gregtech.client.renderer.texture.cube.SimpleSidedCubeRenderer;
78

@@ -19,6 +20,7 @@
1920
import codechicken.lib.vec.Cuboid6;
2021
import codechicken.lib.vec.Matrix4;
2122
import org.jetbrains.annotations.NotNull;
23+
import org.jetbrains.annotations.Nullable;
2224

2325
import java.util.ArrayList;
2426
import java.util.List;
@@ -29,6 +31,9 @@ public abstract class CoverBase implements Cover {
2931
private final CoverableView coverableView;
3032
private final EnumFacing attachedSide;
3133

34+
@SideOnly(Side.CLIENT)
35+
protected @Nullable CoverRenderer renderer;
36+
3237
public CoverBase(@NotNull CoverDefinition definition, @NotNull CoverableView coverableView,
3338
@NotNull EnumFacing attachedSide) {
3439
this.definition = definition;
@@ -79,6 +84,15 @@ public void renderCoverPlate(@NotNull CCRenderState renderState, @NotNull Matrix
7984
}
8085
}
8186

87+
@Override
88+
@SideOnly(Side.CLIENT)
89+
public @NotNull CoverRenderer getRenderer() {
90+
if (renderer == null) renderer = buildRenderer();
91+
return renderer;
92+
}
93+
94+
protected abstract CoverRenderer buildRenderer();
95+
8296
@SideOnly(Side.CLIENT)
8397
protected @NotNull TextureAtlasSprite getPlateSprite() {
8498
return Textures.VOLTAGE_CASINGS[GTValues.LV].getSpriteOnSide(SimpleSidedCubeRenderer.RenderSide.SIDE);

src/main/java/gregtech/api/pipenet/block/BlockPipe.java

Lines changed: 96 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import gregtech.api.pipenet.tile.PipeCoverableImplementation;
1515
import gregtech.api.pipenet.tile.TileEntityPipeBase;
1616
import gregtech.api.util.GTUtility;
17+
import gregtech.client.renderer.pipe.PipeRenderProperties;
18+
import gregtech.client.renderer.pipe.cover.CoverRendererPackage;
1719
import gregtech.common.ConfigHolder;
1820
import gregtech.common.blocks.BlockFrame;
1921
import gregtech.common.blocks.MetaBlocks;
@@ -23,9 +25,12 @@
2325
import net.minecraft.block.Block;
2426
import net.minecraft.block.ITileEntityProvider;
2527
import net.minecraft.block.SoundType;
28+
import net.minecraft.block.properties.PropertyBool;
2629
import net.minecraft.block.state.BlockFaceShape;
30+
import net.minecraft.block.state.BlockStateContainer;
2731
import net.minecraft.block.state.IBlockState;
2832
import net.minecraft.client.Minecraft;
33+
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
2934
import net.minecraft.creativetab.CreativeTabs;
3035
import net.minecraft.entity.Entity;
3136
import net.minecraft.entity.EntityLivingBase;
@@ -46,18 +51,21 @@
4651
import net.minecraft.util.math.Vec3d;
4752
import net.minecraft.world.IBlockAccess;
4853
import net.minecraft.world.World;
54+
import net.minecraftforge.common.property.IExtendedBlockState;
4955
import net.minecraftforge.fml.relauncher.Side;
5056
import net.minecraftforge.fml.relauncher.SideOnly;
5157

5258
import codechicken.lib.raytracer.CuboidRayTraceResult;
5359
import codechicken.lib.raytracer.IndexedCuboid6;
5460
import codechicken.lib.raytracer.RayTracer;
5561
import codechicken.lib.vec.Cuboid6;
62+
import org.apache.commons.lang3.tuple.Pair;
5663
import org.jetbrains.annotations.NotNull;
5764
import org.jetbrains.annotations.Nullable;
5865

5966
import java.util.ArrayList;
6067
import java.util.Collections;
68+
import java.util.EnumMap;
6169
import java.util.List;
6270
import java.util.Random;
6371

@@ -68,6 +76,28 @@ public abstract class BlockPipe<PipeType extends Enum<PipeType> & IPipeType<Node
6876
WorldPipeNetType extends WorldPipeNet<NodeDataType, ? extends PipeNet<NodeDataType>>> extends BuiltInRenderBlock
6977
implements ITileEntityProvider, IFacadeWrapper, IBlockAppearance {
7078

79+
public static final PropertyBool NORTH = PropertyBool.create("north");
80+
public static final PropertyBool EAST = PropertyBool.create("east");
81+
public static final PropertyBool SOUTH = PropertyBool.create("south");
82+
public static final PropertyBool WEST = PropertyBool.create("west");
83+
public static final PropertyBool UP = PropertyBool.create("up");
84+
public static final PropertyBool DOWN = PropertyBool.create("down");
85+
86+
public static final EnumMap<EnumFacing, PropertyBool> FACINGS = buildFacings();
87+
88+
private static @NotNull EnumMap<EnumFacing, PropertyBool> buildFacings() {
89+
EnumMap<EnumFacing, PropertyBool> map = new EnumMap<>(EnumFacing.class);
90+
map.put(EnumFacing.NORTH, NORTH);
91+
map.put(EnumFacing.EAST, EAST);
92+
map.put(EnumFacing.SOUTH, SOUTH);
93+
map.put(EnumFacing.WEST, WEST);
94+
map.put(EnumFacing.UP, UP);
95+
map.put(EnumFacing.DOWN, DOWN);
96+
return map;
97+
}
98+
99+
public static final PropertyBool FRAMED = PropertyBool.create("framed");
100+
71101
protected final ThreadLocal<IPipeTile<PipeType, NodeDataType>> tileEntities = new ThreadLocal<>();
72102

73103
public BlockPipe() {
@@ -146,7 +176,7 @@ public ItemStack getItem(@NotNull World world, @NotNull BlockPos pos, @NotNull I
146176
protected abstract NodeDataType getFallbackType();
147177

148178
// TODO this has no reason to need an ItemStack parameter
149-
public abstract PipeType getItemPipeType(ItemStack itemStack);
179+
public abstract PipeType getPipeType();
150180

151181
public abstract void setTileEntityData(TileEntityPipeBase<PipeType, NodeDataType> pipeTile, ItemStack itemStack);
152182

@@ -352,7 +382,7 @@ public boolean onPipeActivated(World world, IBlockState state, BlockPos pos, Ent
352382
IBlockState blockStateAtSide = world.getBlockState(pos.offset(side));
353383
if (blockStateAtSide.getBlock() instanceof BlockFrame) {
354384
ItemBlockPipe<?, ?> itemBlockPipe = (ItemBlockPipe<?, ?>) itemStack.getItem();
355-
if (itemBlockPipe.blockPipe.getItemPipeType(itemStack) == getItemPipeType(itemStack)) {
385+
if (itemBlockPipe.blockPipe.getPipeType() == getPipeType()) {
356386
BlockFrame frameBlock = (BlockFrame) blockStateAtSide.getBlock();
357387
boolean wasPlaced = frameBlock.replaceWithFramedPipe(world, pos.offset(side), blockStateAtSide,
358388
entityPlayer, itemStack, side);
@@ -734,4 +764,68 @@ public PipeConnectionData(EnumFacing side) {
734764
this.side = side;
735765
}
736766
}
767+
768+
@Override
769+
public int getMetaFromState(@NotNull IBlockState state) {
770+
return 0;
771+
}
772+
773+
@Override
774+
protected @NotNull BlockStateContainer createBlockState() {
775+
return constructState(new BlockStateContainer.Builder(this))
776+
.add(NORTH, SOUTH, EAST, WEST, UP, DOWN, FRAMED)
777+
.build();
778+
}
779+
780+
protected @NotNull BlockStateContainer.Builder constructState(BlockStateContainer.@NotNull Builder builder) {
781+
return builder.add(PipeRenderProperties.THICKNESS_PROPERTY).add(PipeRenderProperties.CLOSED_MASK_PROPERTY)
782+
.add(PipeRenderProperties.BLOCKED_MASK_PROPERTY).add(PipeRenderProperties.COLOR_PROPERTY)
783+
.add(PipeRenderProperties.FRAME_MATERIAL_PROPERTY).add(PipeRenderProperties.FRAME_MASK_PROPERTY)
784+
.add(CoverRendererPackage.CRP_PROPERTY);
785+
}
786+
787+
@SuppressWarnings("deprecation")
788+
@Override
789+
public @NotNull IBlockState getActualState(@NotNull IBlockState state, @NotNull IBlockAccess worldIn,
790+
@NotNull BlockPos pos) {
791+
var tile = getPipeTileEntity(worldIn, pos);
792+
if (tile == null) return state;
793+
state = writeConnectionMask(state, tile.getCoverAdjustedConnectionMask());
794+
return state.withProperty(FRAMED, tile.getFrameMaterial() != null);
795+
}
796+
797+
public static IBlockState writeConnectionMask(@NotNull IBlockState state, byte connectionMask) {
798+
for (EnumFacing facing : EnumFacing.VALUES) {
799+
state = state.withProperty(FACINGS.get(facing), GTUtility.evalMask(facing, connectionMask));
800+
}
801+
return state;
802+
}
803+
804+
public static byte readConnectionMask(@NotNull IBlockState state) {
805+
byte mask = 0;
806+
for (EnumFacing facing : EnumFacing.VALUES) {
807+
if (state.getValue(FACINGS.get(facing))) {
808+
mask |= (byte) (1 << facing.ordinal());
809+
}
810+
}
811+
return mask;
812+
}
813+
814+
@Override
815+
public @NotNull IBlockState getExtendedState(@NotNull IBlockState state, @NotNull IBlockAccess world,
816+
@NotNull BlockPos pos) {
817+
var tile = getPipeTileEntity(world, pos);
818+
if (tile == null) return state;
819+
else return tile.getRenderInformation((IExtendedBlockState) state.getActualState(world, pos));
820+
}
821+
822+
@SideOnly(Side.CLIENT)
823+
@Override
824+
protected Pair<TextureAtlasSprite, Integer> getParticleTexture(World world, BlockPos blockPos) {
825+
var tile = getPipeTileEntity(world, blockPos);
826+
if (tile != null) {
827+
return getPipeType().getModel().getParticleTexture(tile.getPaintingColor(), null);
828+
}
829+
return null;
830+
}
737831
}

src/main/java/gregtech/api/pipenet/block/IPipeType.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package gregtech.api.pipenet.block;
22

3+
import gregtech.client.renderer.pipe.PipeModelRedirector;
4+
35
import net.minecraft.util.IStringSerializable;
6+
import net.minecraftforge.fml.relauncher.Side;
7+
import net.minecraftforge.fml.relauncher.SideOnly;
48

59
public interface IPipeType<NodeDataType> extends IStringSerializable {
610

@@ -9,4 +13,7 @@ public interface IPipeType<NodeDataType> extends IStringSerializable {
913
NodeDataType modifyProperties(NodeDataType baseProperties);
1014

1115
boolean isPaintable();
16+
17+
@SideOnly(Side.CLIENT)
18+
PipeModelRedirector getModel();
1219
}

src/main/java/gregtech/api/pipenet/block/ItemBlockPipe.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public ItemBlockPipe(BlockPipe<PipeType, NodeDataType, ?> block) {
2424
setHasSubtypes(true);
2525
}
2626

27+
@Override
28+
public @NotNull BlockPipe<PipeType, NodeDataType, ?> getBlock() {
29+
return (BlockPipe<PipeType, NodeDataType, ?>) super.getBlock();
30+
}
31+
2732
@Override
2833
public int getMetadata(int damage) {
2934
return damage;

0 commit comments

Comments
 (0)