use of org.spongepowered.common.util.PrettyPrinter in project SpongeCommon by SpongePowered.
the class PhasePrinter method printBlockTrackingException.
static void printBlockTrackingException(final PhaseTracker tracker, final PhaseContext<@NonNull ?> phaseData, final IPhaseState<@NonNull ?> phaseState, final Throwable e) {
if (!SpongeConfigs.getCommon().get().phaseTracker.verbose && !PhasePrinter.printedExceptionsForBlocks.isEmpty()) {
if (PhasePrinter.printedExceptionsForBlocks.contains(phaseState)) {
return;
}
}
final PrettyPrinter printer = new PrettyPrinter(60).add("Exception attempting to capture a block change!").centre().hr();
PhasePrinter.printPhasestack(tracker, phaseData, e, printer);
if (PhasePrinter.IN_DEVELOPMENT) {
printer.print(System.err);
} else {
printer.log(SpongeCommon.logger(), Level.ERROR);
}
if (!SpongeConfigs.getCommon().get().phaseTracker.verbose) {
PhasePrinter.printedExceptionsForBlocks.add(phaseState);
}
}
use of org.spongepowered.common.util.PrettyPrinter in project SpongeCommon by SpongePowered.
the class PhasePrinter method printRunAwayPhaseCompletion.
static void printRunAwayPhaseCompletion(final PhaseStack stack, final IPhaseState<@NonNull ?> state) {
if (!SpongeConfigs.getCommon().get().phaseTracker.verbose && !PhasePrinter.hasPrintedAboutRunnawayPhases) {
// Avoiding spam logs.
return;
}
final PrettyPrinter printer = new PrettyPrinter(60);
printer.add("Completing Phase").centre().hr();
printer.add("Detecting a runaway phase! Potentially a problem " + "where something isn't completing a phase!!! Sponge will stop printing" + "after three more times to avoid generating extra logs");
printer.add();
printer.add("%s : %s", "Completing phase", state);
printer.add(" Phases Remaining:");
PhasePrinter.printPhaseStackWithException(stack, printer, new Exception("RunawayPhase"));
if (PhasePrinter.IN_DEVELOPMENT) {
printer.print(System.err);
} else {
printer.log(SpongeCommon.logger(), Level.ERROR);
}
if (!SpongeConfigs.getCommon().get().phaseTracker.verbose && PhasePrinter.printRunawayCount++ > 3) {
PhasePrinter.hasPrintedAboutRunnawayPhases = true;
}
}
use of org.spongepowered.common.util.PrettyPrinter in project SpongeCommon by SpongePowered.
the class PhasePrinter method printNullSourceBlockNeighborNotificationWithNoTileSource.
static void printNullSourceBlockNeighborNotificationWithNoTileSource(final BlockPos pos, final Block blockIn, final BlockPos otherPos, final NullPointerException e) {
final PhaseTracker instance = PhaseTracker.getInstance();
final PrettyPrinter printer = new PrettyPrinter(60).add("Null Source Block on TileEntity!").centre().hr().addWrapped("Hey, Sponge is saving the game from crashing because a TileEntity " + "is sending out a 'null' Block as it's source (more likely) and " + "attempting to perform a neighbor notification with it. Because " + "this is guaranteed to lead to a crash or a spam of reports, " + "Sponge is going ahead and fixing the issue. The offending Tile " + "is unknown, so we don't have any way to configure a reporting for you").add().add("%s : %s", "Source position", pos).add("%s : %s", "Source TileEntity", "UNKNOWN").add("%s : %s", "Recovered using TileEntity as Source", "false").add("%s : %s", "Source Block Recovered", blockIn).add("%s : %s", "Notified Position", otherPos);
PhasePrinter.printPhaseStackWithException(instance.stack, printer, e);
printer.log(SpongeCommon.logger(), Level.WARN);
}
use of org.spongepowered.common.util.PrettyPrinter in project SpongeCommon by SpongePowered.
the class PhasePrinter method printAsyncEntitySpawn.
static void printAsyncEntitySpawn(final Entity entity) {
// We will DEFINITELY be doing bad things otherwise. We need to artificially capture here.
if (!SpongeConfigs.getCommon().get().phaseTracker.captureAsyncSpawningEntities) {
// Print a pretty warning about not capturing an async spawned entity, but don't care about spawning.
if (!SpongeConfigs.getCommon().get().phaseTracker.verbose) {
return;
}
// If we have, we don't want to print any more times.
if (!SpongeConfigs.getCommon().get().phaseTracker.verboseErrors && PhasePrinter.hasPrintedAsyncEntities) {
return;
}
// Otherwise, let's print out either the first time, or several more times.
final PrettyPrinter printer = new PrettyPrinter(60).add("Async Entity Spawn Warning").centre().hr().add("An entity was attempting to spawn off the \"main\" server thread").add().add("Details of the spawning are disabled according to the Sponge").add("configuration file. A stack trace of the attempted spawn should").add("provide information about how it was being spawned. Sponge is").add("currently configured to NOT attempt to capture this spawn and").add("spawn the entity at an appropriate time, while on the main server").add("thread.").add().add("Details of the spawn:").add("%s : %s", "Entity", entity).add("Stacktrace").add(new Exception("Async entity spawn attempt"));
if (PhasePrinter.IN_DEVELOPMENT) {
printer.print(System.err);
} else {
printer.log(SpongeCommon.logger(), Level.ERROR);
}
PhasePrinter.hasPrintedAsyncEntities = true;
return;
}
PhaseTracker.ASYNC_CAPTURED_ENTITIES.add((net.minecraft.world.entity.Entity) entity);
// Print a pretty warning about not capturing an async spawned entity, but don't care about spawning.
if (!SpongeConfigs.getCommon().get().phaseTracker.verbose) {
return;
}
// If we have, we don't want to print any more times.
if (!SpongeConfigs.getCommon().get().phaseTracker.verboseErrors && PhasePrinter.hasPrintedAsyncEntities) {
return;
}
// Otherwise, let's print out either the first time, or several more times.
final PrettyPrinter printer = new PrettyPrinter(60).add("Async Entity Spawn Warning").centre().hr().add("An entity was attempting to spawn off the \"main\" server thread").add().add("Delayed spawning is ENABLED for Sponge.").add("The entity is safely captured by Sponge while off the main").add("server thread, and therefore will be spawned the next tick.").add("Some cases where a mod is expecting the entity back while").add("async can cause issues with said mod.").add().add("Details of the spawn:").add("%s : %s", "Entity", entity).add("Stacktrace").add(new Exception("Async entity spawn attempt"));
if (PhasePrinter.IN_DEVELOPMENT) {
printer.print(System.err);
} else {
printer.log(SpongeCommon.logger(), Level.ERROR);
}
PhasePrinter.hasPrintedAsyncEntities = true;
}
use of org.spongepowered.common.util.PrettyPrinter in project SpongeCommon by SpongePowered.
the class SpongeGameProfileManager method close.
public void close() {
// Shut down the executor
this.gameLookupExecutorService.shutdown();
try {
if (!this.gameLookupExecutorService.awaitTermination(5, TimeUnit.SECONDS)) {
final List<Runnable> remaining = this.gameLookupExecutorService.shutdownNow();
new PrettyPrinter().add("Sponge game profile resolver failed to shut down in 5 seconds!").add("Remaining tasks:").addWithIndices(remaining).add("These tasks have been cancelled.").log(SpongeGameProfileManager.LOGGER, Level.WARN);
}
} catch (final InterruptedException e) {
SpongeGameProfileManager.LOGGER.error("The async scheduler was interrupted while awaiting shutdown!");
}
}
Aggregations