Compare commits
3 commits
32bacc96e8
...
81fa6440a0
Author | SHA1 | Date | |
---|---|---|---|
81fa6440a0 | |||
6ad6550f5d | |||
0d87ca8f76 |
7 changed files with 53 additions and 19 deletions
|
@ -83,11 +83,16 @@ Issue messages that the player needs to read to keep playing, and that make an a
|
||||||
|
|
||||||
### Remote redstone
|
### Remote redstone
|
||||||
Adds a "gateway" item that are controlled over internet. \
|
Adds a "gateway" item that are controlled over internet. \
|
||||||
[RETSTONE.md for more info](/Minecon724/tweaks724/src/branch/master/RETSTONE.md)
|
[RETSTONE.md for more info](/Minecon724/tweaks724/src/branch/master/docs/RETSTONE.md)
|
||||||
|
|
||||||
### Knockback
|
### Knockback
|
||||||
Control knockback dealt by entities
|
Control knockback dealt by entities
|
||||||
|
|
||||||
|
### Kill switch
|
||||||
|
Quickly kills (terminates) the server on trigger, via command or HTTP request.
|
||||||
|
[KILLSWITCH.md for more info](/Minecon724/tweaks724/src/branch/master/docs/KILLSWITCH.md)
|
||||||
|
|
||||||
|
|
||||||
### Utility commands
|
### Utility commands
|
||||||
|
|
||||||
- `/ping` - displays player ping \
|
- `/ping` - displays player ping \
|
||||||
|
|
3
docs/README.md
Normal file
3
docs/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Here's the documentation.
|
||||||
|
|
||||||
|
Click above on a file to read more about a topic.
|
2
pom.xml
2
pom.xml
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--
|
<!--
|
||||||
~ Copyright (C) 2024 Minecon724
|
~ Copyright (C) 2025 Minecon724
|
||||||
~ Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
~ Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
||||||
~ in the project root for the full license text.
|
~ in the project root for the full license text.
|
||||||
-->
|
-->
|
||||||
|
|
|
@ -45,7 +45,7 @@ public record TweaksConfig(
|
||||||
boolean updaterEnabled,
|
boolean updaterEnabled,
|
||||||
|
|
||||||
boolean hardcoreEnabled,
|
boolean hardcoreEnabled,
|
||||||
float hardcoreChance,
|
double hardcoreChance,
|
||||||
|
|
||||||
boolean sleepEnabled,
|
boolean sleepEnabled,
|
||||||
boolean sleepInstant,
|
boolean sleepInstant,
|
||||||
|
@ -117,7 +117,7 @@ public record TweaksConfig(
|
||||||
boolean updaterEnabled = config.getBoolean("updater.enabled");
|
boolean updaterEnabled = config.getBoolean("updater.enabled");
|
||||||
|
|
||||||
boolean hardcoreEnabled = config.getBoolean("hardcore.enabled");
|
boolean hardcoreEnabled = config.getBoolean("hardcore.enabled");
|
||||||
float hardcoreChance = (float) config.getDouble("hardcore.chance");
|
double hardcoreChance = config.getDouble("hardcore.chance");
|
||||||
|
|
||||||
boolean sleepEnabled = config.getBoolean("sleep.enabled");
|
boolean sleepEnabled = config.getBoolean("sleep.enabled");
|
||||||
boolean sleepInstant = config.getBoolean("sleep.instant");
|
boolean sleepInstant = config.getBoolean("sleep.instant");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2024 Minecon724
|
* Copyright (C) 2025 Minecon724
|
||||||
* Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
* Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
||||||
* in the project root for the full license text.
|
* in the project root for the full license text.
|
||||||
*/
|
*/
|
||||||
|
@ -8,14 +8,40 @@ package eu.m724.tweaks.hardcore;
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
import com.comphenix.protocol.PacketType;
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
import com.comphenix.protocol.ProtocolLibrary;
|
||||||
import com.comphenix.protocol.events.*;
|
import com.comphenix.protocol.events.ListenerPriority;
|
||||||
|
import com.comphenix.protocol.events.PacketAdapter;
|
||||||
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
|
import com.comphenix.protocol.events.PacketEvent;
|
||||||
|
import eu.m724.tweaks.DebugLogger;
|
||||||
import eu.m724.tweaks.TweaksConfig;
|
import eu.m724.tweaks.TweaksConfig;
|
||||||
|
import net.minecraft.world.level.levelgen.RandomSupport;
|
||||||
|
import net.minecraft.world.level.levelgen.Xoroshiro128PlusPlus;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
|
// how we do it is much faster than any Random
|
||||||
public class HardcoreManager {
|
public class HardcoreManager {
|
||||||
private final float chance = TweaksConfig.getConfig().hardcoreChance();
|
private final double chance = TweaksConfig.getConfig().hardcoreChance();
|
||||||
|
|
||||||
|
private final long chanceLong = BigInteger.valueOf(Long.MIN_VALUE)
|
||||||
|
.add(
|
||||||
|
new BigDecimal(
|
||||||
|
BigInteger.valueOf(Long.MAX_VALUE).subtract(BigInteger.valueOf(Long.MIN_VALUE))
|
||||||
|
).multiply(
|
||||||
|
BigDecimal.valueOf(chance)
|
||||||
|
).toBigInteger()
|
||||||
|
).longValue();
|
||||||
|
|
||||||
|
private final Xoroshiro128PlusPlus rng = new Xoroshiro128PlusPlus(
|
||||||
|
RandomSupport.generateUniqueSeed(),
|
||||||
|
RandomSupport.generateUniqueSeed()
|
||||||
|
);
|
||||||
|
|
||||||
public void init(Plugin plugin) {
|
public void init(Plugin plugin) {
|
||||||
|
DebugLogger.fine("Chance long: " + chanceLong);
|
||||||
|
|
||||||
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(
|
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(
|
||||||
plugin,
|
plugin,
|
||||||
ListenerPriority.NORMAL,
|
ListenerPriority.NORMAL,
|
||||||
|
@ -24,9 +50,8 @@ public class HardcoreManager {
|
||||||
@Override
|
@Override
|
||||||
public void onPacketSending(PacketEvent event) {
|
public void onPacketSending(PacketEvent event) {
|
||||||
PacketContainer packet = event.getPacket();
|
PacketContainer packet = event.getPacket();
|
||||||
int entityId = packet.getIntegers().read(0);
|
|
||||||
|
|
||||||
if (chance > ((48271 * entityId) % 65537) / 65537f) // gotta be fast
|
if (rng.nextLong() < chanceLong)
|
||||||
// the "is hardcore" boolean https://wiki.vg/Protocol#Login_.28play.29
|
// the "is hardcore" boolean https://wiki.vg/Protocol#Login_.28play.29
|
||||||
packet.getBooleans().write(0, true);
|
packet.getBooleans().write(0, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2024 Minecon724
|
* Copyright (C) 2025 Minecon724
|
||||||
* Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
* Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
||||||
* in the project root for the full license text.
|
* in the project root for the full license text.
|
||||||
*/
|
*/
|
||||||
|
@ -19,26 +19,28 @@ import java.util.HashSet;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.CompletionException;
|
import java.util.concurrent.CompletionException;
|
||||||
|
import java.util.logging.Logger;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class UpdateChecker extends BukkitRunnable {
|
public class UpdateChecker extends BukkitRunnable {
|
||||||
|
private final Logger logger;
|
||||||
private final Set<VersionedResource> resources;
|
private final Set<VersionedResource> resources;
|
||||||
|
|
||||||
static final Set<VersionedResource> availableUpdates = new HashSet<>();
|
static final Set<VersionedResource> availableUpdates = new HashSet<>();
|
||||||
static LocalTime lastChecked = null;
|
static LocalTime lastChecked = null;
|
||||||
|
|
||||||
UpdateChecker(Set<VersionedResource> resources) {
|
UpdateChecker(Logger logger, Set<VersionedResource> resources) {
|
||||||
|
this.logger = logger;
|
||||||
this.resources = resources; // TODO make a copy?
|
this.resources = resources; // TODO make a copy?
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkAll() {
|
private void checkAll() {
|
||||||
//logger.info("Checking for updates");
|
DebugLogger.fine("Checking for updates");
|
||||||
lastChecked = LocalTime.now(ZoneOffset.UTC);
|
lastChecked = LocalTime.now(ZoneOffset.UTC);
|
||||||
availableUpdates.clear();
|
availableUpdates.clear();
|
||||||
|
|
||||||
for (VersionedResource versionedResource : Set.copyOf(resources)) {
|
for (VersionedResource versionedResource : Set.copyOf(resources)) {
|
||||||
String pluginName = versionedResource.resource().plugin().getName();
|
String pluginName = versionedResource.resource().plugin().getName();
|
||||||
//logger.info(versionedResource.resource().resourceId() + " " + versionedResource.resource().plugin().getName());
|
|
||||||
int page = versionedResource.running() != null ? versionedResource.running().page() : 1;
|
int page = versionedResource.running() != null ? versionedResource.running().page() : 1;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -46,14 +48,13 @@ public class UpdateChecker extends BukkitRunnable {
|
||||||
if (!versionedResource.equals(newResource)) {
|
if (!versionedResource.equals(newResource)) {
|
||||||
resources.remove(versionedResource);
|
resources.remove(versionedResource);
|
||||||
if (newResource.running() == null) {
|
if (newResource.running() == null) {
|
||||||
DebugLogger.info("Unable to find installed version of %s".formatted(pluginName));
|
logger.warning("Unable to find installed version of %s".formatted(pluginName));
|
||||||
if (versionedResource.running() != null) {
|
if (versionedResource.running() != null) {
|
||||||
DebugLogger.info("Did you downgrade %s? If so, clear cache".formatted(pluginName));
|
logger.warning("Did you downgrade %s? If so, clear cache".formatted(pluginName));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!newResource.running().equals(newResource.latest())) {
|
if (!newResource.running().equals(newResource.latest())) {
|
||||||
availableUpdates.add(newResource);
|
availableUpdates.add(newResource);
|
||||||
//logger.info("Update available for %s. %d -> %d".formatted(pluginName, newResource.running().updateId(), newResource.latest().updateId()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
resources.add(newResource);
|
resources.add(newResource);
|
||||||
|
@ -67,11 +68,11 @@ public class UpdateChecker extends BukkitRunnable {
|
||||||
private void alert() {
|
private void alert() {
|
||||||
int n = availableUpdates.size();
|
int n = availableUpdates.size();
|
||||||
if (n == 0) return;
|
if (n == 0) return;
|
||||||
DebugLogger.info(Language.getString("updateAvailableNotice", n));
|
logger.info(Language.getString("updateAvailableNotice", n));
|
||||||
|
|
||||||
availableUpdates.stream()
|
availableUpdates.stream()
|
||||||
.map(u -> "- %s (%s -> %s)".formatted(u.resource().name(), u.running().label(), u.latest().label()))
|
.map(u -> "- %s (%s -> %s)".formatted(u.resource().name(), u.running().label(), u.latest().label()))
|
||||||
.forEach(DebugLogger::info);
|
.forEach(logger::info);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -60,7 +60,7 @@ public class UpdaterManager {
|
||||||
)).collect(Collectors.toSet());
|
)).collect(Collectors.toSet());
|
||||||
|
|
||||||
|
|
||||||
new UpdateChecker(versionedResources)
|
new UpdateChecker(plugin.getLogger(), versionedResources)
|
||||||
.runTaskTimerAsynchronously(plugin, 600, 12 * 3600 * 20);
|
.runTaskTimerAsynchronously(plugin, 600, 12 * 3600 * 20);
|
||||||
|
|
||||||
updatesCommand.setExecutor(new UpdaterCommands());
|
updatesCommand.setExecutor(new UpdaterCommands());
|
||||||
|
|
Loading…
Reference in a new issue