Skip to content

Commit

Permalink
Merge pull request #456 from ferriarnus/anchorchanges
Browse files Browse the repository at this point in the history
  • Loading branch information
Rover656 committed Aug 19, 2023
2 parents 9f210be + b5ebef8 commit d1af5b0
Show file tree
Hide file tree
Showing 13 changed files with 309 additions and 81 deletions.
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) {
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);

}
}

0 comments on commit d1af5b0

Please sign in to comment.