Updated custom create classes.
This commit is contained in:
@@ -1,39 +0,0 @@
|
|||||||
package nl.requios.effortlessbuilding.create.events;
|
|
||||||
|
|
||||||
import net.minecraft.world.level.LevelAccessor;
|
|
||||||
import net.minecraftforge.event.level.LevelEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
||||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
|
||||||
import nl.requios.effortlessbuilding.create.foundation.utility.WorldAttached;
|
|
||||||
|
|
||||||
@EventBusSubscriber
|
|
||||||
public class CommonEvents {
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void onUnloadWorld(LevelEvent.Unload event) {
|
|
||||||
LevelAccessor world = event.getLevel();
|
|
||||||
WorldAttached.invalidateWorld(world);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD)
|
|
||||||
public static class ModBusEvents {
|
|
||||||
|
|
||||||
// @SubscribeEvent
|
|
||||||
// public static void addPackFinders(AddPackFindersEvent event) {
|
|
||||||
// if (event.getPackType() == PackType.CLIENT_RESOURCES) {
|
|
||||||
// IModFileInfo modFileInfo = ModList.get().getModFileById(Create.ID);
|
|
||||||
// if (modFileInfo == null) {
|
|
||||||
// Create.LOGGER.error("Could not find Create mod file info; built-in resource packs will be missing!");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// IModFile modFile = modFileInfo.getFile();
|
|
||||||
// event.addRepositorySource((consumer, constructor) -> {
|
|
||||||
// consumer.accept(Pack.create(Create.asResource("legacy_copper").toString(), false, () -> new ModFilePackResources("Create Legacy Copper", modFile, "resourcepacks/legacy_copper"), constructor, Pack.Position.TOP, PackSource.DEFAULT));
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
package nl.requios.effortlessbuilding.create.events;
|
package nl.requios.effortlessbuilding.create.foundation.events;
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.multiplayer.ClientLevel;
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.LevelAccessor;
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
@@ -12,11 +13,13 @@ import net.minecraftforge.client.event.RenderLevelStageEvent;
|
|||||||
import net.minecraftforge.client.event.ViewportEvent;
|
import net.minecraftforge.client.event.ViewportEvent;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.TickEvent.ClientTickEvent;
|
import net.minecraftforge.event.TickEvent.ClientTickEvent;
|
||||||
|
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
|
||||||
import net.minecraftforge.event.level.LevelEvent;
|
import net.minecraftforge.event.level.LevelEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
import nl.requios.effortlessbuilding.create.Create;
|
import nl.requios.effortlessbuilding.create.Create;
|
||||||
import nl.requios.effortlessbuilding.create.CreateClient;
|
import nl.requios.effortlessbuilding.create.CreateClient;
|
||||||
|
import nl.requios.effortlessbuilding.create.foundation.item.TooltipModifier;
|
||||||
import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer;
|
import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer;
|
||||||
import nl.requios.effortlessbuilding.create.foundation.utility.AnimationTickHolder;
|
import nl.requios.effortlessbuilding.create.foundation.utility.AnimationTickHolder;
|
||||||
import nl.requios.effortlessbuilding.create.foundation.utility.CameraAngleAnimationService;
|
import nl.requios.effortlessbuilding.create.foundation.utility.CameraAngleAnimationService;
|
||||||
@@ -59,21 +62,21 @@ public class ClientEvents {
|
|||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onRenderWorld(RenderLevelStageEvent event) {
|
public static void onRenderWorld(RenderLevelStageEvent event) {
|
||||||
Vec3 cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera()
|
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES)
|
||||||
.getPosition();
|
return;
|
||||||
float pt = AnimationTickHolder.getPartialTicks();
|
|
||||||
|
|
||||||
PoseStack ms = event.getPoseStack();
|
PoseStack ms = event.getPoseStack();
|
||||||
ms.pushPose();
|
ms.pushPose();
|
||||||
ms.translate(-cameraPos.x(), -cameraPos.y(), -cameraPos.z());
|
|
||||||
SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance();
|
SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance();
|
||||||
|
float partialTicks = AnimationTickHolder.getPartialTicks();
|
||||||
|
Vec3 camera = Minecraft.getInstance().gameRenderer.getMainCamera()
|
||||||
|
.getPosition();
|
||||||
|
|
||||||
CreateClient.GHOST_BLOCKS.renderAll(ms, buffer);
|
CreateClient.GHOST_BLOCKS.renderAll(ms, buffer, camera);
|
||||||
|
CreateClient.OUTLINER.renderOutlines(ms, buffer, camera, partialTicks);
|
||||||
|
|
||||||
CreateClient.OUTLINER.renderOutlines(ms, buffer, pt);
|
|
||||||
buffer.draw();
|
buffer.draw();
|
||||||
RenderSystem.enableCull();
|
RenderSystem.enableCull();
|
||||||
|
|
||||||
ms.popPose();
|
ms.popPose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,6 +91,20 @@ public class ClientEvents {
|
|||||||
event.setPitch(CameraAngleAnimationService.getPitch(partialTicks));
|
event.setPitch(CameraAngleAnimationService.getPitch(partialTicks));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void addToItemTooltip(ItemTooltipEvent event) {
|
||||||
|
// if (!AllConfigs.client().tooltips.get())
|
||||||
|
// return;
|
||||||
|
if (event.getEntity() == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Item item = event.getItemStack().getItem();
|
||||||
|
TooltipModifier modifier = TooltipModifier.REGISTRY.get(item);
|
||||||
|
if (modifier != null && modifier != TooltipModifier.EMPTY) {
|
||||||
|
modifier.modify(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isGameActive() {
|
public static boolean isGameActive() {
|
||||||
return !(Minecraft.getInstance().level == null || Minecraft.getInstance().player == null);
|
return !(Minecraft.getInstance().level == null || Minecraft.getInstance().player == null);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package nl.requios.effortlessbuilding.create.foundation.events;
|
||||||
|
|
||||||
|
import net.minecraft.world.level.LevelAccessor;
|
||||||
|
import net.minecraftforge.event.level.LevelEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
import nl.requios.effortlessbuilding.create.foundation.utility.WorldAttached;
|
||||||
|
|
||||||
|
@EventBusSubscriber
|
||||||
|
public class CommonEvents {
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void onUnloadWorld(LevelEvent.Unload event) {
|
||||||
|
LevelAccessor world = event.getLevel();
|
||||||
|
WorldAttached.invalidateWorld(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,10 +1,19 @@
|
|||||||
package nl.requios.effortlessbuilding.create.foundation.utility;
|
package nl.requios.effortlessbuilding.create.foundation.utility;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
//import nl.requios.effortlessbuilding.create.AllBlocks;
|
||||||
|
//import nl.requios.effortlessbuilding.create.AllTags.AllBlockTags;
|
||||||
|
//import nl.requios.effortlessbuilding.create.content.kinetics.base.KineticBlockEntity;
|
||||||
|
//import nl.requios.effortlessbuilding.create.foundation.blockEntity.IMergeableBE;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.core.Registry;
|
|
||||||
import net.minecraft.core.SectionPos;
|
import net.minecraft.core.SectionPos;
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
|
import net.minecraft.core.registries.Registries;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.sounds.SoundEvents;
|
import net.minecraft.sounds.SoundEvents;
|
||||||
@@ -20,7 +29,12 @@ import net.minecraft.world.item.enchantment.Enchantments;
|
|||||||
import net.minecraft.world.level.BlockGetter;
|
import net.minecraft.world.level.BlockGetter;
|
||||||
import net.minecraft.world.level.GameRules;
|
import net.minecraft.world.level.GameRules;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.*;
|
import net.minecraft.world.level.block.BaseRailBlock;
|
||||||
|
import net.minecraft.world.level.block.BedBlock;
|
||||||
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import net.minecraft.world.level.block.Blocks;
|
||||||
|
import net.minecraft.world.level.block.IceBlock;
|
||||||
|
import net.minecraft.world.level.block.SlimeBlock;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
||||||
@@ -29,15 +43,10 @@ import net.minecraft.world.level.block.state.properties.SlabType;
|
|||||||
import net.minecraft.world.level.chunk.LevelChunk;
|
import net.minecraft.world.level.chunk.LevelChunk;
|
||||||
import net.minecraft.world.level.chunk.LevelChunkSection;
|
import net.minecraft.world.level.chunk.LevelChunkSection;
|
||||||
import net.minecraft.world.level.material.FluidState;
|
import net.minecraft.world.level.material.FluidState;
|
||||||
import net.minecraft.world.level.material.Material;
|
|
||||||
import net.minecraftforge.common.IPlantable;
|
import net.minecraftforge.common.IPlantable;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.common.util.BlockSnapshot;
|
|
||||||
import net.minecraftforge.event.level.BlockEvent;
|
import net.minecraftforge.event.level.BlockEvent;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
public class BlockHelper {
|
public class BlockHelper {
|
||||||
|
|
||||||
public static BlockState setZeroAge(BlockState blockState) {
|
public static BlockState setZeroAge(BlockState blockState) {
|
||||||
@@ -152,7 +161,7 @@ public class BlockHelper {
|
|||||||
|
|
||||||
if (world.random.nextFloat() < effectChance)
|
if (world.random.nextFloat() < effectChance)
|
||||||
world.levelEvent(2001, pos, Block.getId(state));
|
world.levelEvent(2001, pos, Block.getId(state));
|
||||||
BlockEntity tileentity = state.hasBlockEntity() ? world.getBlockEntity(pos) : null;
|
BlockEntity blockEntity = state.hasBlockEntity() ? world.getBlockEntity(pos) : null;
|
||||||
|
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, pos, state, player);
|
BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, pos, state, player);
|
||||||
@@ -171,7 +180,7 @@ public class BlockHelper {
|
|||||||
if (world instanceof ServerLevel && world.getGameRules()
|
if (world instanceof ServerLevel && world.getGameRules()
|
||||||
.getBoolean(GameRules.RULE_DOBLOCKDROPS) && !world.restoringBlockSnapshots
|
.getBoolean(GameRules.RULE_DOBLOCKDROPS) && !world.restoringBlockSnapshots
|
||||||
&& (player == null || !player.isCreative())) {
|
&& (player == null || !player.isCreative())) {
|
||||||
for (ItemStack itemStack : Block.getDrops(state, (ServerLevel) world, pos, tileentity, player, usedTool))
|
for (ItemStack itemStack : Block.getDrops(state, (ServerLevel) world, pos, blockEntity, player, usedTool))
|
||||||
droppedItemCallback.accept(itemStack);
|
droppedItemCallback.accept(itemStack);
|
||||||
|
|
||||||
// Simulating IceBlock#playerDestroy. Not calling method directly as it would drop item
|
// Simulating IceBlock#playerDestroy. Not calling method directly as it would drop item
|
||||||
@@ -181,8 +190,8 @@ public class BlockHelper {
|
|||||||
.ultraWarm())
|
.ultraWarm())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var blockStateBelow = world.getBlockState(pos.below());
|
BlockState blockstate = world.getBlockState(pos.below());
|
||||||
if (blockStateBelow.blocksMotion() || blockStateBelow.liquid())
|
if (blockstate.blocksMotion() || blockstate.liquid())
|
||||||
world.setBlockAndUpdate(pos, Blocks.WATER.defaultBlockState());
|
world.setBlockAndUpdate(pos, Blocks.WATER.defaultBlockState());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -210,8 +219,8 @@ public class BlockHelper {
|
|||||||
int idx = chunk.getSectionIndex(target.getY());
|
int idx = chunk.getSectionIndex(target.getY());
|
||||||
LevelChunkSection chunksection = chunk.getSection(idx);
|
LevelChunkSection chunksection = chunk.getSection(idx);
|
||||||
if (chunksection == null) {
|
if (chunksection == null) {
|
||||||
chunksection = new LevelChunkSection(chunk.getSectionYFromSectionIndex(idx), world.registryAccess()
|
chunksection = new LevelChunkSection(world.registryAccess()
|
||||||
.registryOrThrow(Registry.BIOME_REGISTRY));
|
.registryOrThrow(Registries.BIOME));
|
||||||
chunk.getSections()[idx] = chunksection;
|
chunk.getSections()[idx] = chunksection;
|
||||||
}
|
}
|
||||||
BlockState old = chunksection.setBlockState(SectionPos.sectionRelative(target.getX()),
|
BlockState old = chunksection.setBlockState(SectionPos.sectionRelative(target.getX()),
|
||||||
@@ -224,9 +233,24 @@ public class BlockHelper {
|
|||||||
.getBlock(), target.below());
|
.getBlock(), target.below());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean placeSchematicBlock(Level world, Player player, BlockState state, BlockPos target, ItemStack stack,
|
public static CompoundTag prepareBlockEntityData(BlockState blockState, BlockEntity blockEntity) {
|
||||||
|
CompoundTag data = null;
|
||||||
|
if (blockEntity == null)
|
||||||
|
return data;
|
||||||
|
/*if (AllBlockTags.SAFE_NBT.matches(blockState)) {
|
||||||
|
data = blockEntity.saveWithFullMetadata();
|
||||||
|
data = NBTProcessors.process(blockEntity, data, true);
|
||||||
|
} else */if (blockEntity instanceof IPartialSafeNBT) {
|
||||||
|
data = new CompoundTag();
|
||||||
|
((IPartialSafeNBT) blockEntity).writeSafe(data);
|
||||||
|
data = NBTProcessors.process(blockEntity, data, true);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void placeSchematicBlock(Level world, BlockState state, BlockPos target, ItemStack stack,
|
||||||
@Nullable CompoundTag data) {
|
@Nullable CompoundTag data) {
|
||||||
BlockEntity existingTile = world.getBlockEntity(target);
|
BlockEntity existingBlockEntity = world.getBlockEntity(target);
|
||||||
|
|
||||||
// Piston
|
// Piston
|
||||||
if (state.hasProperty(BlockStateProperties.EXTENDED))
|
if (state.hasProperty(BlockStateProperties.EXTENDED))
|
||||||
@@ -254,40 +278,42 @@ public class BlockHelper {
|
|||||||
0.0D, 0.0D, 0.0D);
|
0.0D, 0.0D, 0.0D);
|
||||||
}
|
}
|
||||||
Block.dropResources(state, world, target);
|
Block.dropResources(state, world, target);
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.getBlock() instanceof BaseRailBlock) {
|
if (state.getBlock() instanceof BaseRailBlock) {
|
||||||
placeRailWithoutUpdate(world, state, target);
|
placeRailWithoutUpdate(world, state, target);
|
||||||
} else {
|
} /*else if (AllBlocks.BELT.has(state)) {
|
||||||
world.setBlock(target, state, 2); //Changed flag from 18 to 3
|
world.setBlock(target, state, 2);
|
||||||
|
} */else {
|
||||||
|
world.setBlock(target, state, 2); //Changed flag from 18 to 2
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
// if (existingTile instanceof IMergeableTE mergeable) {
|
// if (existingBlockEntity instanceof IMergeableBE mergeable) {
|
||||||
// BlockEntity loaded = BlockEntity.loadStatic(target, state, data);
|
// BlockEntity loaded = BlockEntity.loadStatic(target, state, data);
|
||||||
// if (existingTile.getType()
|
// if (existingBlockEntity.getType()
|
||||||
// .equals(loaded.getType())) {
|
// .equals(loaded.getType())) {
|
||||||
// mergeable.accept(loaded);
|
// mergeable.accept(loaded);
|
||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
BlockEntity tile = world.getBlockEntity(target);
|
BlockEntity blockEntity = world.getBlockEntity(target);
|
||||||
if (tile != null) {
|
if (blockEntity != null) {
|
||||||
data.putInt("x", target.getX());
|
data.putInt("x", target.getX());
|
||||||
data.putInt("y", target.getY());
|
data.putInt("y", target.getY());
|
||||||
data.putInt("z", target.getZ());
|
data.putInt("z", target.getZ());
|
||||||
// if (tile instanceof KineticTileEntity)
|
// if (blockEntity instanceof KineticBlockEntity)
|
||||||
// ((KineticTileEntity) tile).warnOfMovement();
|
// ((KineticBlockEntity) blockEntity).warnOfMovement();
|
||||||
tile.load(data);
|
blockEntity.load(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
state.getBlock().setPlacedBy(world, target, state, null, stack);
|
state.getBlock()
|
||||||
} catch (Exception ignored) {
|
.setPlacedBy(world, target, state, null, stack);
|
||||||
|
} catch (Exception e) {
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static double getBounceMultiplier(Block block) {
|
public static double getBounceMultiplier(Block block) {
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
package nl.requios.effortlessbuilding.create.foundation.utility.ghost;
|
package nl.requios.effortlessbuilding.create.foundation.utility.ghost;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.jozufozu.flywheel.core.model.ModelUtil;
|
import com.jozufozu.flywheel.core.model.ModelUtil;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
//import nl.requios.effortlessbuilding.create.foundation.placement.PlacementHelpers;
|
||||||
import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer;
|
import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.LevelRenderer;
|
import net.minecraft.client.renderer.LevelRenderer;
|
||||||
import net.minecraft.client.renderer.LightTexture;
|
import net.minecraft.client.renderer.LightTexture;
|
||||||
@@ -18,12 +24,10 @@ import net.minecraft.core.Direction;
|
|||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.util.RandomSource;
|
import net.minecraft.util.RandomSource;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.client.model.data.ModelData;
|
import net.minecraftforge.client.model.data.ModelData;
|
||||||
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
|
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public abstract class GhostBlockRenderer {
|
public abstract class GhostBlockRenderer {
|
||||||
|
|
||||||
private static final GhostBlockRenderer STANDARD = new DefaultGhostBlockRenderer();
|
private static final GhostBlockRenderer STANDARD = new DefaultGhostBlockRenderer();
|
||||||
@@ -38,12 +42,13 @@ public abstract class GhostBlockRenderer {
|
|||||||
return TRANSPARENT;
|
return TRANSPARENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void render(PoseStack ms, SuperRenderTypeBuffer buffer, GhostBlockParams params);
|
public abstract void render(PoseStack ms, SuperRenderTypeBuffer buffer, Vec3 camera, GhostBlockParams params);
|
||||||
|
|
||||||
private static class DefaultGhostBlockRenderer extends GhostBlockRenderer {
|
private static class DefaultGhostBlockRenderer extends GhostBlockRenderer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(PoseStack ms, SuperRenderTypeBuffer buffer, GhostBlockParams params) {
|
public void render(PoseStack ms, SuperRenderTypeBuffer buffer, Vec3 camera, GhostBlockParams params) {
|
||||||
|
ms.pushPose();
|
||||||
BlockRenderDispatcher dispatcher = Minecraft.getInstance()
|
BlockRenderDispatcher dispatcher = Minecraft.getInstance()
|
||||||
.getBlockRenderer();
|
.getBlockRenderer();
|
||||||
ModelBlockRenderer renderer = dispatcher.getModelRenderer();
|
ModelBlockRenderer renderer = dispatcher.getModelRenderer();
|
||||||
@@ -54,7 +59,7 @@ public abstract class GhostBlockRenderer {
|
|||||||
BakedModel model = dispatcher.getBlockModel(state);
|
BakedModel model = dispatcher.getBlockModel(state);
|
||||||
|
|
||||||
ms.pushPose();
|
ms.pushPose();
|
||||||
ms.translate(pos.getX(), pos.getY(), pos.getZ());
|
ms.translate(pos.getX() - camera.x, pos.getY() - camera.y, pos.getZ() - camera.z);
|
||||||
|
|
||||||
for (RenderType layer : model.getRenderTypes(state, RandomSource.create(42L), ModelUtil.VIRTUAL_DATA)) {
|
for (RenderType layer : model.getRenderTypes(state, RandomSource.create(42L), ModelUtil.VIRTUAL_DATA)) {
|
||||||
VertexConsumer vb = buffer.getEarlyBuffer(layer);
|
VertexConsumer vb = buffer.getEarlyBuffer(layer);
|
||||||
@@ -70,7 +75,9 @@ public abstract class GhostBlockRenderer {
|
|||||||
private static class TransparentGhostBlockRenderer extends GhostBlockRenderer {
|
private static class TransparentGhostBlockRenderer extends GhostBlockRenderer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(PoseStack ms, SuperRenderTypeBuffer buffer, GhostBlockParams params) {
|
public void render(PoseStack ms, SuperRenderTypeBuffer buffer, Vec3 camera, GhostBlockParams params) {
|
||||||
|
ms.pushPose();
|
||||||
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
BlockRenderDispatcher dispatcher = mc.getBlockRenderer();
|
BlockRenderDispatcher dispatcher = mc.getBlockRenderer();
|
||||||
|
|
||||||
@@ -84,9 +91,7 @@ public abstract class GhostBlockRenderer {
|
|||||||
RenderType layer = RenderType.translucent();
|
RenderType layer = RenderType.translucent();
|
||||||
VertexConsumer vb = buffer.getEarlyBuffer(layer);
|
VertexConsumer vb = buffer.getEarlyBuffer(layer);
|
||||||
|
|
||||||
ms.pushPose();
|
ms.translate(pos.getX() - camera.x, pos.getY() - camera.y, pos.getZ() - camera.z);
|
||||||
ms.translate(pos.getX(), pos.getY(), pos.getZ());
|
|
||||||
|
|
||||||
ms.translate(.5, .5, .5);
|
ms.translate(.5, .5, .5);
|
||||||
ms.scale(scale, scale, scale);
|
ms.scale(scale, scale, scale);
|
||||||
ms.translate(-.5, -.5, -.5);
|
ms.translate(-.5, -.5, -.5);
|
||||||
@@ -107,12 +112,12 @@ public abstract class GhostBlockRenderer {
|
|||||||
for (Direction direction : Direction.values()) {
|
for (Direction direction : Direction.values()) {
|
||||||
random.setSeed(42L);
|
random.setSeed(42L);
|
||||||
renderQuadList(pose, consumer, red, green, blue, alpha,
|
renderQuadList(pose, consumer, red, green, blue, alpha,
|
||||||
model.getQuads(state, direction, random, modelData, renderType), packedLight, packedOverlay);
|
model.getQuads(state, direction, random, modelData, null), packedLight, packedOverlay);
|
||||||
}
|
}
|
||||||
|
|
||||||
random.setSeed(42L);
|
random.setSeed(42L);
|
||||||
renderQuadList(pose, consumer, red, green, blue, alpha,
|
renderQuadList(pose, consumer, red, green, blue, alpha,
|
||||||
model.getQuads(state, null, random, modelData, renderType), packedLight, packedOverlay);
|
model.getQuads(state, null, random, modelData, null), packedLight, packedOverlay);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ModelBlockRenderer
|
// ModelBlockRenderer
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
package nl.requios.effortlessbuilding.create.foundation.utility.ghost;
|
package nl.requios.effortlessbuilding.create.foundation.utility.ghost;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import nl.requios.effortlessbuilding.EffortlessBuilding;
|
|
||||||
import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer;
|
|
||||||
import net.minecraft.util.Mth;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer;
|
||||||
|
|
||||||
|
import net.minecraft.util.Mth;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
public class GhostBlocks {
|
public class GhostBlocks {
|
||||||
|
|
||||||
public static double getBreathingAlpha() {
|
public static double getBreathingAlpha() {
|
||||||
@@ -61,10 +62,10 @@ public class GhostBlocks {
|
|||||||
ghosts.entrySet().removeIf(e -> !e.getValue().isAlive());
|
ghosts.entrySet().removeIf(e -> !e.getValue().isAlive());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renderAll(PoseStack ms, SuperRenderTypeBuffer buffer) {
|
public void renderAll(PoseStack ms, SuperRenderTypeBuffer buffer, Vec3 camera) {
|
||||||
ghosts.forEach((slot, entry) -> {
|
ghosts.forEach((slot, entry) -> {
|
||||||
GhostBlockRenderer ghost = entry.ghost;
|
GhostBlockRenderer ghost = entry.ghost;
|
||||||
ghost.render(ms, buffer, entry.params);
|
ghost.render(ms, buffer, camera, entry.params);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user