Fix server-side problems.
This commit is contained in:
+9
-3
@@ -37,7 +37,9 @@ repositories {
|
||||
maven {
|
||||
name = "HYWLA"
|
||||
url = "https://maven.tehnut.info/"
|
||||
|
||||
content {
|
||||
includeGroup "mcp.mobius.waila"
|
||||
}
|
||||
}
|
||||
maven {
|
||||
name = 'Earthcomputer Mods'
|
||||
@@ -107,8 +109,12 @@ dependencies {
|
||||
include "alexiil.mc.lib:libblockattributes-items:${libblockattributes_version}"
|
||||
include "alexiil.mc.lib:libblockattributes-fluids:${libblockattributes_version}"
|
||||
|
||||
modCompileOnly "me.shedaniel:RoughlyEnoughItems:4.6.6"
|
||||
modCompileOnly "mcp.mobius.waila:Hwyla:1.16.1-1.9.22-75"
|
||||
modCompileOnly("me.shedaniel:RoughlyEnoughItems:5.0.2-unstable") {
|
||||
exclude group: "net.fabricmc.fabric-api"
|
||||
}
|
||||
modCompileOnly("mcp.mobius.waila:Hwyla:1.16.1-1.9.22-75") {
|
||||
exclude group: "net.fabricmc.fabric-api"
|
||||
}
|
||||
// modRuntimeOnly "me.shedaniel:RoughlyEnoughItems:4.6.6"
|
||||
// modRuntimeOnly "mcp.mobius.waila:Hwyla:1.16.1-1.9.22-75"
|
||||
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ yarn_mappings=1.16.2-pre1+build.5
|
||||
loader_version=0.9.0+build.204
|
||||
|
||||
#Fabric api
|
||||
fabric_version=0.16.1+build.387-1.16
|
||||
fabric_version=0.16.3+build.390-1.16
|
||||
|
||||
loom_version=0.4-SNAPSHOT
|
||||
|
||||
|
||||
@@ -217,6 +217,12 @@ public final class AppEngClient extends AppEngBase {
|
||||
throw new IllegalStateException("No server is currently running.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOnServerThread() {
|
||||
IntegratedServer server = client.getServer();
|
||||
return server != null && server.isOnThread();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stream<? extends PlayerEntity> getPlayers() {
|
||||
return Stream.empty();
|
||||
@@ -243,15 +249,15 @@ public final class AppEngClient extends AppEngBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CableRenderMode getRenderMode() {
|
||||
public CableRenderMode getCableRenderMode() {
|
||||
if (Platform.isServer()) {
|
||||
return super.getRenderMode();
|
||||
return super.getCableRenderMode();
|
||||
}
|
||||
|
||||
final MinecraftClient mc = MinecraftClient.getInstance();
|
||||
final PlayerEntity player = mc.player;
|
||||
|
||||
return this.renderModeForPlayer(player);
|
||||
return this.getCableRenderModeForPlayer(player);
|
||||
}
|
||||
|
||||
public void triggerUpdates() {
|
||||
@@ -271,7 +277,7 @@ public final class AppEngClient extends AppEngBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateRenderMode(PlayerEntity player) {
|
||||
public void setPartInteractionPlayer(PlayerEntity player) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -67,9 +67,14 @@ public interface AppEng {
|
||||
|
||||
void postInit();
|
||||
|
||||
CableRenderMode getRenderMode();
|
||||
CableRenderMode getCableRenderMode();
|
||||
|
||||
void updateRenderMode(PlayerEntity player);
|
||||
/**
|
||||
* Sets the player that is currently interacting with a cable or part attached to a cable. This will return that
|
||||
* player's cable render mode from calls to {@link #getCableRenderMode()}, until another player or null is set.
|
||||
* @param player Null to revert to the default cable render mode.
|
||||
*/
|
||||
void setPartInteractionPlayer(PlayerEntity player);
|
||||
|
||||
boolean isActionKey(@Nonnull final ActionKey key, int keyCode, int scanCode);
|
||||
|
||||
@@ -81,6 +86,11 @@ public interface AppEng {
|
||||
*/
|
||||
MinecraftServer getServer();
|
||||
|
||||
/**
|
||||
* Checks whether the current thread is the main server thread.
|
||||
*/
|
||||
boolean isOnServerThread();
|
||||
|
||||
//
|
||||
// private final Registration registration;
|
||||
//
|
||||
|
||||
@@ -152,12 +152,23 @@ import appeng.worldgen.ChargedQuartzOreConfig;
|
||||
import appeng.worldgen.ChargedQuartzOreFeature;
|
||||
import appeng.worldgen.meteorite.MeteoriteStructure;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public abstract class AppEngBase implements AppEng {
|
||||
|
||||
protected AdvancementTriggers advancementTriggers;
|
||||
|
||||
// WTF is this doing? Should this be a ThreadLocal???
|
||||
private PlayerEntity renderModeBased;
|
||||
/**
|
||||
* While we process a player-specific part placement/cable interaction packet,
|
||||
* we need to use that player's transparent-facade mode to understand whether
|
||||
* the player can see through facades or not.
|
||||
* <p>
|
||||
* We need to use this method since the collision shape methods do not know
|
||||
* about the player that the shape is being requested for, so they will call
|
||||
* {@link #getCableRenderMode()} below, which then will use this field to figure
|
||||
* out which player it's for.
|
||||
*/
|
||||
private final ThreadLocal<PlayerEntity> partInteractionPlayer = new ThreadLocal<>();
|
||||
|
||||
public AppEngBase() {
|
||||
if (AppEng.instance() != null) {
|
||||
@@ -423,18 +434,13 @@ public abstract class AppEngBase implements AppEng {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CableRenderMode getRenderMode() {
|
||||
if (this.renderModeBased == null) {
|
||||
return CableRenderMode.STANDARD;
|
||||
}
|
||||
|
||||
return this.renderModeForPlayer(this.renderModeBased);
|
||||
public CableRenderMode getCableRenderMode() {
|
||||
return this.getCableRenderModeForPlayer(partInteractionPlayer.get());
|
||||
}
|
||||
|
||||
// FIXME this is some hot shit _FOR WHAT_?
|
||||
@Override
|
||||
public void updateRenderMode(final PlayerEntity player) {
|
||||
this.renderModeBased = player;
|
||||
public void setPartInteractionPlayer(final PlayerEntity player) {
|
||||
this.partInteractionPlayer.set(player);
|
||||
}
|
||||
|
||||
protected final <T extends IBootstrapComponent> void callDeferredBootstrapComponents(Class<T> componentClass,
|
||||
@@ -443,7 +449,7 @@ public abstract class AppEngBase implements AppEng {
|
||||
definitions.getRegistry().getBootstrapComponents(componentClass).forEachRemaining(invoker);
|
||||
}
|
||||
|
||||
protected CableRenderMode renderModeForPlayer(final PlayerEntity player) {
|
||||
protected final CableRenderMode getCableRenderModeForPlayer(@Nullable final PlayerEntity player) {
|
||||
if (player != null) {
|
||||
for (int x = 0; x < PlayerInventory.getHotbarSize(); x++) {
|
||||
final ItemStack is = player.inventory.getStack(x);
|
||||
|
||||
@@ -41,6 +41,6 @@ public class ApiPart implements IPartHelper {
|
||||
|
||||
@Override
|
||||
public CableRenderMode getCableRenderMode() {
|
||||
return AppEng.instance().getRenderMode();
|
||||
return AppEng.instance().getCableRenderMode();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,11 +68,14 @@ public class PartPlacementPacket extends BasePacket {
|
||||
@Override
|
||||
public void serverPacketData(final INetworkInfo manager, final PlayerEntity player) {
|
||||
final ServerPlayerEntity sender = (ServerPlayerEntity) player;
|
||||
AppEng.instance().updateRenderMode(sender);
|
||||
PartPlacement.setEyeHeight(this.eyeHeight);
|
||||
PartPlacement.place(sender.getStackInHand(this.hand), new BlockPos(this.x, this.y, this.z),
|
||||
Direction.values()[this.face], sender, this.hand, sender.world,
|
||||
PartPlacement.PlaceType.INTERACT_FIRST_PASS, 0);
|
||||
AppEng.instance().updateRenderMode(null);
|
||||
AppEng.instance().setPartInteractionPlayer(sender);
|
||||
try {
|
||||
PartPlacement.setEyeHeight(this.eyeHeight);
|
||||
PartPlacement.place(sender.getStackInHand(this.hand), new BlockPos(this.x, this.y, this.z),
|
||||
Direction.values()[this.face], sender, this.hand, sender.world,
|
||||
PartPlacement.PlaceType.INTERACT_FIRST_PASS, 0);
|
||||
} finally {
|
||||
AppEng.instance().setPartInteractionPlayer(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -316,11 +316,12 @@ public class PartPlacement {
|
||||
}
|
||||
|
||||
private static SelectedPart selectPart(final PlayerEntity player, final IPartHost host, final Vec3d pos) {
|
||||
AppEng.instance().updateRenderMode(player);
|
||||
final SelectedPart sp = host.selectPart(pos);
|
||||
AppEng.instance().updateRenderMode(null);
|
||||
|
||||
return sp;
|
||||
AppEng.instance().setPartInteractionPlayer(player);
|
||||
try {
|
||||
return host.selectPart(pos);
|
||||
} finally {
|
||||
AppEng.instance().setPartInteractionPlayer(null);
|
||||
}
|
||||
}
|
||||
|
||||
public static IFacadePart isFacade(final ItemStack held, final AEPartLocation side) {
|
||||
|
||||
@@ -7,13 +7,11 @@ import javax.annotation.Nonnull;
|
||||
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
||||
import net.fabricmc.fabric.api.server.PlayerStream;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.hit.HitResult;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import appeng.api.parts.CableRenderMode;
|
||||
import appeng.client.ActionKey;
|
||||
import appeng.client.EffectType;
|
||||
import appeng.core.AppEngBase;
|
||||
@@ -78,16 +76,6 @@ public final class AppEngServer extends AppEngBase {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public CableRenderMode getRenderMode() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateRenderMode(PlayerEntity player) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActionKey(@Nonnull ActionKey key, int keyCode, int scanCode) {
|
||||
return false;
|
||||
@@ -98,4 +86,9 @@ public final class AppEngServer extends AppEngBase {
|
||||
return server;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOnServerThread() {
|
||||
return server != null && server.isOnThread();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,48 +18,14 @@
|
||||
|
||||
package appeng.util;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.*;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.item.TooltipContext;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.ItemEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.inventory.CraftingInventory;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.recipe.Recipe;
|
||||
import net.minecraft.server.integrated.IntegratedServer;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.text.LiteralText;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.text.TranslatableText;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.Util;
|
||||
import net.minecraft.util.hit.EntityHitResult;
|
||||
import net.minecraft.util.hit.HitResult;
|
||||
import net.minecraft.util.math.*;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.world.RayTraceContext;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import alexiil.mc.lib.attributes.fluid.volume.FluidVolume;
|
||||
|
||||
import appeng.api.config.*;
|
||||
import appeng.api.config.AccessRestriction;
|
||||
import appeng.api.config.Actionable;
|
||||
import appeng.api.config.PowerMultiplier;
|
||||
import appeng.api.config.PowerUnits;
|
||||
import appeng.api.config.SearchBoxMode;
|
||||
import appeng.api.config.SecurityPermissions;
|
||||
import appeng.api.config.SortOrder;
|
||||
import appeng.api.definitions.IItemDefinition;
|
||||
import appeng.api.definitions.IMaterials;
|
||||
import appeng.api.features.AEFeature;
|
||||
@@ -86,6 +52,7 @@ import appeng.api.util.DimensionalCoord;
|
||||
import appeng.core.AEConfig;
|
||||
import appeng.core.AELog;
|
||||
import appeng.core.Api;
|
||||
import appeng.core.AppEng;
|
||||
import appeng.core.stats.AeStats;
|
||||
import appeng.fluids.util.AEFluidStack;
|
||||
import appeng.hooks.TickHandler;
|
||||
@@ -97,6 +64,50 @@ import appeng.util.helpers.ItemComparisonHelper;
|
||||
import appeng.util.helpers.P2PHelper;
|
||||
import appeng.util.item.AEItemStack;
|
||||
import appeng.util.prioritylist.IPartitionList;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.Iterables;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.entity.BlockEntity;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.item.TooltipContext;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.ItemEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.inventory.CraftingInventory;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.recipe.Recipe;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.text.LiteralText;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.text.TranslatableText;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.Util;
|
||||
import net.minecraft.util.hit.EntityHitResult;
|
||||
import net.minecraft.util.hit.HitResult;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Box;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.world.RayTraceContext;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* @author AlgorithmX2
|
||||
@@ -203,10 +214,7 @@ public class Platform {
|
||||
* returns true if the code is on the client.
|
||||
*/
|
||||
public static boolean isClient() {
|
||||
// FIXME: Move this to the proxy so it will work on a dedicated server
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
IntegratedServer server = client.getServer();
|
||||
return server == null || Thread.currentThread() != server.getThread();
|
||||
return !AppEng.instance().isOnServerThread();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -647,8 +655,7 @@ public class Platform {
|
||||
|
||||
public static LookDirection getPlayerRay(final PlayerEntity playerIn, double reachDistance) {
|
||||
final double x = playerIn.prevX + (playerIn.getX() - playerIn.prevX);
|
||||
final double y = playerIn.prevY + (playerIn.getY() - playerIn.prevY)
|
||||
+ playerIn.getEyeHeight(playerIn.getPose());
|
||||
final double y = playerIn.prevY + (playerIn.getY() - playerIn.prevY) + playerIn.getStandingEyeHeight();
|
||||
final double z = playerIn.prevZ + (playerIn.getZ() - playerIn.prevZ);
|
||||
|
||||
final float playerPitch = playerIn.prevPitch + (playerIn.pitch - playerIn.prevPitch);
|
||||
|
||||
@@ -35,7 +35,7 @@ import appeng.worldgen.meteorite.fallout.FalloutMode;
|
||||
|
||||
public class MeteoriteStructurePiece extends StructurePiece {
|
||||
|
||||
public static final StructurePieceType TYPE = StructurePieceType.register(MeteoriteStructurePiece::new, "AE2MTRT");
|
||||
public static final StructurePieceType TYPE = StructurePieceType.register(MeteoriteStructurePiece::new, "ae2mtrt");
|
||||
|
||||
private final PlacedMeteoriteSettings settings;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user