2018-10-31 01:39:51 +00:00
|
|
|
/*
|
|
|
|
* WorldEdit, a Minecraft world manipulation toolkit
|
|
|
|
* Copyright (C) sk89q <http://www.sk89q.com>
|
|
|
|
* Copyright (C) WorldEdit team and contributors
|
|
|
|
*
|
2020-08-25 01:31:47 +00:00
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
2018-10-31 01:39:51 +00:00
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
2020-08-25 01:31:47 +00:00
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
2018-10-31 01:39:51 +00:00
|
|
|
*
|
2020-08-25 01:31:47 +00:00
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
2018-10-31 01:39:51 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
package com.sk89q.worldedit;
|
|
|
|
|
2021-09-19 20:02:41 +00:00
|
|
|
import com.sk89q.worldedit.extension.platform.Actor;
|
2018-10-31 01:39:51 +00:00
|
|
|
import com.sk89q.worldedit.extent.inventory.BlockBag;
|
2021-12-20 21:12:04 +00:00
|
|
|
import com.sk89q.worldedit.internal.util.ErrorReporting;
|
2018-10-31 01:39:51 +00:00
|
|
|
import com.sk89q.worldedit.util.eventbus.EventBus;
|
|
|
|
import com.sk89q.worldedit.world.World;
|
|
|
|
|
2021-09-19 20:02:41 +00:00
|
|
|
import javax.annotation.Nullable;
|
2021-12-20 21:12:04 +00:00
|
|
|
import java.lang.ref.Cleaner;
|
2021-09-19 20:02:41 +00:00
|
|
|
|
2021-07-23 15:48:51 +00:00
|
|
|
/**
|
2021-09-19 20:02:41 +00:00
|
|
|
* Internal use only. Unused for now, but present in case upstream make it API.
|
2021-07-23 15:48:51 +00:00
|
|
|
*/
|
|
|
|
class TracedEditSession extends EditSession {
|
2018-10-31 01:39:51 +00:00
|
|
|
|
2021-12-20 21:12:04 +00:00
|
|
|
private static final Cleaner cleaner = Cleaner.create();
|
|
|
|
private final TraceRecord record;
|
|
|
|
private final Cleaner.Cleanable cleanable;
|
|
|
|
|
2021-09-19 20:02:41 +00:00
|
|
|
//FAWE start - does not work with FAWE's ways of doing things...
|
|
|
|
@Deprecated
|
|
|
|
//FAWE end
|
|
|
|
TracedEditSession(
|
|
|
|
EventBus eventBus, @Nullable World world, int maxBlocks, @Nullable BlockBag blockBag,
|
|
|
|
@Nullable Actor actor,
|
|
|
|
boolean tracing
|
|
|
|
) {
|
|
|
|
super(new EditSessionBuilder(eventBus)
|
|
|
|
.world(world)
|
|
|
|
.maxBlocks(maxBlocks)
|
|
|
|
.blockBag(blockBag)
|
|
|
|
.actor(actor)
|
|
|
|
.tracing(tracing));
|
2021-12-20 21:12:04 +00:00
|
|
|
this.record = new TraceRecord(actor);
|
|
|
|
this.cleanable = cleaner.register(this, record);
|
2021-09-19 20:02:41 +00:00
|
|
|
}
|
|
|
|
|
2021-12-20 21:12:04 +00:00
|
|
|
public void close() {
|
|
|
|
try {
|
|
|
|
super.close();
|
|
|
|
} finally {
|
|
|
|
this.record.committed = true;
|
|
|
|
cleanable.clean();
|
|
|
|
}
|
2018-10-31 01:39:51 +00:00
|
|
|
}
|
|
|
|
|
2021-12-20 21:12:04 +00:00
|
|
|
private static final class TraceRecord implements Runnable {
|
|
|
|
private final Throwable stacktrace = new Throwable("An EditSession was not closed.");
|
|
|
|
private final Actor actor;
|
2018-10-31 01:39:51 +00:00
|
|
|
|
2021-12-20 21:12:04 +00:00
|
|
|
private volatile boolean committed = false;
|
|
|
|
|
|
|
|
private TraceRecord(Actor actor) {
|
|
|
|
this.actor = actor;
|
|
|
|
}
|
2018-10-31 01:39:51 +00:00
|
|
|
|
2021-12-20 21:12:04 +00:00
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
if (!committed) {
|
|
|
|
WorldEdit.logger.warn("####### EDIT SESSION NOT CLOSED #######");
|
|
|
|
WorldEdit.logger.warn("This means that some code did not close their EditSession.");
|
|
|
|
WorldEdit.logger.warn("Here is a stacktrace from the creation of this EditSession:", stacktrace);
|
|
|
|
ErrorReporting.trigger(actor, stacktrace);
|
|
|
|
}
|
2018-10-31 01:39:51 +00:00
|
|
|
}
|
|
|
|
}
|
2021-07-24 15:34:05 +00:00
|
|
|
|
2018-10-31 01:39:51 +00:00
|
|
|
}
|