- Mesajlar
- 176
- En iyi cevaplar
- 0
- Beğeniler
- 180
- Puanları
- 330
- Ruh hali
konuya nasıl giriş yapıcam bulamadım o yüzden direk kodu atıyorum:
ben armor standler ile uğraşıyorum kafalarına block koyup görünmez yapıyorum, entityblock gibi bir şey oluyor ancak sorunum şu, kare olan blockların yönlerini çok saçma da olsa bi şekidle ayarladım directionutil in altında ki ifler ile ancak döndürülmüş blocklar ya da merdivenli, basamaklı olan blocklar için çok iyi çalıştığını söyleyemem biraz algoritma bilgimin eksikliğinden kaynaklı bir durum.
tam olarak yapmak istediğim şey hangi yöne bakıyorsam beni blockların en arka-merkez'e atması ve sırayla tüm armor standleri oluşturması, sadece SOUTH yönü için yaptım ancak diğer yönlerde çok değişik şeyler oluyor bunun için önerisi olan arkadaşlardan yardım istiyorum spigot a da açtım fakat pek bi verim alamadım iyi cevaplar gelmedi çözüm olarak.
eklentinin kaynak kodları için: Lol Turret bu konuyu inceleyebilirsiniz.
özet: armor standleri, baktığım yönü algılıycak ve shape sistemine uygun şekilde oluşturmak.
tag list: @Admicos @Schaffer79 @LifeMCServer @Bernard
matrisleri kullanmayı denedim fakat yazamadım kafamda ki şeyi
Java:
public class BaseStructureEntityShape implements StructureEntityShape {
private final double specialNumber = 0.375;
private final double specialNumber2 = 0.625;
private final Map<String, Entry<EulerAngle, Material>> shapeIdMap;
private final Map<Integer, Map<Integer, String[]>> roofShapeMap;
public BaseStructureEntityShape(Map<String, Entry<EulerAngle, Material>> shapeIdMap,
Map<Integer, Map<Integer, String[]>> roofShapeMap) {
this.shapeIdMap = shapeIdMap;
this.roofShapeMap = roofShapeMap;
}
@Override
public Structure createStructure(Location l) {
final List<StructureEntity> structureEntities = new ArrayList<>();
for (int roof : roofShapeMap.keySet()) {
Map<Integer, String[]> shapes = roofShapeMap.get(roof);
for (int li = 0; li < shapes.size(); li++) {
String[] ids = shapes.get(li);
for (int idi = 0; idi < ids.length; idi++) {
String id = String.valueOf(ids[idi]);
Entry<EulerAngle, Material> tempMap = shapeIdMap.get(id);
if (tempMap == null) continue;
if (tempMap.getValue() == Material.AIR) continue;
Material material = tempMap.getValue();
EulerAngle angle = tempMap.getKey();
double x = 0;
double y = calculate(roof) + specialNumber2;
double z = 0;
int distanceZ = (shapes.size() / 2) - li + 1;
int distanceX = (ids.length / 2) - idi + 1;
x = calculate(distanceX);
z = calculate(distanceZ);
DirectionUtil direction = DirectionUtil.SOUTH.getDoubleDirection(l);
if (direction == DirectionUtil.NORTH) {
z = -z;
} else if (direction == DirectionUtil.EAST) {
x = -x;
} else if (direction == DirectionUtil.NORTHEAST) {
z = -z;
} else if (direction == DirectionUtil.NORTHWEST) {
x = -x;
z = -z;
} else if (direction == DirectionUtil.SOUTHWEST) {
x = -x;
}
if (Math.toDegrees(angle.getX()) == 90 ||
Math.toDegrees(angle.getX()) == 270 ||
Math.toDegrees(angle.getX()) == -90) {
y += specialNumber2/2;
} else if (Math.toDegrees(angle.getX()) == 180 ||
Math.toDegrees(angle.getX()) == -180) {
y += specialNumber2;
}
structureEntities.add(new BaseStructureEntity(
material,
newLoc(l, x, y, z)).pose(angle));
}
}
}
return new BaseStructure(structureEntities.toArray(new StructureEntity[0]), l);
}
private Location newLoc(Location location, double x, double y, double z) {
return location.clone().add(x,y,z);
}
private double calculate(int index) {
double i = 0;
if (index > 0) {
i = index - index * specialNumber;
} else if (index < 0) {
i = index + index * -specialNumber;
}
return i - 2;
}
private int calculateSize() {
int i = 0;
for (Map<Integer, String[]> roofShapeMapValues : roofShapeMap.values()) {
for (String[] roofShapeMapValuesString : roofShapeMapValues.values()) {
for (String ids : roofShapeMapValuesString) {
Entry<EulerAngle, Material> tempMap = shapeIdMap.get(ids);
if (tempMap != null) {
if (tempMap.getValue() != Material.AIR) i++;
}
}
}
}
return i;
}
}
ben armor standler ile uğraşıyorum kafalarına block koyup görünmez yapıyorum, entityblock gibi bir şey oluyor ancak sorunum şu, kare olan blockların yönlerini çok saçma da olsa bi şekidle ayarladım directionutil in altında ki ifler ile ancak döndürülmüş blocklar ya da merdivenli, basamaklı olan blocklar için çok iyi çalıştığını söyleyemem biraz algoritma bilgimin eksikliğinden kaynaklı bir durum.
tam olarak yapmak istediğim şey hangi yöne bakıyorsam beni blockların en arka-merkez'e atması ve sırayla tüm armor standleri oluşturması, sadece SOUTH yönü için yaptım ancak diğer yönlerde çok değişik şeyler oluyor bunun için önerisi olan arkadaşlardan yardım istiyorum spigot a da açtım fakat pek bi verim alamadım iyi cevaplar gelmedi çözüm olarak.
eklentinin kaynak kodları için: Lol Turret bu konuyu inceleyebilirsiniz.
özet: armor standleri, baktığım yönü algılıycak ve shape sistemine uygun şekilde oluşturmak.
tag list: @Admicos @Schaffer79 @LifeMCServer @Bernard
matrisleri kullanmayı denedim fakat yazamadım kafamda ki şeyi
Son düzenleme: