完善材质,更新版本为1.2.0
This commit is contained in:
parent
f7e57d9dd8
commit
35fe0af647
|
|
@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G
|
|||
loom.platform = forge
|
||||
|
||||
# Mod properties
|
||||
mod_version = 1.1.4
|
||||
mod_version = 1.2.0
|
||||
maven_group = com.extendedae_plus
|
||||
archives_name = extendedae_plus
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ public final class ModConfigs {
|
|||
public static final ForgeConfigSpec COMMON_SPEC;
|
||||
public static final ForgeConfigSpec.IntValue PAGE_MULTIPLIER;
|
||||
public static final ForgeConfigSpec.DoubleValue WIRELESS_MAX_RANGE;
|
||||
public static final ForgeConfigSpec.BooleanValue WIRELESS_CROSS_DIM_ENABLE;
|
||||
|
||||
static {
|
||||
ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder();
|
||||
|
|
@ -24,6 +25,13 @@ public final class ModConfigs {
|
|||
"无线收发器最大连接距离(单位:方块)",
|
||||
"从端与主端的直线距离需小于等于该值才会建立连接。")
|
||||
.defineInRange("wirelessMaxRange", 256.0D, 1.0D, 4096.0D);
|
||||
|
||||
// 是否允许跨维度连接(忽略维度差异进行频道传输)。
|
||||
WIRELESS_CROSS_DIM_ENABLE = builder
|
||||
.comment(
|
||||
"是否允许无线收发器跨维度建立连接",
|
||||
"开启后,从端可连接到不同维度的主端(忽略距离限制)")
|
||||
.define("wirelessCrossDimEnable", true);
|
||||
builder.pop();
|
||||
COMMON_SPEC = builder.build();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
|||
f -= step;
|
||||
if (f < 0) f = 0;
|
||||
te.setFrequency(f);
|
||||
player.displayClientMessage(Component.literal("Freq: " + te.getFrequency()), true);
|
||||
player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true);
|
||||
}
|
||||
}
|
||||
super.attack(state, level, pos, player);
|
||||
|
|
@ -71,10 +71,10 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
|||
if (f < 0) f = 0;
|
||||
}
|
||||
te.setFrequency(f);
|
||||
player.displayClientMessage(Component.literal("Freq: " + te.getFrequency()), true);
|
||||
player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true);
|
||||
} else {
|
||||
te.setMasterMode(!te.isMasterMode());
|
||||
player.displayClientMessage(Component.literal(te.isMasterMode() ? "Mode: MASTER" : "Mode: SLAVE"), true);
|
||||
player.displayClientMessage(Component.literal(te.isMasterMode() ? "模式:主端" : "模式:从端"), true);
|
||||
}
|
||||
return InteractionResult.CONSUME;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ import java.util.HashMap;
|
|||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import com.extendedae_plus.config.ModConfigs;
|
||||
|
||||
/**
|
||||
* 无线主端注册中心:按 维度 + 频率 唯一注册一个主收发器端点。
|
||||
* 从端通过本注册中心按频率查找主端,实现一对多连接。
|
||||
|
|
@ -22,7 +24,7 @@ public final class WirelessMasterRegistry {
|
|||
Objects.requireNonNull(level, "level");
|
||||
Objects.requireNonNull(endpoint, "endpoint");
|
||||
if (frequency == 0L) return false;
|
||||
final Key key = new Key(level.dimension(), frequency);
|
||||
final Key key = new Key(useGlobal() ? null : level.dimension(), frequency);
|
||||
cleanupIfCleared(key);
|
||||
var existing = MASTERS.get(key);
|
||||
var existingVal = existing == null ? null : existing.get();
|
||||
|
|
@ -36,7 +38,7 @@ public final class WirelessMasterRegistry {
|
|||
|
||||
public static synchronized void unregister(ServerLevel level, long frequency, IWirelessEndpoint endpoint) {
|
||||
if (frequency == 0L || level == null) return;
|
||||
final Key key = new Key(level.dimension(), frequency);
|
||||
final Key key = new Key(useGlobal() ? null : level.dimension(), frequency);
|
||||
var ref = MASTERS.get(key);
|
||||
if (ref != null) {
|
||||
var cur = ref.get();
|
||||
|
|
@ -48,7 +50,7 @@ public final class WirelessMasterRegistry {
|
|||
|
||||
public static synchronized IWirelessEndpoint get(ServerLevel level, long frequency) {
|
||||
if (frequency == 0L || level == null) return null;
|
||||
final Key key = new Key(level.dimension(), frequency);
|
||||
final Key key = new Key(useGlobal() ? null : level.dimension(), frequency);
|
||||
cleanupIfCleared(key);
|
||||
var ref = MASTERS.get(key);
|
||||
return ref == null ? null : ref.get();
|
||||
|
|
@ -61,7 +63,13 @@ public final class WirelessMasterRegistry {
|
|||
}
|
||||
}
|
||||
|
||||
private static boolean useGlobal() {
|
||||
return ModConfigs.WIRELESS_CROSS_DIM_ENABLE.get();
|
||||
}
|
||||
|
||||
private record Key(ResourceKey<Level> dim, long freq) {
|
||||
@Override public String toString() { return dim.location() + "#" + freq; }
|
||||
@Override public String toString() {
|
||||
return (dim == null ? "*" : dim.location().toString()) + "#" + freq;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,10 +64,13 @@ public class WirelessSlaveLink {
|
|||
shutdown = false;
|
||||
distance = 0.0D;
|
||||
|
||||
if (master != null && !master.isEndpointRemoved() && master.getServerLevel() == level) {
|
||||
distance = Math.sqrt(master.getBlockPos().distSqr(host.getBlockPos()));
|
||||
boolean crossDim = ModConfigs.WIRELESS_CROSS_DIM_ENABLE.get();
|
||||
if (master != null && !master.isEndpointRemoved() && (crossDim || master.getServerLevel() == level)) {
|
||||
if (!crossDim) {
|
||||
distance = Math.sqrt(master.getBlockPos().distSqr(host.getBlockPos()));
|
||||
}
|
||||
double maxRange = ModConfigs.WIRELESS_MAX_RANGE.get();
|
||||
if (distance <= maxRange) {
|
||||
if (crossDim || distance <= maxRange) {
|
||||
// 保持/建立连接
|
||||
try {
|
||||
var current = connection.getConnection();
|
||||
|
|
@ -97,7 +100,7 @@ public class WirelessSlaveLink {
|
|||
shutdown = true; // 超出范围
|
||||
}
|
||||
} else {
|
||||
shutdown = true; // 无主或主端不可用/不同维度
|
||||
shutdown = true; // 无主或主端不可用
|
||||
}
|
||||
|
||||
// 需要关闭连接
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_all",
|
||||
"textures": {
|
||||
"all": "minecraft:block/iron_block"
|
||||
"all": "extendedae_plus:block/wireless_transceiver"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user