Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Anchor changes #456

Merged
merged 9 commits into from
Aug 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.enderio.core.common.network;

import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.PacketDistributor;
Expand Down Expand Up @@ -44,6 +46,10 @@ public static <P extends Packet> void sendToTracking(LevelChunk chunk, P packet)
send(PacketDistributor.TRACKING_CHUNK.with(() -> chunk), packet);
}

public static <P extends Packet> void sendToDimension(ResourceKey<Level> dim, P packet) {
send(PacketDistributor.DIMENSION.with(() -> dim), packet);
}

public static <P extends Packet> void send(PacketDistributor.PacketTarget target, P packet) {
CHANNEL.send(target, packet);
}
Expand Down
10 changes: 2 additions & 8 deletions src/machines/java/com/enderio/machines/EIOMachines.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,18 @@
package com.enderio.machines;

import com.enderio.EnderIO;
import com.enderio.base.data.EIODataProvider;
import com.enderio.api.integration.IntegrationManager;
import com.enderio.api.travel.TravelRegistry;
import com.enderio.base.data.EIODataProvider;
import com.enderio.machines.client.rendering.travel.TravelAnchorRenderer;
import com.enderio.machines.common.blockentity.solar.SolarPanelTier;
import com.enderio.machines.common.config.MachinesConfig;
import com.enderio.machines.common.init.*;
import com.enderio.machines.common.init.MachineBlockEntities;
import com.enderio.machines.common.init.MachineBlocks;
import com.enderio.machines.common.init.MachineMenus;
import com.enderio.machines.common.init.MachineRecipes;
import com.enderio.machines.common.integrations.EnderIOMachinesSelfIntegration;
import com.enderio.machines.common.lang.MachineLang;
import com.enderio.machines.common.network.MachineNetwork;
import com.enderio.machines.common.tag.MachineTags;
import com.enderio.machines.data.advancements.MachinesAdvancementGenerator;
import com.enderio.machines.common.travel.AnchorTravelTarget;
import com.enderio.machines.data.advancements.MachinesAdvancementGenerator;
import com.enderio.machines.data.recipes.*;
import com.enderio.machines.data.souldata.SoulDataProvider;
import com.enderio.machines.data.tag.MachineEntityTypeTagsProvider;
Expand Down Expand Up @@ -58,7 +53,6 @@ public static void onConstruct(FMLConstructModEvent event) {
MachineLang.register();
MachineRecipes.register();
MachineTags.register();
MachineNetwork.networkInit();

// Remap
MinecraftForge.EVENT_BUS.addListener(EIOMachines::missingMappings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,25 @@
import com.enderio.machines.common.travel.AnchorTravelTarget;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.network.chat.Component;
import net.minecraft.util.FastColor;
import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
import org.joml.Math;
import org.joml.Matrix4f;

public class TravelAnchorRenderer implements TravelRenderer<AnchorTravelTarget> {
Expand Down Expand Up @@ -59,23 +64,25 @@ public void render(AnchorTravelTarget travelData, LevelRenderer levelRenderer, P
LevelRenderer.renderLineBox(poseStack, lines, 0, 0, 0, 1, 1, 1, FastColor.ARGB32.red(color) / 255F, FastColor.ARGB32.green(color) / 255F,
FastColor.ARGB32.blue(color) / 255F, 1);

// Scale for rendering
double doubleScale = Math.sqrt(0.0035 * Math.sqrt(distanceSquared));
if (doubleScale < 0.1f) {
doubleScale = 0.1f;
}
doubleScale = doubleScale * (Math.sin(Math.toRadians(Minecraft.getInstance().options.fov().get() / 4d)));
if (active) {
doubleScale *= 1.3;
}
float scale = (float) doubleScale;

LocalPlayer player = Minecraft.getInstance().player;
Vec3 position = player.position();
float f1 = (float) (Mth.atan2(position.z - travelData.getPos().getZ() - 0.5D, position.x - travelData.getPos().getX() - 0.5D) + Math.PI/2D);
// Render Text
if (!travelData.getName().trim().isEmpty()) {
// Scale for rendering
double doubleScale = Math.sqrt(0.0035 * Math.sqrt(distanceSquared));
if (doubleScale < 0.1f) {
doubleScale = 0.1f;
}
doubleScale = doubleScale * (Math.sin(Math.toRadians(Minecraft.getInstance().options.fov().get() / 4d)));
if (active) {
doubleScale *= 1.3;
}
float scale = (float) doubleScale;

poseStack.pushPose();
poseStack.translate(0.5, 1.05 + (doubleScale * Minecraft.getInstance().font.lineHeight), 0.5);
poseStack.mulPose(Minecraft.getInstance().getEntityRenderDispatcher().cameraOrientation());
poseStack.mulPose(Axis.YN.rotation(f1));
poseStack.scale(-scale, -scale, scale);

Matrix4f matrix4f = poseStack.last().pose();
Expand All @@ -92,14 +99,23 @@ public void render(AnchorTravelTarget travelData, LevelRenderer levelRenderer, P

// Render Icon
if (travelData.getIcon() != Items.AIR) {
// Scale for rendering
double doubleScale = Math.sqrt(Math.sqrt(distanceSquared));
doubleScale = doubleScale * (Math.sin(Math.toRadians(Minecraft.getInstance().options.fov().get() / 4d)));
if (active) {
doubleScale *= 1.3;
}
float scale = (float) doubleScale;
poseStack.pushPose();
poseStack.translate(0.5, 2.5, 0.5);
poseStack.mulPose(minecraft.getEntityRenderDispatcher().cameraOrientation());
poseStack.translate(0.5, 0.5, 0.5);
poseStack.mulPose(Axis.YN.rotation(f1));
poseStack.translate(0, 0, -1);
poseStack.scale(-scale, scale, -scale);
ItemStack stack = new ItemStack(travelData.getIcon());
BakedModel bakedmodel = minecraft.getItemRenderer().getModel(stack, minecraft.level, null, 0);
minecraft
.getItemRenderer()
.render(stack, ItemDisplayContext.GUI, false, poseStack, OutlineBuffer.INSTANCE, 15728880, OverlayTexture.NO_OVERLAY, bakedmodel);
.render(stack, ItemDisplayContext.GUI, true, poseStack, OutlineBuffer.INSTANCE, 15728880, OverlayTexture.NO_OVERLAY, bakedmodel);
poseStack.popPose();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package com.enderio.machines.common.block;

import com.enderio.base.common.handler.TravelHandler;
import com.enderio.base.common.travel.TravelSavedData;
import com.enderio.machines.common.blockentity.TravelAnchorBlockEntity;
import com.enderio.machines.common.init.MachineBlockEntities;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.event.TickEvent;
Expand Down Expand Up @@ -59,4 +62,12 @@ private static PlayerSneakEntry getLastSneakEntry(ServerPlayer player){
}

private record PlayerSneakEntry(boolean isSneaking, int atTime){}

@Override
public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean movedByPiston) {
ferriarnus marked this conversation as resolved.
Show resolved Hide resolved
if (level.getBlockEntity(pos) instanceof TravelAnchorBlockEntity anchorBlock) {
TravelSavedData.getTravelData(level).removeTravelTargetAt(level, pos);
}
super.onRemove(state, level, pos, newState, movedByPiston);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,16 @@

public class TravelAnchorBlockEntity extends MachineBlockEntity {

private AnchorTravelTarget target;
public static final SingleSlotAccess GHOST = new SingleSlotAccess();

private final StringNetworkDataSlot nameDataSlot;
private final BooleanNetworkDataSlot visibilityDataSlot;
private final ResourceLocationNetworkDataSlot iconDataSlot;

public TravelAnchorBlockEntity(BlockEntityType<?> pType, BlockPos pWorldPosition, BlockState pBlockState) {
super(pType, pWorldPosition, pBlockState);
nameDataSlot = new StringNetworkDataSlot(this::getName, name -> target.setName(name));
visibilityDataSlot = new BooleanNetworkDataSlot(this::getVisibility, visible -> target.setVisibility(visible));
nameDataSlot = new StringNetworkDataSlot(this::getName, name -> getOrCreateTravelTarget().setName(name));
visibilityDataSlot = new BooleanNetworkDataSlot(this::getVisibility, vis -> getOrCreateTravelTarget().setVisibility(vis));
iconDataSlot = new ResourceLocationNetworkDataSlot(() -> ForgeRegistries.ITEMS.getKey(getIcon()),
loc -> target.setIcon(ForgeRegistries.ITEMS.getValue(loc)));
loc -> getOrCreateTravelTarget().setIcon(ForgeRegistries.ITEMS.getValue(loc)));
addDataSlot(nameDataSlot);
addDataSlot(visibilityDataSlot);
addDataSlot(iconDataSlot);
Expand All @@ -59,58 +56,43 @@ public AbstractContainerMenu createMenu(int containerId, Inventory inventory, Pl
protected void onInventoryContentsChanged(int slot) {
super.onInventoryContentsChanged(slot);
ItemStack stack = GHOST.getItemStack(getInventory());
if (!stack.isEmpty()) {
setIcon(stack.getItem());
}
}

@Override
public void setRemoved() {
getTravelData().removeTravelTargetAt(worldPosition);
super.setRemoved();
}

@Override
public void onLoad() {
target = getOrCreateTravelTarget();
super.onLoad();
setIcon(stack.getItem());
}

@Nullable
public String getName() {
return target.getName();
return getOrCreateTravelTarget().getName();
}

public void setName(String name) {
if (level != null && level.isClientSide()) {
clientUpdateSlot(nameDataSlot, name);
} else {
target.setName(name);
getOrCreateTravelTarget().setName(name);
}
}

public Item getIcon() {
return target.getIcon();
return getOrCreateTravelTarget().getIcon();
}

public void setIcon(Item icon) {
if (level != null && level.isClientSide()) {
clientUpdateSlot(iconDataSlot, ForgeRegistries.ITEMS.getKey(icon));
} else {
target.setIcon(icon);
getOrCreateTravelTarget().setIcon(icon);
}

}

public boolean getVisibility() {
return target.getVisibility();
return getOrCreateTravelTarget().getVisibility();
}

public void setVisibility(boolean visible) {
if (level != null && level.isClientSide()) {
clientUpdateSlot(visibilityDataSlot, visible);
} else {
target.setVisibility(visible);
getOrCreateTravelTarget().setVisibility(visible);
}
}

Expand All @@ -120,7 +102,7 @@ private AnchorTravelTarget getOrCreateTravelTarget() {
return anchorTravelTarget;
}
AnchorTravelTarget anchorTravelTarget = new AnchorTravelTarget(worldPosition, "", Items.AIR, true);
getTravelData().addTravelTarget(anchorTravelTarget);
getTravelData().addTravelTarget(level, anchorTravelTarget);
return anchorTravelTarget;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
package com.enderio.machines.common.init;

import com.enderio.base.common.network.SyncTravelDataPacket;
import com.enderio.core.common.network.CoreNetwork;
import com.enderio.machines.common.network.PoweredSpawnerSoulPacket;
import com.enderio.machines.common.network.UpdateCrafterTemplatePacket;
import com.enderio.machines.common.souldata.SpawnerSoul;

public class MachinePackets {
public static void register() {
//Sync soul data (optional)
SpawnerSoul.SPAWNER.subscribeAsSyncable(PoweredSpawnerSoulPacket::new);

//packets
CoreNetwork.registerPacket(new UpdateCrafterTemplatePacket.Handler(), UpdateCrafterTemplatePacket.class);
CoreNetwork.registerPacket(new PoweredSpawnerSoulPacket.Handler(), PoweredSpawnerSoulPacket.class);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,6 @@ public CompoundTag save() {
return nbt;
}



@Override
public boolean equals(Object o) {
if (this == o)
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/com/enderio/base/common/init/EIOPackets.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.enderio.base.common.init;

import com.enderio.base.common.network.AddTravelTargetPacket;
import com.enderio.base.common.network.RemoveTravelTargetPacket;
import com.enderio.base.common.network.SyncTravelDataPacket;
import com.enderio.base.common.network.UpdateCoordinateSelectionNameMenuPacket;
import com.enderio.core.common.network.ClientToServerMenuPacket;
import com.enderio.core.common.network.CoreNetwork;
Expand All @@ -10,5 +13,9 @@ public class EIOPackets {
*/
public static void register() {
CoreNetwork.registerPacket(new ClientToServerMenuPacket.Handler<>(UpdateCoordinateSelectionNameMenuPacket::new), UpdateCoordinateSelectionNameMenuPacket.class);
CoreNetwork.registerPacket(new SyncTravelDataPacket.Handler(), SyncTravelDataPacket.class);
CoreNetwork.registerPacket(new AddTravelTargetPacket.Handler(), AddTravelTargetPacket.class);
CoreNetwork.registerPacket(new RemoveTravelTargetPacket.Handler(), RemoveTravelTargetPacket.class);

}
}