Render package ported

This commit is contained in:
Michael 2020-09-07 19:33:27 +01:00
parent aa015521bc
commit 99b7e0bf43
No known key found for this signature in database
GPG key ID: 971C5B254742488F
14 changed files with 370 additions and 337 deletions

View file

@ -2,6 +2,7 @@ package de.ellpeck.actuallyadditions.mod.blocks;
import java.util.List; import java.util.List;
import net.minecraft.state.IProperty;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe; import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe;
@ -187,7 +188,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay {
public static CompostProperty COMPOST_PROP = new CompostProperty(); public static CompostProperty COMPOST_PROP = new CompostProperty();
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
private static class CompostProperty implements IUnlistedProperty<Pair> { private static class CompostProperty implements IProperty<Pair> {
@Override @Override
public String getName() { public String getName() {

View file

@ -30,7 +30,7 @@ public enum TheColoredLampColors implements IStringSerializable {
} }
public static TheColoredLampColors getColorFromDyeName(String color) { public static TheColoredLampColors getColorFromDyeName(String color) {
if (color.substring(0, 3).equals("dye")) { if (color.startsWith("dye")) {
String actualName = color.substring(3); String actualName = color.substring(3);
for (int i = 0; i < values().length; i++) { for (int i = 0; i < values().length; i++) {
String aName = values()[i].oreName; String aName = values()[i].oreName;

View file

@ -1,25 +1,25 @@
package de.ellpeck.actuallyadditions.mod.blocks.metalists; package de.ellpeck.actuallyadditions.mod.blocks.metalists;
import net.minecraft.item.EnumRarity; import net.minecraft.item.Rarity;
import net.minecraft.util.IStringSerializable; import net.minecraft.util.IStringSerializable;
public enum TheMiscBlocks implements IStringSerializable { public enum TheMiscBlocks implements IStringSerializable {
QUARTZ_PILLAR("black_quartz_pillar", EnumRarity.RARE), QUARTZ_PILLAR("black_quartz_pillar", Rarity.RARE),
QUARTZ_CHISELED("black_quartz_chiseled", EnumRarity.RARE), QUARTZ_CHISELED("black_quartz_chiseled", Rarity.RARE),
QUARTZ("black_quartz", EnumRarity.RARE), QUARTZ("black_quartz", Rarity.RARE),
ORE_QUARTZ("ore_black_quartz", EnumRarity.EPIC), ORE_QUARTZ("ore_black_quartz", Rarity.EPIC),
WOOD_CASING("wood_casing", EnumRarity.COMMON), WOOD_CASING("wood_casing", Rarity.COMMON),
CHARCOAL_BLOCK("charcoal", EnumRarity.COMMON), CHARCOAL_BLOCK("charcoal", Rarity.COMMON),
ENDERPEARL_BLOCK("enderpearl", EnumRarity.RARE), ENDERPEARL_BLOCK("enderpearl", Rarity.RARE),
LAVA_FACTORY_CASE("lava_factory_case", EnumRarity.UNCOMMON), LAVA_FACTORY_CASE("lava_factory_case", Rarity.UNCOMMON),
ENDER_CASING("ender_casing", EnumRarity.EPIC), ENDER_CASING("ender_casing", Rarity.EPIC),
IRON_CASING("iron_casing", EnumRarity.RARE); IRON_CASING("iron_casing", Rarity.RARE);
public final String name; public final String name;
public final EnumRarity rarity; public final Rarity rarity;
TheMiscBlocks(String name, EnumRarity rarity) { TheMiscBlocks(String name, Rarity rarity) {
this.name = name; this.name = name;
this.rarity = rarity; this.rarity = rarity;
} }

View file

@ -1,24 +1,23 @@
package de.ellpeck.actuallyadditions.mod.blocks.metalists; package de.ellpeck.actuallyadditions.mod.blocks.metalists;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.EnumRarity; import net.minecraft.item.Rarity;
import net.minecraft.util.IStringSerializable; import net.minecraft.util.IStringSerializable;
public enum TheWildPlants implements IStringSerializable { public enum TheWildPlants implements IStringSerializable {
CANOLA("canola", EnumRarity.RARE, InitBlocks.blockCanola), CANOLA("canola", Rarity.RARE, InitBlocks.blockCanola),
FLAX("flax", EnumRarity.RARE, InitBlocks.blockFlax), FLAX("flax", Rarity.RARE, InitBlocks.blockFlax),
RICE("rice", EnumRarity.RARE, InitBlocks.blockRice), RICE("rice", Rarity.RARE, InitBlocks.blockRice),
COFFEE("coffee", EnumRarity.RARE, InitBlocks.blockCoffee); COFFEE("coffee", Rarity.RARE, InitBlocks.blockCoffee);
final String name; final String name;
final EnumRarity rarity; final Rarity rarity;
final Block normal; final Block normal;
TheWildPlants(String name, EnumRarity rarity, Block normal) { TheWildPlants(String name, Rarity rarity, Block normal) {
this.name = name; this.name = name;
this.rarity = rarity; this.rarity = rarity;
this.normal = Preconditions.checkNotNull(normal, "TheWildPlants was loaded before block init!"); this.normal = Preconditions.checkNotNull(normal, "TheWildPlants was loaded before block init!");
@ -29,7 +28,7 @@ public enum TheWildPlants implements IStringSerializable {
return this.name; return this.name;
} }
public EnumRarity getRarity() { public Rarity getRarity() {
return this.rarity; return this.rarity;
} }

View file

@ -1,29 +1,29 @@
package de.ellpeck.actuallyadditions.mod.blocks.render; package de.ellpeck.actuallyadditions.mod.blocks.render;
import de.ellpeck.actuallyadditions.mod.blocks.BlockCompost;
import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.Direction;
import org.apache.commons.lang3.tuple.Pair;
import javax.annotation.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random;
import org.apache.commons.lang3.tuple.Pair;
import de.ellpeck.actuallyadditions.mod.blocks.BlockCompost;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.property.IExtendedBlockState;
public class ActualCompostModel implements IBakedModel { public class ActualCompostModel implements IBakedModel {
public static final Map<Pair<IBlockState, Float>, IBakedModel> MODELS = new HashMap<>(); public static final Map<Pair<BlockState, Float>, IBakedModel> MODELS = new HashMap<>();
@SuppressWarnings("unchecked")
@Override @Override
public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) { public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) {
if (state instanceof IExtendedBlockState) { // if (state instanceof BlockState) {
Pair<IBlockState, Float> data = ((IExtendedBlockState) state).getValue(BlockCompost.COMPOST_PROP); if (state != null) {
Pair<BlockState, Float> data = state.get(BlockCompost.COMPOST_PROP);
if (data == null || data.getRight() <= 0) return CompostModel.compostBase.getQuads(state, side, rand); if (data == null || data.getRight() <= 0) return CompostModel.compostBase.getQuads(state, side, rand);
IBakedModel model = MODELS.get(data); IBakedModel model = MODELS.get(data);
if (model == null) { if (model == null) {
@ -32,6 +32,7 @@ public class ActualCompostModel implements IBakedModel {
} }
return model.getQuads(state, side, rand); return model.getQuads(state, side, rand);
} }
return CompostModel.compostBase.getQuads(state, side, rand); return CompostModel.compostBase.getQuads(state, side, rand);
} }
@ -45,6 +46,12 @@ public class ActualCompostModel implements IBakedModel {
return false; return false;
} }
// No clue what this one is.
@Override
public boolean func_230044_c_() {
return false;
}
@Override @Override
public boolean isBuiltInRenderer() { public boolean isBuiltInRenderer() {
return false; return false;
@ -57,7 +64,6 @@ public class ActualCompostModel implements IBakedModel {
@Override @Override
public ItemOverrideList getOverrides() { public ItemOverrideList getOverrides() {
return ItemOverrideList.NONE; return ItemOverrideList.EMPTY;
} }
} }

View file

@ -1,59 +1,57 @@
package de.ellpeck.actuallyadditions.mod.blocks.render; package de.ellpeck.actuallyadditions.mod.blocks.render;
import java.util.EnumMap;
import java.util.List;
import javax.annotation.Nullable;
import javax.vecmath.Vector3f;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import net.minecraft.block.BlockState;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemOverrideList; import net.minecraft.client.renderer.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.EnumFacing; import net.minecraft.util.Direction;
import net.minecraftforge.common.model.TRSRTransformation;
import javax.annotation.Nullable;
import java.util.EnumMap;
import java.util.List;
import java.util.Random;
// todo: come back and fix this render as It's broken atm :cry:
public class CompostModel implements IBakedModel { public class CompostModel implements IBakedModel {
public static IBakedModel compostBase; public static IBakedModel compostBase;
private final IBakedModel display; private final IBakedModel display;
private final ImmutableList<BakedQuad> general; private final ImmutableList<BakedQuad> general;
private final ImmutableMap<EnumFacing, ImmutableList<BakedQuad>> faces; private final ImmutableMap<Direction, ImmutableList<BakedQuad>> faces;
public CompostModel(IBlockState flowerState, float height) { public CompostModel(BlockState flowerState, float height) {
this.display = Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState(flowerState); this.display = Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(flowerState);
TRSRTransformation transform = TRSRTransformation.blockCenterToCorner(new TRSRTransformation(new Vector3f(0, -.218F, 0), null, new Vector3f(0.75F, height / 1.81F, 0.75F), null)); // TRSRTransformation transform = TRSRTransformation.blockCenterToCorner(new TRSRTransformation(new Vector3f(0, -.218F, 0), null, new Vector3f(0.75F, height / 1.81F, 0.75F), null));
ImmutableList.Builder<BakedQuad> builder; ImmutableList.Builder<BakedQuad> builder;
EnumMap<EnumFacing, ImmutableList<BakedQuad>> faces = new EnumMap<>(EnumFacing.class); EnumMap<Direction, ImmutableList<BakedQuad>> faces = new EnumMap<>(Direction.class);
for (EnumFacing face : EnumFacing.values()) { for (Direction face : Direction.values()) {
builder = ImmutableList.builder(); builder = ImmutableList.builder();
if (!this.display.isBuiltInRenderer()) { if (!this.display.isBuiltInRenderer()) {
for (BakedQuad quad : this.display.getQuads(flowerState, face, 0)) { // for (BakedQuad quad : this.display.getQuads(flowerState, face, 0)) {
Transformer transformer = new Transformer(transform, quad.getFormat()); // Transformer transformer = new Transformer(transform, quad.getFormat());
quad.pipe(transformer); // quad.pipe(transformer);
builder.add(transformer.build()); // builder.add(transformer.build());
} // }
builder.addAll(compostBase.getQuads(null, face, 0)); builder.addAll(compostBase.getQuads(null, face, new Random()));
} }
faces.put(face, builder.build()); faces.put(face, builder.build());
} }
if (!this.display.isBuiltInRenderer()) { if (!this.display.isBuiltInRenderer()) {
builder = ImmutableList.builder(); builder = ImmutableList.builder();
for (BakedQuad quad : this.display.getQuads(flowerState, null, 0)) { // for (BakedQuad quad : this.display.getQuads(flowerState, null, 0)) {
Transformer transformer = new Transformer(transform, quad.getFormat()); // Transformer transformer = new Matrix4f(transform, quad.getFormat());
quad.pipe(transformer); // quad.pipe(transformer);
builder.add(transformer.build()); // builder.add(transformer.build());
} // }
builder.addAll(compostBase.getQuads(null, null, 0)); builder.addAll(compostBase.getQuads(null, null, new Random()));
this.general = builder.build(); this.general = builder.build();
} else this.general = ImmutableList.of(); } else this.general = ImmutableList.of();
@ -61,7 +59,7 @@ public class CompostModel implements IBakedModel {
} }
@Override @Override
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) {
if (side == null) return this.general; if (side == null) return this.general;
return this.faces.get(side); return this.faces.get(side);
} }
@ -76,6 +74,12 @@ public class CompostModel implements IBakedModel {
return false; return false;
} }
// No idea what this does.. Something? I'm sure
@Override
public boolean func_230044_c_() {
return false;
}
@Override @Override
public boolean isBuiltInRenderer() { public boolean isBuiltInRenderer() {
return false; return false;
@ -88,7 +92,7 @@ public class CompostModel implements IBakedModel {
@Override @Override
public ItemOverrideList getOverrides() { public ItemOverrideList getOverrides() {
return ItemOverrideList.NONE; return ItemOverrideList.EMPTY;
} }
} }

View file

@ -1,7 +1,6 @@
package de.ellpeck.actuallyadditions.mod.blocks.render; package de.ellpeck.actuallyadditions.mod.blocks.render;
import java.text.NumberFormat; import com.mojang.blaze3d.matrix.MatrixStack;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.items.ItemBattery; import de.ellpeck.actuallyadditions.mod.items.ItemBattery;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBatteryBox; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBatteryBox;
@ -9,37 +8,41 @@ import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.Quaternion;
import net.minecraft.item.ItemBlock; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.Util;
import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) import java.text.NumberFormat;
public class RenderBatteryBox extends TileEntitySpecialRenderer<TileEntityBatteryBox> {
// todo: migrate to client package
public class RenderBatteryBox extends TileEntityRenderer<TileEntityBatteryBox> {
public RenderBatteryBox(TileEntityRendererDispatcher rendererDispatcherIn) {
super(rendererDispatcherIn);
}
@Override @Override
public void render(TileEntityBatteryBox tile, double x, double y, double z, float par5, int par6, float f) { public void render(TileEntityBatteryBox tile, float partialTicks, MatrixStack matrices, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
if (!(tile instanceof TileEntityBatteryBox)) { return; } // BlockPos pos = tile.getPos();
ItemStack stack = tile.inv.getStackInSlot(0); ItemStack stack = tile.inv.getStackInSlot(0);
if (StackUtil.isValid(stack) && stack.getItem() instanceof ItemBattery) { if (StackUtil.isValid(stack) && stack.getItem() instanceof ItemBattery) {
GlStateManager.pushMatrix(); matrices.push();
GlStateManager.translate((float) x + 0.5F, (float) y + 1F, (float) z + 0.5F); // matrices.translate((float) pos.getX() + 0.5F, (float) pos.getY() + 1F, (float) pos.getZ() + 0.5F);
GlStateManager.pushMatrix(); matrices.push();
GlStateManager.scale(0.0075F, 0.0075F, 0.0075F); matrices.scale(0.0075F, 0.0075F, 0.0075F);
GlStateManager.rotate(180F, 1F, 0F, 0F); matrices.rotate(new Quaternion(180F, 1F, 0F, 0F));
GlStateManager.translate(0F, 0F, -50F); matrices.translate(0F, 0F, -50F);
if (stack.hasCapability(CapabilityEnergy.ENERGY, null)) { stack.getCapability(CapabilityEnergy.ENERGY).ifPresent(cap -> {
IEnergyStorage cap = stack.getCapability(CapabilityEnergy.ENERGY, null);
NumberFormat format = NumberFormat.getInstance(); NumberFormat format = NumberFormat.getInstance();
FontRenderer font = Minecraft.getMinecraft().fontRenderer; FontRenderer font = Minecraft.getInstance().fontRenderer;
String s = format.format(cap.getEnergyStored()) + "/" + format.format(cap.getMaxEnergyStored()); String s = format.format(cap.getEnergyStored()) + "/" + format.format(cap.getMaxEnergyStored());
float lengthS = -font.getStringWidth(s) / 2F; float lengthS = -font.getStringWidth(s) / 2F;
@ -47,29 +50,29 @@ public class RenderBatteryBox extends TileEntitySpecialRenderer<TileEntityBatter
float lengthS2 = -font.getStringWidth(s2) / 2F; float lengthS2 = -font.getStringWidth(s2) / 2F;
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
font.drawString(s, lengthS, 10F, 0xFFFFFF, false); font.drawString(s, lengthS, 10F, 0xFFFFFF);
font.drawString(s2, lengthS2, 20F, 0xFFFFFF, false); font.drawString(s2, lengthS2, 20F, 0xFFFFFF);
GlStateManager.translate(-50F, 0F, 50F); matrices.translate(-50F, 0F, 50F);
GlStateManager.rotate(90F, 0F, 1F, 0F); matrices.rotate(new Quaternion(90F, 0F, 1F, 0F));
}
} }
});
GlStateManager.popMatrix(); matrices.pop();
double boop = Minecraft.getSystemTime() / 800D; double boop = Util.milliTime() / 800D;
GlStateManager.translate(0D, Math.sin(boop % (2 * Math.PI)) * 0.065, 0D); matrices.translate(0D, Math.sin(boop % (2 * Math.PI)) * 0.065, 0D);
GlStateManager.rotate((float) (boop * 40D % 360), 0, 1, 0); matrices.rotate(new Quaternion((float) (boop * 40D % 360), 0, 1, 0));
float scale = stack.getItem() instanceof ItemBlock ? 0.85F : 0.65F; float scale = stack.getItem() instanceof BlockItem ? 0.85F : 0.65F;
GlStateManager.scale(scale, scale, scale); matrices.scale(scale, scale, scale);
try { try {
AssetUtil.renderItemInWorld(stack); AssetUtil.renderItemInWorld(stack);
} catch (Exception e) { } catch (Exception e) {
ActuallyAdditions.LOGGER.error("Something went wrong trying to render an item in a battery box! The item is " + stack.getItem().getRegistryName() + "!", e); ActuallyAdditions.LOGGER.error("Something went wrong trying to render an item in a battery box! The item is " + stack.getItem().getRegistryName() + "!", e);
} }
GlStateManager.popMatrix(); matrices.pop();
} }
} }
} }

View file

@ -1,42 +1,47 @@
package de.ellpeck.actuallyadditions.mod.blocks.render; package de.ellpeck.actuallyadditions.mod.blocks.render;
import com.mojang.blaze3d.matrix.MatrixStack;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand; import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand;
import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Quaternion;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.item.ItemBlock; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side; import net.minecraft.util.Util;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) // todo: migrate to client package
public class RenderDisplayStand extends TileEntitySpecialRenderer<TileEntityDisplayStand> { public class RenderDisplayStand extends TileEntityRenderer<TileEntityDisplayStand> {
public RenderDisplayStand(TileEntityRendererDispatcher rendererDispatcherIn) {
super(rendererDispatcherIn);
}
@Override @Override
public void render(TileEntityDisplayStand tile, double x, double y, double z, float par5, int par6, float f) { public void render(TileEntityDisplayStand tile, float partialTicks, MatrixStack matrices, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
if (!(tile instanceof TileEntityDisplayStand)) { return; } // BlockPos pos = tile.getPos();
ItemStack stack = tile.inv.getStackInSlot(0); ItemStack stack = tile.inv.getStackInSlot(0);
if (StackUtil.isValid(stack)) { if (StackUtil.isValid(stack)) {
GlStateManager.pushMatrix(); matrices.push();
GlStateManager.translate((float) x + 0.5F, (float) y + 1F, (float) z + 0.5F); // matrices.translate((float) pos.getX() + 0.5F, (float) pos.getY() + 1F, (float) pos.getZ() + 0.5F);
double boop = Minecraft.getSystemTime() / 800D; double boop = Util.nanoTime() / 800D;
GlStateManager.translate(0D, Math.sin(boop % (2 * Math.PI)) * 0.065, 0D); matrices.translate(0D, Math.sin(boop % (2 * Math.PI)) * 0.065, 0D);
GlStateManager.rotate((float) (boop * 40D % 360), 0, 1, 0); matrices.rotate(new Quaternion((float) (boop * 40D % 360), 0, 1, 0));
float scale = stack.getItem() instanceof ItemBlock ? 0.85F : 0.65F; float scale = stack.getItem() instanceof BlockItem ? 0.85F : 0.65F;
GlStateManager.scale(scale, scale, scale); matrices.scale(scale, scale, scale);
try { try {
AssetUtil.renderItemInWorld(stack); AssetUtil.renderItemInWorld(stack);
} catch (Exception e) { } catch (Exception e) {
ActuallyAdditions.LOGGER.error("Something went wrong trying to render an item in a display stand! The item is " + stack.getItem().getRegistryName() + "!", e); ActuallyAdditions.LOGGER.error("Something went wrong trying to render an item in a display stand! The item is " + stack.getItem().getRegistryName() + "!", e);
} }
GlStateManager.popMatrix(); matrices.pop();
} }
} }
} }

View file

@ -1,58 +1,69 @@
package de.ellpeck.actuallyadditions.mod.blocks.render; package de.ellpeck.actuallyadditions.mod.blocks.render;
import com.mojang.blaze3d.matrix.MatrixStack;
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe; import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityEmpowerer; import de.ellpeck.actuallyadditions.mod.tile.TileEntityEmpowerer;
import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Quaternion;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.item.ItemBlock; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing; import net.minecraft.util.Direction;
import net.minecraft.util.Util;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) // todo: migrate to client package
public class RenderEmpowerer extends TileEntitySpecialRenderer<TileEntityEmpowerer> { public class RenderEmpowerer extends TileEntityRenderer<TileEntityEmpowerer> {
public RenderEmpowerer(TileEntityRendererDispatcher rendererDispatcherIn) {
super(rendererDispatcherIn);
}
@Override @Override
public void render(TileEntityEmpowerer tile, double x, double y, double z, float par5, int par6, float f) { public void render(TileEntityEmpowerer tile, float partialTicks, MatrixStack matrices, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
if (!(tile instanceof TileEntityEmpowerer)) { return; } // BlockPos pos = tile.getPos();
ItemStack stack = tile.inv.getStackInSlot(0); ItemStack stack = tile.inv.getStackInSlot(0);
if (StackUtil.isValid(stack)) { if (StackUtil.isValid(stack)) {
GlStateManager.pushMatrix(); matrices.push();
GlStateManager.translate((float) x + 0.5F, (float) y + 1F, (float) z + 0.5F); // matrices.translate((float) pos.getX() + 0.5F, (float) pos.getY() + 1F, (float) pos.getZ() + 0.5F);
double boop = Minecraft.getSystemTime() / 800D; double boop = Util.nanoTime() / 800D;
GlStateManager.translate(0D, Math.sin(boop % (2 * Math.PI)) * 0.065, 0D); matrices.translate(0D, Math.sin(boop % (2 * Math.PI)) * 0.065, 0D);
GlStateManager.rotate((float) (boop * 40D % 360), 0, 1, 0); matrices.rotate(new Quaternion((float) (boop * 40D % 360), 0, 1, 0));
float scale = stack.getItem() instanceof ItemBlock ? 0.85F : 0.65F; float scale = stack.getItem() instanceof BlockItem ? 0.85F : 0.65F;
GlStateManager.scale(scale, scale, scale); matrices.scale(scale, scale, scale);
try { try {
AssetUtil.renderItemInWorld(stack); AssetUtil.renderItemInWorld(stack);
} catch (Exception e) { } catch (Exception e) {
ActuallyAdditions.LOGGER.error("Something went wrong trying to render an item in an empowerer! The item is " + stack.getItem().getRegistryName() + ":" + stack.getMetadata() + "!", e); ActuallyAdditions.LOGGER.error("Something went wrong trying to render an item in an empowerer! The item is {}!", stack.getItem().getRegistryName(), e);
} }
GlStateManager.popMatrix(); matrices.pop();
} }
int index = tile.recipeForRenderIndex; int index = tile.recipeForRenderIndex;
if (index >= 0 && ActuallyAdditionsAPI.EMPOWERER_RECIPES.size() > index) { if (index >= 0 && ActuallyAdditionsAPI.EMPOWERER_RECIPES.size() > index) {
EmpowererRecipe recipe = ActuallyAdditionsAPI.EMPOWERER_RECIPES.get(index); EmpowererRecipe recipe = ActuallyAdditionsAPI.EMPOWERER_RECIPES.get(index);
if (recipe != null) { if (recipe != null) {
for (int i = 0; i < EnumFacing.HORIZONTALS.length; i++) { Direction.Plane.HORIZONTAL.iterator().forEachRemaining(e -> {
EnumFacing facing = EnumFacing.HORIZONTALS[i]; BlockPos offset = tile.getPos().offset(e, 3);
BlockPos offset = tile.getPos().offset(facing, 3);
AssetUtil.renderLaser(tile.getPos().getX() + 0.5, tile.getPos().getY() + 0.5, tile.getPos().getZ() + 0.5, offset.getX() + 0.5, offset.getY() + 0.95, offset.getZ() + 0.5, 80, 1F, 0.1F, recipe.getParticleColors()); AssetUtil.renderLaser(tile.getPos().getX() + 0.5, tile.getPos().getY() + 0.5, tile.getPos().getZ() + 0.5, offset.getX() + 0.5, offset.getY() + 0.95, offset.getZ() + 0.5, 80, 1F, 0.1F, recipe.getParticleColors());
} });
// original code of the above if it doesn't work
// @since 1.15-port
// for (int i = 0; i < Direction.Plane.HORIZONTAL; i++) {
// EnumFacing facing = EnumFacing.HORIZONTALS[i];
// BlockPos offset = tile.getPos().offset(facing, 3);
//
// AssetUtil.renderLaser(tile.getPos().getX() + 0.5, tile.getPos().getY() + 0.5, tile.getPos().getZ() + 0.5, offset.getX() + 0.5, offset.getY() + 0.95, offset.getZ() + 0.5, 80, 1F, 0.1F, recipe.getParticleColors());
// }
} }
} }
} }

View file

@ -1,5 +1,6 @@
package de.ellpeck.actuallyadditions.mod.blocks.render; package de.ellpeck.actuallyadditions.mod.blocks.render;
import com.mojang.blaze3d.matrix.MatrixStack;
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
import de.ellpeck.actuallyadditions.api.laser.IConnectionPair; import de.ellpeck.actuallyadditions.api.laser.IConnectionPair;
import de.ellpeck.actuallyadditions.api.laser.LaserType; import de.ellpeck.actuallyadditions.api.laser.LaserType;
@ -12,30 +13,35 @@ import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import io.netty.util.internal.ConcurrentSet; import io.netty.util.internal.ConcurrentSet;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.Quaternion;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Util;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) // todo: migrate to client package
public class RenderLaserRelay extends TileEntitySpecialRenderer<TileEntityLaserRelay> { public class RenderLaserRelay extends TileEntityRenderer<TileEntityLaserRelay> {
private static final float[] COLOR = new float[] { 1F, 0F, 0F }; private static final float[] COLOR = new float[] { 1F, 0F, 0F };
private static final float[] COLOR_ITEM = new float[] { 0F, 124F / 255F, 16F / 255F }; private static final float[] COLOR_ITEM = new float[] { 0F, 124F / 255F, 16F / 255F };
private static final float[] COLOR_FLUIDS = new float[] { 0F, 97F / 255F, 198F / 255F }; private static final float[] COLOR_FLUIDS = new float[] { 0F, 97F / 255F, 198F / 255F };
private static final float[] COLOR_INFRARED = new float[] { 209F / 255F, 179F / 255F, 239F / 255F }; private static final float[] COLOR_INFRARED = new float[] { 209F / 255F, 179F / 255F, 239F / 255F };
public RenderLaserRelay(TileEntityRendererDispatcher rendererDispatcherIn) {
super(rendererDispatcherIn);
}
@Override @Override
public void render(TileEntityLaserRelay tile, double x, double y, double z, float par5, int par6, float f) { public void render(TileEntityLaserRelay tile, float partialTicks, MatrixStack matrices, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
if (tile instanceof TileEntityLaserRelay) {
TileEntityLaserRelay relay = tile; TileEntityLaserRelay relay = tile;
boolean hasInvis = false; boolean hasInvis = false;
EntityPlayer player = Minecraft.getMinecraft().player; // BlockPos pos = tile.getPos();
PlayerEntity player = Minecraft.getInstance().player;
boolean hasGoggles = ItemEngineerGoggles.isWearing(player); boolean hasGoggles = ItemEngineerGoggles.isWearing(player);
ItemStack upgrade = relay.inv.getStackInSlot(0); ItemStack upgrade = relay.inv.getStackInSlot(0);
@ -46,18 +52,18 @@ public class RenderLaserRelay extends TileEntitySpecialRenderer<TileEntityLaserR
ItemStack hand = player.getHeldItemMainhand(); ItemStack hand = player.getHeldItemMainhand();
if (hasGoggles || StackUtil.isValid(hand) && (hand.getItem() == ConfigValues.itemCompassConfigurator || hand.getItem() instanceof ItemLaserWrench) || "themattabase".equals(player.getName())) { if (hasGoggles || StackUtil.isValid(hand) && (hand.getItem() == ConfigValues.itemCompassConfigurator || hand.getItem() instanceof ItemLaserWrench) || "themattabase".equals(player.getName())) {
GlStateManager.pushMatrix(); matrices.push();
float yTrans = tile.getBlockMetadata() == 0 ? 0.2F : 0.8F; float yTrans = .2f; // tile.getBlockMetadata() == 0 ? 0.2F : 0.8F; old logic for meta data
GlStateManager.translate((float) x + 0.5F, (float) y + yTrans, (float) z + 0.5F); // matrices.translate((float) pos.getX() + 0.5F, (float) pos.getY() + yTrans, (float) pos.getZ() + 0.5F);
GlStateManager.scale(0.2F, 0.2F, 0.2F); matrices.scale(0.2F, 0.2F, 0.2F);
double boop = Minecraft.getSystemTime() / 800D; double boop = Util.nanoTime() / 800D;
GlStateManager.rotate((float) (boop * 40D % 360), 0, 1, 0); matrices.rotate(new Quaternion((float) (boop * 40D % 360), 0, 1, 0));
AssetUtil.renderItemInWorld(upgrade); AssetUtil.renderItemInWorld(upgrade);
GlStateManager.popMatrix(); matrices.pop();
} }
} }
@ -83,7 +89,6 @@ public class RenderLaserRelay extends TileEntitySpecialRenderer<TileEntityLaserR
} }
} }
} }
}
@Override @Override
public boolean isGlobalRenderer(TileEntityLaserRelay tile) { public boolean isGlobalRenderer(TileEntityLaserRelay tile) {

View file

@ -1,63 +1,67 @@
package de.ellpeck.actuallyadditions.mod.blocks.render; package de.ellpeck.actuallyadditions.mod.blocks.render;
import com.mojang.blaze3d.matrix.MatrixStack;
import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.api.lens.ILensItem;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor;
import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.Quaternion;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) // todo: migrate to client package
public class RenderReconstructorLens extends TileEntitySpecialRenderer<TileEntityAtomicReconstructor> { public class RenderReconstructorLens extends TileEntityRenderer<TileEntityAtomicReconstructor> {
public RenderReconstructorLens(TileEntityRendererDispatcher rendererDispatcherIn) {
super(rendererDispatcherIn);
}
@Override @Override
public void render(TileEntityAtomicReconstructor tile, double x, double y, double z, float par5, int par6, float f) { public void render(TileEntityAtomicReconstructor tile, float partialTicks, MatrixStack matrices, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
if (tile == null) return;
ItemStack stack = tile.inv.getStackInSlot(0); ItemStack stack = tile.inv.getStackInSlot(0);
if (StackUtil.isValid(stack) && stack.getItem() instanceof ILensItem) { if (StackUtil.isValid(stack) && stack.getItem() instanceof ILensItem) {
GlStateManager.pushMatrix(); matrices.push();
GlStateManager.translate((float) x + 0.5F, (float) y - 0.5F, (float) z + 0.5F); // matrices.translate((float) pos.getX() + 0.5F, (float) pos.getY() - 0.5F, (float) pos.getZ() + 0.5F);
GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F); matrices.rotate(new Quaternion(180F, 0.0F, 0.0F, 1.0F));
IBlockState state = tile.getWorld().getBlockState(tile.getPos()); BlockState state = tile.getWorld().getBlockState(tile.getPos());
int meta = state.getBlock().getMetaFromState(state); // int meta = state.getBlock().getMetaFromState(state);
int meta = 0; // todo: fix this logic, I'm assuming it's facing meta but I don't know
if (meta == 0) { if (meta == 0) {
GlStateManager.translate(0F, -0.5F, 0F); matrices.translate(0F, -0.5F, 0F);
GlStateManager.rotate(90F, 1F, 0F, 0F); matrices.rotate(new Quaternion(90F, 1F, 0F, 0F));
} }
if (meta == 1) { if (meta == 1) {
GlStateManager.translate(0F, -1.5F - 0.5F / 16F, 0F); matrices.translate(0F, -1.5F - 0.5F / 16F, 0F);
GlStateManager.rotate(90F, 1F, 0F, 0F); matrices.rotate(new Quaternion(90F, 1F, 0F, 0F));
} }
if (meta == 2) { if (meta == 2) {
GlStateManager.translate(0F, -1F, 0F); matrices.translate(0F, -1F, 0F);
GlStateManager.translate(0F, 0F, -0.5F); matrices.translate(0F, 0F, -0.5F);
} }
if (meta == 3) { if (meta == 3) {
GlStateManager.translate(0F, -1F, 0F); matrices.translate(0F, -1F, 0F);
GlStateManager.translate(0F, 0F, 0.5F + 0.5F / 16F); matrices.translate(0F, 0F, 0.5F + 0.5F / 16F);
} }
if (meta == 4) { if (meta == 4) {
GlStateManager.translate(0F, -1F, 0F); matrices.translate(0F, -1F, 0F);
GlStateManager.translate(0.5F + 0.5F / 16F, 0F, 0F); matrices.translate(0.5F + 0.5F / 16F, 0F, 0F);
GlStateManager.rotate(90F, 0F, 1F, 0F); matrices.rotate(new Quaternion(90F, 0F, 1F, 0F));
} }
if (meta == 5) { if (meta == 5) {
GlStateManager.translate(0F, -1F, 0F); matrices.translate(0F, -1F, 0F);
GlStateManager.translate(-0.5F, 0F, 0F); matrices.translate(-0.5F, 0F, 0F);
GlStateManager.rotate(90F, 0F, 1F, 0F); matrices.rotate(new Quaternion(90F, 0F, 1F, 0F));
} }
GlStateManager.scale(0.5F, 0.5F, 0.5F); matrices.scale(0.5F, 0.5F, 0.5F);
AssetUtil.renderItemInWorld(stack); AssetUtil.renderItemInWorld(stack);
GlStateManager.popMatrix(); matrices.pop();
} }
} }
} }

View file

@ -1,7 +1,6 @@
package de.ellpeck.actuallyadditions.mod.blocks.render; package de.ellpeck.actuallyadditions.mod.blocks.render;
import java.util.Locale; import com.mojang.blaze3d.matrix.MatrixStack;
import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks;
import de.ellpeck.actuallyadditions.mod.misc.cloud.ISmileyCloudEasterEgg; import de.ellpeck.actuallyadditions.mod.misc.cloud.ISmileyCloudEasterEgg;
import de.ellpeck.actuallyadditions.mod.misc.cloud.SmileyCloudEasterEggs; import de.ellpeck.actuallyadditions.mod.misc.cloud.SmileyCloudEasterEggs;
@ -9,25 +8,30 @@ import de.ellpeck.actuallyadditions.mod.misc.special.RenderSpecial;
import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit;
import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud;
import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import net.minecraft.block.BlockHorizontal; import net.minecraft.block.BlockState;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.HorizontalBlock;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.Quaternion;
import net.minecraftforge.fml.relauncher.Side; import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.util.math.BlockPos;
@SideOnly(Side.CLIENT) import java.util.Locale;
public class RenderSmileyCloud extends TileEntitySpecialRenderer<TileEntitySmileyCloud> {
// todo: migrate to client package
public class RenderSmileyCloud extends TileEntityRenderer<TileEntitySmileyCloud> {
public RenderSmileyCloud(TileEntityRendererDispatcher rendererDispatcherIn) {
super(rendererDispatcherIn);
}
@Override @Override
public void render(TileEntitySmileyCloud theCloud, double x, double y, double z, float par5, int partial, float f) { public void render(TileEntitySmileyCloud theCloud, float partialTicks, MatrixStack matrices, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
if (theCloud instanceof TileEntitySmileyCloud) { matrices.push();
// matrices.translate((float) x + 0.5F, (float) y - 0.5F, (float) z + 0.5F);
GlStateManager.pushMatrix(); matrices.rotate(new Quaternion(180F, 0.0F, 0.0F, 1.0F));
GlStateManager.translate((float) x + 0.5F, (float) y - 0.5F, (float) z + 0.5F); matrices.translate(0.0F, -2F, 0.0F);
GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F);
GlStateManager.translate(0.0F, -2F, 0.0F);
if (theCloud.name != null && !theCloud.name.isEmpty()) { if (theCloud.name != null && !theCloud.name.isEmpty()) {
boolean renderedEaster = false; boolean renderedEaster = false;
@ -36,19 +40,19 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer<TileEntitySmile
for (String triggerName : cloud.getTriggerNames()) { for (String triggerName : cloud.getTriggerNames()) {
if (triggerName != null && theCloud.name != null) { if (triggerName != null && theCloud.name != null) {
if (triggerName.equalsIgnoreCase(theCloud.name)) { if (triggerName.equalsIgnoreCase(theCloud.name)) {
GlStateManager.pushMatrix(); matrices.push();
IBlockState state = theCloud.getWorld().getBlockState(theCloud.getPos()); BlockState state = theCloud.getWorld().getBlockState(theCloud.getPos());
if (state.getBlock() == InitBlocks.blockSmileyCloud) { if (state.getBlock() == InitBlocks.blockSmileyCloud) {
switch (state.getValue(BlockHorizontal.FACING)) { switch (state.get(HorizontalBlock.HORIZONTAL_FACING)) {
case NORTH: case NORTH:
GlStateManager.rotate(180, 0, 1, 0); matrices.rotate(new Quaternion(180, 0, 1, 0));
break; break;
case EAST: case EAST:
GlStateManager.rotate(270, 0, 1, 0); matrices.rotate(new Quaternion(270, 0, 1, 0));
break; break;
case WEST: case WEST:
GlStateManager.rotate(90, 0, 1, 0); matrices.rotate(new Quaternion(90, 0, 1, 0));
break; break;
default: default:
break; break;
@ -56,7 +60,7 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer<TileEntitySmile
} }
cloud.renderExtra(0.0625F); cloud.renderExtra(0.0625F);
GlStateManager.popMatrix(); matrices.pop();
renderedEaster = true; renderedEaster = true;
break easterEggs; break easterEggs;
@ -69,22 +73,22 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer<TileEntitySmile
if (SpecialRenderInit.SPECIAL_LIST.containsKey(nameLower)) { if (SpecialRenderInit.SPECIAL_LIST.containsKey(nameLower)) {
RenderSpecial render = SpecialRenderInit.SPECIAL_LIST.get(nameLower); RenderSpecial render = SpecialRenderInit.SPECIAL_LIST.get(nameLower);
if (render != null) { if (render != null) {
GlStateManager.pushMatrix(); matrices.push();
GlStateManager.translate(0F, renderedEaster ? 0.05F : 0.25F, 0F); matrices.translate(0F, renderedEaster ? 0.05F : 0.25F, 0F);
GlStateManager.rotate(180F, 1.0F, 0.0F, 1.0F); matrices.rotate(new Quaternion(180F, 1.0F, 0.0F, 1.0F));
GlStateManager.scale(0.75F, 0.75F, 0.75F); matrices.scale(0.75F, 0.75F, 0.75F);
render.render(); render.render();
GlStateManager.popMatrix(); matrices.pop();
} }
} }
} }
GlStateManager.popMatrix(); matrices.pop();
Minecraft mc = Minecraft.getMinecraft(); Minecraft mc = Minecraft.getInstance();
if (theCloud.name != null && !theCloud.name.isEmpty() && !mc.gameSettings.hideGUI) { if (theCloud.name != null && !theCloud.name.isEmpty() && !mc.gameSettings.hideGUI) {
if (mc.player.getDistanceSq(theCloud.getPos()) <= 36) { BlockPos pos = theCloud.getPos();
AssetUtil.renderNameTag(theCloud.name, x + 0.5F, y + 1.5F, z + 0.5F); if (mc.player.getDistanceSq(pos.getX(), pos.getY(), pos.getZ()) <= 36) {
} AssetUtil.renderNameTag(theCloud.name, pos.getX() + 0.5F, pos.getY() + 1.5F, pos.getZ() + 0.5F);
} }
} }
} }

View file

@ -1,54 +1,44 @@
package de.ellpeck.actuallyadditions.mod.blocks.render; package de.ellpeck.actuallyadditions.mod.blocks.render;
import javax.vecmath.Matrix3f;
import javax.vecmath.Matrix4f;
import javax.vecmath.Vector3f;
import javax.vecmath.Vector4f;
import net.minecraft.client.renderer.vertex.VertexFormat; //public class Transformer extends VertexTransformer {
import net.minecraft.client.renderer.vertex.VertexFormatElement; //
import net.minecraftforge.client.model.pipeline.UnpackedBakedQuad; // protected final Matrix4f transformation;
import net.minecraftforge.client.model.pipeline.VertexTransformer; // protected final Matrix3f normalTransformation;
import net.minecraftforge.common.model.TRSRTransformation; //
// public Transformer(TRSRTransformation transformation, VertexFormat format) {
public class Transformer extends VertexTransformer { // super(new UnpackedBakedQuad.Builder(format));
// // position transform
protected final Matrix4f transformation; // this.transformation = transformation.getMatrix();
protected final Matrix3f normalTransformation; // // normal transform
// this.normalTransformation = new Matrix3f();
public Transformer(TRSRTransformation transformation, VertexFormat format) { // this.transformation.getRotationScale(this.normalTransformation);
super(new UnpackedBakedQuad.Builder(format)); // this.normalTransformation.invert();
// position transform // this.normalTransformation.transpose();
this.transformation = transformation.getMatrix(); // }
// normal transform //
this.normalTransformation = new Matrix3f(); // @Override
this.transformation.getRotationScale(this.normalTransformation); // public void put(int element, float... data) {
this.normalTransformation.invert(); // VertexFormatElement.EnumUsage usage = this.parent.getVertexFormat().getElement(element).getUsage();
this.normalTransformation.transpose(); //
} // // transform normals and position
// if (usage == VertexFormatElement.EnumUsage.POSITION && data.length >= 3) {
@Override // Vector4f vec = new Vector4f(data);
public void put(int element, float... data) { // vec.setW(1.0f);
VertexFormatElement.EnumUsage usage = this.parent.getVertexFormat().getElement(element).getUsage(); // this.transformation.transform(vec);
// data = new float[4];
// transform normals and position // vec.get(data);
if (usage == VertexFormatElement.EnumUsage.POSITION && data.length >= 3) { // } else if (usage == VertexFormatElement.EnumUsage.NORMAL && data.length >= 3) {
Vector4f vec = new Vector4f(data); // Vector3f vec = new Vector3f(data);
vec.setW(1.0f); // this.normalTransformation.transform(vec);
this.transformation.transform(vec); // vec.normalize();
data = new float[4]; // data = new float[4];
vec.get(data); // vec.get(data);
} else if (usage == VertexFormatElement.EnumUsage.NORMAL && data.length >= 3) { // }
Vector3f vec = new Vector3f(data); // super.put(element, data);
this.normalTransformation.transform(vec); // }
vec.normalize(); //
data = new float[4]; // public UnpackedBakedQuad build() {
vec.get(data); // return ((UnpackedBakedQuad.Builder) this.parent).build();
} // }
super.put(element, data); //}
}
public UnpackedBakedQuad build() {
return ((UnpackedBakedQuad.Builder) this.parent).build();
}
}

View file

@ -11,6 +11,7 @@ import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import io.netty.util.internal.ConcurrentSet; import io.netty.util.internal.ConcurrentSet;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.EnumRarity; import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
@ -34,7 +35,7 @@ public class ItemEngineerGoggles extends ItemArmorAA implements IGoggles {
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }
public static boolean isWearing(EntityPlayer player) { public static boolean isWearing(PlayerEntity player) {
ItemStack face = player.inventory.armorInventory.get(3); ItemStack face = player.inventory.armorInventory.get(3);
return StackUtil.isValid(face) && face.getItem() instanceof IGoggles; return StackUtil.isValid(face) && face.getItem() instanceof IGoggles;
} }