Updated custom create classes.

This commit is contained in:
Christian Knaapen
2023-09-16 13:09:07 +02:00
parent 8c2b9cb240
commit 9f05c218c7
6 changed files with 127 additions and 99 deletions

View File

@@ -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));
// });
// }
// }
}
}

View File

@@ -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.vertex.PoseStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
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.event.TickEvent;
import net.minecraftforge.event.TickEvent.ClientTickEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.level.LevelEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import nl.requios.effortlessbuilding.create.Create;
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.utility.AnimationTickHolder;
import nl.requios.effortlessbuilding.create.foundation.utility.CameraAngleAnimationService;
@@ -59,21 +62,21 @@ public class ClientEvents {
@SubscribeEvent
public static void onRenderWorld(RenderLevelStageEvent event) {
Vec3 cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera()
.getPosition();
float pt = AnimationTickHolder.getPartialTicks();
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES)
return;
PoseStack ms = event.getPoseStack();
ms.pushPose();
ms.translate(-cameraPos.x(), -cameraPos.y(), -cameraPos.z());
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();
RenderSystem.enableCull();
ms.popPose();
}
@@ -88,6 +91,20 @@ public class ClientEvents {
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() {
return !(Minecraft.getInstance().level == null || Minecraft.getInstance().player == null);
}

View File

@@ -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);
}
}

View File

@@ -1,10 +1,19 @@
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.Direction;
import net.minecraft.core.Registry;
import net.minecraft.core.SectionPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.core.registries.Registries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerLevel;
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.GameRules;
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.state.BlockState;
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.LevelChunkSection;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Material;
import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.BlockSnapshot;
import net.minecraftforge.event.level.BlockEvent;
import javax.annotation.Nullable;
import java.util.function.Consumer;
public class BlockHelper {
public static BlockState setZeroAge(BlockState blockState) {
@@ -152,7 +161,7 @@ public class BlockHelper {
if (world.random.nextFloat() < effectChance)
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) {
BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, pos, state, player);
@@ -171,7 +180,7 @@ public class BlockHelper {
if (world instanceof ServerLevel && world.getGameRules()
.getBoolean(GameRules.RULE_DOBLOCKDROPS) && !world.restoringBlockSnapshots
&& (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);
// Simulating IceBlock#playerDestroy. Not calling method directly as it would drop item
@@ -181,8 +190,8 @@ public class BlockHelper {
.ultraWarm())
return false;
var blockStateBelow = world.getBlockState(pos.below());
if (blockStateBelow.blocksMotion() || blockStateBelow.liquid())
BlockState blockstate = world.getBlockState(pos.below());
if (blockstate.blocksMotion() || blockstate.liquid())
world.setBlockAndUpdate(pos, Blocks.WATER.defaultBlockState());
return true;
}
@@ -210,8 +219,8 @@ public class BlockHelper {
int idx = chunk.getSectionIndex(target.getY());
LevelChunkSection chunksection = chunk.getSection(idx);
if (chunksection == null) {
chunksection = new LevelChunkSection(chunk.getSectionYFromSectionIndex(idx), world.registryAccess()
.registryOrThrow(Registry.BIOME_REGISTRY));
chunksection = new LevelChunkSection(world.registryAccess()
.registryOrThrow(Registries.BIOME));
chunk.getSections()[idx] = chunksection;
}
BlockState old = chunksection.setBlockState(SectionPos.sectionRelative(target.getX()),
@@ -224,9 +233,24 @@ public class BlockHelper {
.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) {
BlockEntity existingTile = world.getBlockEntity(target);
BlockEntity existingBlockEntity = world.getBlockEntity(target);
// Piston
if (state.hasProperty(BlockStateProperties.EXTENDED))
@@ -254,40 +278,42 @@ public class BlockHelper {
0.0D, 0.0D, 0.0D);
}
Block.dropResources(state, world, target);
return true;
return;
}
if (state.getBlock() instanceof BaseRailBlock) {
placeRailWithoutUpdate(world, state, target);
} else {
world.setBlock(target, state, 2); //Changed flag from 18 to 3
} /*else if (AllBlocks.BELT.has(state)) {
world.setBlock(target, state, 2);
} */else {
world.setBlock(target, state, 2); //Changed flag from 18 to 2
}
if (data != null) {
// if (existingTile instanceof IMergeableTE mergeable) {
// if (existingBlockEntity instanceof IMergeableBE mergeable) {
// BlockEntity loaded = BlockEntity.loadStatic(target, state, data);
// if (existingTile.getType()
// if (existingBlockEntity.getType()
// .equals(loaded.getType())) {
// mergeable.accept(loaded);
// return;
// }
// }
BlockEntity tile = world.getBlockEntity(target);
if (tile != null) {
BlockEntity blockEntity = world.getBlockEntity(target);
if (blockEntity != null) {
data.putInt("x", target.getX());
data.putInt("y", target.getY());
data.putInt("z", target.getZ());
// if (tile instanceof KineticTileEntity)
// ((KineticTileEntity) tile).warnOfMovement();
tile.load(data);
// if (blockEntity instanceof KineticBlockEntity)
// ((KineticBlockEntity) blockEntity).warnOfMovement();
blockEntity.load(data);
}
}
try {
state.getBlock().setPlacedBy(world, target, state, null, stack);
} catch (Exception ignored) {
state.getBlock()
.setPlacedBy(world, target, state, null, stack);
} catch (Exception e) {
}
return true;
}
public static double getBounceMultiplier(Block block) {

View File

@@ -1,9 +1,15 @@
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.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
//import nl.requios.effortlessbuilding.create.foundation.placement.PlacementHelpers;
import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.LightTexture;
@@ -18,12 +24,10 @@ import net.minecraft.core.Direction;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.client.model.data.ModelData;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import javax.annotation.Nullable;
import java.util.List;
public abstract class GhostBlockRenderer {
private static final GhostBlockRenderer STANDARD = new DefaultGhostBlockRenderer();
@@ -38,12 +42,13 @@ public abstract class GhostBlockRenderer {
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 {
@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()
.getBlockRenderer();
ModelBlockRenderer renderer = dispatcher.getModelRenderer();
@@ -54,7 +59,7 @@ public abstract class GhostBlockRenderer {
BakedModel model = dispatcher.getBlockModel(state);
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)) {
VertexConsumer vb = buffer.getEarlyBuffer(layer);
@@ -70,13 +75,15 @@ public abstract class GhostBlockRenderer {
private static class TransparentGhostBlockRenderer extends GhostBlockRenderer {
@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();
BlockRenderDispatcher dispatcher = mc.getBlockRenderer();
BlockState state = params.state;
BlockPos pos = params.pos;
float alpha = params.alphaSupplier.get()/* * .75f* PlacementHelpers.getCurrentAlpha()*/;
float alpha = params.alphaSupplier.get()/* * .75f * PlacementHelpers.getCurrentAlpha()*/;
float scale = params.scaleSupplier.get();
Color color = params.rgbSupplier.get();
@@ -84,9 +91,7 @@ public abstract class GhostBlockRenderer {
RenderType layer = RenderType.translucent();
VertexConsumer vb = buffer.getEarlyBuffer(layer);
ms.pushPose();
ms.translate(pos.getX(), pos.getY(), pos.getZ());
ms.translate(pos.getX() - camera.x, pos.getY() - camera.y, pos.getZ() - camera.z);
ms.translate(.5, .5, .5);
ms.scale(scale, scale, scale);
ms.translate(-.5, -.5, -.5);
@@ -107,12 +112,12 @@ public abstract class GhostBlockRenderer {
for (Direction direction : Direction.values()) {
random.setSeed(42L);
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);
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

View File

@@ -1,14 +1,15 @@
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.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 static double getBreathingAlpha() {
@@ -61,10 +62,10 @@ public class GhostBlocks {
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) -> {
GhostBlockRenderer ghost = entry.ghost;
ghost.render(ms, buffer, entry.params);
ghost.render(ms, buffer, camera, entry.params);
});
}