Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
Ursprung
a0c644dd1c
Commit
6c3ea5ccc7
@ -26,43 +26,34 @@ import net.minecraft.network.protocol.game.PacketPlayOutSpawnEntity;
|
||||
import net.minecraft.network.syncher.DataWatcher;
|
||||
import net.minecraft.network.syncher.DataWatcherObject;
|
||||
import net.minecraft.network.syncher.DataWatcherRegistry;
|
||||
import net.minecraft.tags.TagsBlock;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.entity.*;
|
||||
import net.minecraft.world.entity.item.EntityTNTPrimed;
|
||||
import net.minecraft.world.level.Explosion;
|
||||
import net.minecraft.world.level.ExplosionDamageCalculator;
|
||||
import net.minecraft.world.level.RayTrace;
|
||||
import net.minecraft.world.level.World;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.IBlockData;
|
||||
import net.minecraft.world.level.gameevent.GameEvent;
|
||||
import net.minecraft.world.phys.AxisAlignedBB;
|
||||
import net.minecraft.world.phys.MovingObjectPosition;
|
||||
import net.minecraft.world.phys.MovingObjectPositionBlock;
|
||||
import net.minecraft.world.phys.Vec3D;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.craftbukkit.v1_19_R1.SpigotTimings;
|
||||
import org.bukkit.entity.Explosive;
|
||||
import org.bukkit.entity.Vehicle;
|
||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
|
||||
import org.bukkit.event.vehicle.VehicleBlockCollisionEvent;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class FakeTNT19 extends EntityTNTPrimed {
|
||||
private static final DataWatcherObject<Integer> b;
|
||||
private static final int c = 80;
|
||||
private List<FakeTNT19> fakeTNT19s;
|
||||
private List<FakeTNT19> spawnList = new ArrayList<>();
|
||||
private int count;
|
||||
@Nullable
|
||||
public EntityLiving d;
|
||||
public float yield;
|
||||
public boolean isIncendiary;
|
||||
public int offset = 0;
|
||||
|
||||
public FakeTNT19(List<FakeTNT19> fakeTNT19s, EntityTypes<? extends EntityTNTPrimed> type, World world) {
|
||||
super(type, world);
|
||||
@ -72,17 +63,17 @@ public class FakeTNT19 extends EntityTNTPrimed {
|
||||
super.q = true;
|
||||
}
|
||||
|
||||
public FakeTNT19(List<FakeTNT19> fakeTNT19s, World world, double x, double y, double z, int tickoffset) {
|
||||
public FakeTNT19(List<FakeTNT19> fakeTNT19s, World world, double x, double y, double z, int fuse, int count) {
|
||||
this(fakeTNT19s, EntityTypes.av, world);
|
||||
this.e(x, y, z);
|
||||
double d3 = world.w.j() * 6.2831854820251465D;
|
||||
this.n(-Math.sin(d3) * 0.02D, 0.20000000298023224D, -Math.cos(d3) * 0.02D);
|
||||
this.a(tickoffset);
|
||||
this.a(fuse);
|
||||
super.t = x;
|
||||
super.u = y;
|
||||
super.v = z;
|
||||
this.d = null;
|
||||
this.offset = tickoffset;
|
||||
this.count = count;
|
||||
}
|
||||
|
||||
protected void a_() {
|
||||
@ -173,8 +164,7 @@ public class FakeTNT19 extends EntityTNTPrimed {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void k() {
|
||||
public void k(List<FakeTNT19> spawnList) {
|
||||
if (!this.aN()) {
|
||||
this.f(this.de().b(0.0D, -0.04D, 0.0D));
|
||||
}
|
||||
@ -196,6 +186,16 @@ public class FakeTNT19 extends EntityTNTPrimed {
|
||||
} else {
|
||||
this.aZ();
|
||||
}
|
||||
|
||||
if (i == 1 && count > 1) {
|
||||
for (int c = 0; c < count - 1; c++) {
|
||||
FakeTNT19 fakeTNT19 = new FakeTNT19(fakeTNT19s, this.s, this.dg(), this.di(), this.dm(), i, 1);
|
||||
fakeTNT19.y = this.y;
|
||||
fakeTNT19.f(new Vec3D(this.de().c, this.de().d, this.de().e));
|
||||
spawnList.add(fakeTNT19);
|
||||
}
|
||||
count = 1;
|
||||
}
|
||||
}
|
||||
|
||||
private void j1() {
|
||||
|
@ -79,10 +79,18 @@ public class SimulatorPreview19 implements SimulatorPreview {
|
||||
while(hasSomeLeft.get()) {
|
||||
hasSomeLeft.set(false);
|
||||
pairs.forEach(pair -> {
|
||||
if (pair.getValue() > 0) {
|
||||
SimulatorPreview.SimulatorPreviewTNTData previewTNTData = pair.getKey();
|
||||
if (!previewTNTData.isXVelocity() && !previewTNTData.isZVelocity()) {
|
||||
FakeTNT19 fakeTNT19 = new FakeTNT19(fakeTNT19s, WORLD, previewTNTData.getX(), previewTNTData.getY(), previewTNTData.getZ(), previewTNTData.getFuseTicks(), pair.getValue());
|
||||
TNTPrimed tntPrimed = (TNTPrimed) fakeTNT19.getBukkitEntity();
|
||||
if (!previewTNTData.isXVelocity()) tntPrimed.setVelocity(tntPrimed.getVelocity().setX(0));
|
||||
if (!previewTNTData.isYVelocity()) tntPrimed.setVelocity(tntPrimed.getVelocity().setY(0));
|
||||
if (!previewTNTData.isZVelocity()) tntPrimed.setVelocity(tntPrimed.getVelocity().setZ(0));
|
||||
fakeTNT19s.add(fakeTNT19);
|
||||
pair.setValue(0);
|
||||
} else if (pair.getValue() > 0) {
|
||||
hasSomeLeft.set(true);
|
||||
SimulatorPreview.SimulatorPreviewTNTData previewTNTData = pair.getKey();
|
||||
FakeTNT19 fakeTNT19 = new FakeTNT19(fakeTNT19s, WORLD, previewTNTData.getX(), previewTNTData.getY(), previewTNTData.getZ(), previewTNTData.getFuseTicks());
|
||||
FakeTNT19 fakeTNT19 = new FakeTNT19(fakeTNT19s, WORLD, previewTNTData.getX(), previewTNTData.getY(), previewTNTData.getZ(), previewTNTData.getFuseTicks(), 1);
|
||||
TNTPrimed tntPrimed = (TNTPrimed) fakeTNT19.getBukkitEntity();
|
||||
if (!previewTNTData.isXVelocity()) tntPrimed.setVelocity(tntPrimed.getVelocity().setX(0));
|
||||
if (!previewTNTData.isYVelocity()) tntPrimed.setVelocity(tntPrimed.getVelocity().setY(0));
|
||||
@ -101,17 +109,24 @@ public class SimulatorPreview19 implements SimulatorPreview {
|
||||
}
|
||||
|
||||
private void calculateTick(List<FakeTNT19> fakeTNT19s, Record record, Map<FakeTNT19, Record.TNTRecord> tntRecords) {
|
||||
Iterator<FakeTNT19> iterator = fakeTNT19s.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
FakeTNT19 fakeTNT19 = iterator.next();
|
||||
fakeTNT19.k();
|
||||
int i = 0;
|
||||
while (i < fakeTNT19s.size()) {
|
||||
List<FakeTNT19> spawnList = new ArrayList<>();
|
||||
FakeTNT19 fakeTNT19 = fakeTNT19s.get(i);
|
||||
fakeTNT19.k(spawnList);
|
||||
TNTPrimed tntPrimed = ((TNTPrimed) (fakeTNT19.getBukkitEntity()));
|
||||
if (tntPrimed.getFuseTicks() <= 0) {
|
||||
tntRecords.computeIfAbsent(fakeTNT19, ignore -> record.spawn()).explode(tntPrimed);
|
||||
iterator.remove();
|
||||
fakeTNT19s.remove(i);
|
||||
i--;
|
||||
} else {
|
||||
tntRecords.computeIfAbsent(fakeTNT19, ignore -> record.spawn()).explode(tntPrimed);
|
||||
}
|
||||
if (!spawnList.isEmpty()) {
|
||||
fakeTNT19s.addAll(i, spawnList);
|
||||
i += spawnList.size();
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,10 +19,10 @@
|
||||
|
||||
package de.steamwar.bausystem.features.simulator;
|
||||
|
||||
import de.steamwar.bausystem.features.simulator.show.PreviewEntityShowMode;
|
||||
import de.steamwar.bausystem.features.tracer.TNTPosition;
|
||||
import de.steamwar.bausystem.features.tracer.show.Record;
|
||||
import de.steamwar.bausystem.features.tracer.show.ShowModeParameter;
|
||||
import de.steamwar.bausystem.features.tracer.show.mode.TraceEntityShowMode;
|
||||
import de.steamwar.bausystem.shared.Pair;
|
||||
import de.steamwar.bausystem.shared.ShowMode;
|
||||
import lombok.experimental.UtilityClass;
|
||||
@ -57,7 +57,7 @@ public class SimulatorPreviewStorage {
|
||||
pair.getValue().add(player);
|
||||
|
||||
ShowModeParameter showModeParameter = new ShowModeParameter();
|
||||
TraceEntityShowMode showMode = new TraceEntityShowMode(player, showModeParameter);
|
||||
PreviewEntityShowMode showMode = new PreviewEntityShowMode(player, showModeParameter);
|
||||
pair.getKey().showAll(showMode);
|
||||
showModes.put(player, new Pair<>(tntSimulator, showMode));
|
||||
}
|
||||
|
@ -132,7 +132,9 @@ public class TNTSimulatorListener implements Listener {
|
||||
simulatorShowHide(e.getPlayer(), i -> null, PlayerInventory::getItemInMainHand, e.getPlayer().getLocation());
|
||||
} else {
|
||||
TNTSimulator tntSimulator = simulatorShowHide(e.getPlayer(), i -> null, PlayerInventory::getItemInOffHand, e.getPlayer().getLocation());
|
||||
if (tntSimulator != null) SimulatorPreviewStorage.show(e.getPlayer(), tntSimulator);
|
||||
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
|
||||
if (tntSimulator != null) SimulatorPreviewStorage.show(e.getPlayer(), tntSimulator);
|
||||
}, 10);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2022 SteamWar.de-Serverteam
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* 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 Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.bausystem.features.simulator.show;
|
||||
|
||||
import de.steamwar.bausystem.features.tracer.TNTPosition;
|
||||
import de.steamwar.bausystem.features.tracer.show.ShowModeParameter;
|
||||
import de.steamwar.bausystem.features.tracer.show.mode.FactoredEntityShowMode;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PreviewEntityShowMode extends FactoredEntityShowMode {
|
||||
|
||||
public PreviewEntityShowMode(Player player, ShowModeParameter showModeParameter) {
|
||||
super(player, showModeParameter, 10);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show(TNTPosition position) {
|
||||
if (position.getVelocity().lengthSquared() < 1) {
|
||||
return;
|
||||
}
|
||||
super.show(position);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hide() {
|
||||
super.hide();
|
||||
}
|
||||
}
|
In neuem Issue referenzieren
Einen Benutzer sperren