The Fisrt Updated
This commit is contained in:
300
1
Normal file
300
1
Normal file
@@ -0,0 +1,300 @@
|
||||
particle minecraft:totem_of_undying ~19.607843137254903 ~22.54901960784314 ~29.41176470588235 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-29.41176470588235 ~18.627450980392158 ~19.607843137254903 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~19.607843137254903 ~23.529411764705884 ~-23.529411764705884 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-35.294117647058826 ~22.54901960784314 ~-18.627450980392158 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~14.705882352941176 ~15.686274509803921 ~-11.764705882352942 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~19.215686274509803 ~22.098039215686274 ~28.823529411764707 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-28.823529411764707 ~18.254901960784313 ~19.215686274509803 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~19.215686274509803 ~23.058823529411764 ~-23.058823529411764 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-34.588235294117645 ~22.098039215686274 ~-18.254901960784313 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~14.411764705882353 ~15.372549019607844 ~-11.529411764705882 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~18.823529411764707 ~21.647058823529413 ~28.235294117647058 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-28.235294117647058 ~17.88235294117647 ~18.823529411764707 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~18.823529411764707 ~22.58823529411765 ~-22.58823529411765 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-33.88235294117647 ~21.647058823529413 ~-17.88235294117647 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~14.117647058823529 ~15.058823529411764 ~-11.294117647058824 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~18.431372549019606 ~21.19607843137255 ~27.647058823529413 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-27.647058823529413 ~17.509803921568626 ~18.431372549019606 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~18.431372549019606 ~22.11764705882353 ~-22.11764705882353 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-33.1764705882353 ~21.19607843137255 ~-17.509803921568626 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~13.823529411764707 ~14.745098039215687 ~-11.058823529411764 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~18.03921568627451 ~20.745098039215687 ~27.058823529411764 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-27.058823529411764 ~17.137254901960784 ~18.03921568627451 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~18.03921568627451 ~21.647058823529413 ~-21.647058823529413 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-32.470588235294116 ~20.745098039215687 ~-17.137254901960784 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~13.529411764705882 ~14.431372549019608 ~-10.823529411764707 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~17.647058823529413 ~20.294117647058822 ~26.470588235294116 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-26.470588235294116 ~16.764705882352942 ~17.647058823529413 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~17.647058823529413 ~21.176470588235293 ~-21.176470588235293 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-31.764705882352942 ~20.294117647058822 ~-16.764705882352942 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~13.235294117647058 ~14.117647058823529 ~-10.588235294117647 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~17.254901960784313 ~19.84313725490196 ~25.88235294117647 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-25.88235294117647 ~16.392156862745097 ~17.254901960784313 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~17.254901960784313 ~20.705882352941178 ~-20.705882352941178 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-31.058823529411764 ~19.84313725490196 ~-16.392156862745097 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~12.941176470588236 ~13.803921568627452 ~-10.352941176470589 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~16.862745098039216 ~19.392156862745097 ~25.294117647058822 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-25.294117647058822 ~16.019607843137255 ~16.862745098039216 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~16.862745098039216 ~20.235294117647058 ~-20.235294117647058 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-30.352941176470587 ~19.392156862745097 ~-16.019607843137255 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~12.647058823529411 ~13.490196078431373 ~-10.117647058823529 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~16.470588235294116 ~18.941176470588236 ~24.705882352941178 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-24.705882352941178 ~15.647058823529411 ~16.470588235294116 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~16.470588235294116 ~19.764705882352942 ~-19.764705882352942 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-29.647058823529413 ~18.941176470588236 ~-15.647058823529411 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~12.352941176470589 ~13.176470588235293 ~-9.882352941176471 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~16.07843137254902 ~18.490196078431374 ~24.11764705882353 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-24.11764705882353 ~15.274509803921568 ~16.07843137254902 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~16.07843137254902 ~19.294117647058822 ~-19.294117647058822 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-28.941176470588236 ~18.490196078431374 ~-15.274509803921568 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~12.058823529411764 ~12.862745098039216 ~-9.647058823529411 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~15.686274509803923 ~18.03921568627451 ~23.529411764705884 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-23.529411764705884 ~14.901960784313726 ~15.686274509803923 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~15.686274509803923 ~18.823529411764707 ~-18.823529411764707 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-28.235294117647058 ~18.03921568627451 ~-14.901960784313726 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~11.764705882352942 ~12.549019607843137 ~-9.411764705882353 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~15.294117647058822 ~17.588235294117645 ~22.941176470588236 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-22.941176470588236 ~14.529411764705882 ~15.294117647058822 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~15.294117647058822 ~18.352941176470587 ~-18.352941176470587 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-27.529411764705884 ~17.588235294117645 ~-14.529411764705882 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~11.470588235294118 ~12.235294117647058 ~-9.176470588235293 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~14.901960784313726 ~17.137254901960784 ~22.352941176470587 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-22.352941176470587 ~14.156862745098039 ~14.901960784313726 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~14.901960784313726 ~17.88235294117647 ~-17.88235294117647 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-26.823529411764703 ~17.137254901960784 ~-14.156862745098039 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~11.176470588235293 ~11.92156862745098 ~-8.941176470588236 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~14.509803921568627 ~16.686274509803923 ~21.764705882352942 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-21.764705882352942 ~13.784313725490197 ~14.509803921568627 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~14.509803921568627 ~17.411764705882355 ~-17.411764705882355 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-26.11764705882353 ~16.686274509803923 ~-13.784313725490197 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~10.882352941176471 ~11.607843137254902 ~-8.705882352941178 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~14.117647058823529 ~16.235294117647058 ~21.176470588235293 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-21.176470588235293 ~13.411764705882353 ~14.117647058823529 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~14.117647058823529 ~16.941176470588236 ~-16.941176470588236 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-25.41176470588235 ~16.235294117647058 ~-13.411764705882353 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~10.588235294117647 ~11.294117647058822 ~-8.470588235294118 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~13.725490196078432 ~15.784313725490197 ~20.588235294117645 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-20.588235294117645 ~13.03921568627451 ~13.725490196078432 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~13.725490196078432 ~16.470588235294116 ~-16.470588235294116 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-24.705882352941174 ~15.784313725490197 ~-13.03921568627451 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~10.294117647058822 ~10.980392156862745 ~-8.235294117647058 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~13.333333333333332 ~15.333333333333332 ~20.0 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-20.0 ~12.666666666666666 ~13.333333333333332 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~13.333333333333332 ~16.0 ~-16.0 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-24.0 ~15.333333333333332 ~-12.666666666666666 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~10.0 ~10.666666666666668 ~-8.0 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~12.941176470588236 ~14.882352941176471 ~19.411764705882355 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-19.411764705882355 ~12.294117647058822 ~12.941176470588236 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~12.941176470588236 ~15.529411764705882 ~-15.529411764705882 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-23.294117647058822 ~14.882352941176471 ~-12.294117647058822 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~9.705882352941178 ~10.352941176470589 ~-7.764705882352941 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~12.549019607843137 ~14.431372549019608 ~18.823529411764703 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-18.823529411764703 ~11.92156862745098 ~12.549019607843137 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~12.549019607843137 ~15.058823529411764 ~-15.058823529411764 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-22.588235294117645 ~14.431372549019608 ~-11.92156862745098 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~9.411764705882351 ~10.03921568627451 ~-7.529411764705882 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~12.156862745098039 ~13.980392156862745 ~18.235294117647058 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-18.235294117647058 ~11.549019607843137 ~12.156862745098039 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~12.156862745098039 ~14.588235294117647 ~-14.588235294117647 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-21.88235294117647 ~13.980392156862745 ~-11.549019607843137 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~9.117647058823529 ~9.725490196078432 ~-7.294117647058823 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~11.764705882352942 ~13.529411764705882 ~17.647058823529413 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-17.647058823529413 ~11.176470588235293 ~11.764705882352942 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~11.764705882352942 ~14.117647058823529 ~-14.117647058823529 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-21.176470588235293 ~13.529411764705882 ~-11.176470588235293 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~8.823529411764707 ~9.411764705882353 ~-7.0588235294117645 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~11.372549019607844 ~13.07843137254902 ~17.058823529411764 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-17.058823529411764 ~10.803921568627452 ~11.372549019607844 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~11.372549019607844 ~13.647058823529411 ~-13.647058823529411 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-20.470588235294116 ~13.07843137254902 ~-10.803921568627452 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~8.529411764705882 ~9.098039215686274 ~-6.823529411764706 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~10.980392156862745 ~12.627450980392156 ~16.470588235294116 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-16.470588235294116 ~10.431372549019608 ~10.980392156862745 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~10.980392156862745 ~13.176470588235293 ~-13.176470588235293 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-19.76470588235294 ~12.627450980392156 ~-10.431372549019608 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~8.235294117647058 ~8.784313725490197 ~-6.588235294117647 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~10.588235294117647 ~12.176470588235293 ~15.882352941176471 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-15.882352941176471 ~10.058823529411764 ~10.588235294117647 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~10.588235294117647 ~12.705882352941178 ~-12.705882352941178 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-19.058823529411764 ~12.176470588235293 ~-10.058823529411764 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~7.9411764705882355 ~8.470588235294118 ~-6.352941176470589 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~10.196078431372548 ~11.72549019607843 ~15.294117647058822 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-15.294117647058822 ~9.686274509803921 ~10.196078431372548 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~10.196078431372548 ~12.23529411764706 ~-12.23529411764706 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-18.352941176470587 ~11.72549019607843 ~-9.686274509803921 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~7.647058823529411 ~8.156862745098039 ~-6.11764705882353 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~9.803921568627452 ~11.274509803921568 ~14.705882352941176 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-14.705882352941176 ~9.313725490196077 ~9.803921568627452 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~9.803921568627452 ~11.764705882352942 ~-11.764705882352942 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-17.64705882352941 ~11.274509803921568 ~-9.313725490196077 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~7.352941176470588 ~7.843137254901961 ~-5.882352941176471 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~9.411764705882353 ~10.823529411764707 ~14.117647058823529 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-14.117647058823529 ~8.941176470588236 ~9.411764705882353 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~9.411764705882353 ~11.294117647058824 ~-11.294117647058824 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-16.941176470588236 ~10.823529411764707 ~-8.941176470588236 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~7.0588235294117645 ~7.529411764705882 ~-5.647058823529412 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~9.019607843137255 ~10.372549019607844 ~13.52941176470588 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-13.52941176470588 ~8.568627450980392 ~9.019607843137255 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~9.019607843137255 ~10.823529411764707 ~-10.823529411764707 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-16.235294117647058 ~10.372549019607844 ~-8.568627450980392 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~6.76470588235294 ~7.215686274509803 ~-5.411764705882353 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~8.627450980392156 ~9.92156862745098 ~12.941176470588236 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-12.941176470588236 ~8.196078431372548 ~8.627450980392156 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~8.627450980392156 ~10.352941176470589 ~-10.352941176470589 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-15.52941176470588 ~9.92156862745098 ~-8.196078431372548 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~6.470588235294118 ~6.901960784313726 ~-5.176470588235294 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~8.23529411764706 ~9.470588235294118 ~12.352941176470587 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-12.352941176470587 ~7.8235294117647065 ~8.23529411764706 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~8.23529411764706 ~9.882352941176471 ~-9.882352941176471 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-14.823529411764703 ~9.470588235294118 ~-7.8235294117647065 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~6.1764705882352935 ~6.588235294117647 ~-4.9411764705882355 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~7.843137254901961 ~9.019607843137255 ~11.764705882352942 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-11.764705882352942 ~7.450980392156863 ~7.843137254901961 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~7.843137254901961 ~9.411764705882353 ~-9.411764705882353 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-14.117647058823529 ~9.019607843137255 ~-7.450980392156863 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~5.882352941176471 ~6.274509803921569 ~-4.705882352941177 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~7.450980392156863 ~8.568627450980392 ~11.176470588235293 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-11.176470588235293 ~7.078431372549019 ~7.450980392156863 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~7.450980392156863 ~8.941176470588236 ~-8.941176470588236 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-13.411764705882351 ~8.568627450980392 ~-7.078431372549019 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~5.588235294117647 ~5.96078431372549 ~-4.470588235294118 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~7.0588235294117645 ~8.117647058823529 ~10.588235294117645 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-10.588235294117645 ~6.705882352941176 ~7.0588235294117645 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~7.0588235294117645 ~8.470588235294118 ~-8.470588235294118 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-12.705882352941174 ~8.117647058823529 ~-6.705882352941176 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~5.2941176470588225 ~5.647058823529411 ~-4.235294117647059 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~6.666666666666666 ~7.666666666666666 ~10.0 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-10.0 ~6.333333333333332 ~6.666666666666666 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~6.666666666666666 ~8.0 ~-8.0 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-12.0 ~7.666666666666666 ~-6.333333333333332 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~5.0 ~5.333333333333334 ~-4.0 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~6.274509803921569 ~7.215686274509803 ~9.411764705882351 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-9.411764705882351 ~5.96078431372549 ~6.274509803921569 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~6.274509803921569 ~7.529411764705884 ~-7.529411764705884 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-11.294117647058822 ~7.215686274509803 ~-5.96078431372549 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~4.705882352941176 ~5.019607843137255 ~-3.764705882352942 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~5.882352941176471 ~6.764705882352942 ~8.823529411764707 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-8.823529411764707 ~5.588235294117647 ~5.882352941176471 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~5.882352941176471 ~7.0588235294117645 ~-7.0588235294117645 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-10.588235294117645 ~6.764705882352942 ~-5.588235294117647 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~4.411764705882353 ~4.7058823529411775 ~-3.5294117647058822 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~5.490196078431373 ~6.313725490196077 ~8.235294117647058 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-8.235294117647058 ~5.215686274509803 ~5.490196078431373 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~5.490196078431373 ~6.5882352941176485 ~-6.5882352941176485 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-9.882352941176467 ~6.313725490196077 ~-5.215686274509803 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~4.117647058823529 ~4.392156862745098 ~-3.2941176470588243 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~5.098039215686274 ~5.862745098039216 ~7.6470588235294095 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-7.6470588235294095 ~4.843137254901961 ~5.098039215686274 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~5.098039215686274 ~6.117647058823529 ~-6.117647058823529 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-9.176470588235293 ~5.862745098039216 ~-4.843137254901961 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~3.8235294117647047 ~4.078431372549019 ~-3.0588235294117645 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~4.7058823529411775 ~5.4117647058823515 ~7.0588235294117645 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-7.0588235294117645 ~4.470588235294118 ~4.7058823529411775 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~4.7058823529411775 ~5.647058823529413 ~-5.647058823529413 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-8.470588235294116 ~5.4117647058823515 ~-4.470588235294118 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~3.5294117647058822 ~3.764705882352942 ~-2.8235294117647065 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~4.313725490196079 ~4.96078431372549 ~6.470588235294116 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-6.470588235294116 ~4.098039215686274 ~4.313725490196079 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~4.313725490196079 ~5.1764705882352935 ~-5.1764705882352935 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-7.7647058823529385 ~4.96078431372549 ~-4.098039215686274 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~3.235294117647058 ~3.450980392156863 ~-2.5882352941176467 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~3.9215686274509807 ~4.509803921568626 ~5.882352941176471 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-5.882352941176471 ~3.7254901960784306 ~3.9215686274509807 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~3.9215686274509807 ~4.7058823529411775 ~-4.7058823529411775 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-7.0588235294117645 ~4.509803921568626 ~-3.7254901960784306 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~2.9411764705882355 ~3.137254901960784 ~-2.3529411764705888 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~3.529411764705884 ~4.0588235294117645 ~5.2941176470588225 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-5.2941176470588225 ~3.352941176470587 ~3.529411764705884 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~3.529411764705884 ~4.235294117647058 ~-4.235294117647058 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-6.352941176470587 ~4.0588235294117645 ~-3.352941176470587 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~2.6470588235294112 ~2.8235294117647065 ~-2.117647058823529 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~3.137254901960784 ~3.6078431372549034 ~4.705882352941174 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-4.705882352941174 ~2.980392156862745 ~3.137254901960784 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~3.137254901960784 ~3.764705882352942 ~-3.764705882352942 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-5.6470588235294095 ~3.6078431372549034 ~-2.980392156862745 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~2.352941176470587 ~2.5098039215686274 ~-1.882352941176471 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~2.745098039215687 ~3.1568627450980387 ~4.117647058823529 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-4.117647058823529 ~2.6078431372549034 ~2.745098039215687 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~2.745098039215687 ~3.2941176470588225 ~-3.2941176470588225 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-4.941176470588232 ~3.1568627450980387 ~-2.6078431372549034 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~2.0588235294117645 ~2.1960784313725483 ~-1.6470588235294112 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~2.352941176470587 ~2.7058823529411775 ~3.5294117647058805 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-3.5294117647058805 ~2.235294117647058 ~2.352941176470587 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~2.352941176470587 ~2.8235294117647065 ~-2.8235294117647065 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-4.235294117647058 ~2.7058823529411775 ~-2.235294117647058 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~1.7647058823529402 ~1.882352941176471 ~-1.4117647058823533 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~1.9607843137254903 ~2.254901960784313 ~2.9411764705882355 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-2.9411764705882355 ~1.8627450980392162 ~1.9607843137254903 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~1.9607843137254903 ~2.352941176470587 ~-2.352941176470587 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-3.529411764705877 ~2.254901960784313 ~-1.8627450980392162 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~1.4705882352941178 ~1.568627450980392 ~-1.1764705882352935 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~1.5686274509803937 ~1.8039215686274517 ~2.352941176470587 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-2.352941176470587 ~1.4901960784313708 ~1.5686274509803937 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~1.5686274509803937 ~1.882352941176471 ~-1.882352941176471 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-2.823529411764703 ~1.8039215686274517 ~-1.4901960784313708 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~1.1764705882352935 ~1.2549019607843146 ~-0.9411764705882355 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~1.1764705882352935 ~1.352941176470587 ~1.764705882352942 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-1.764705882352942 ~1.117647058823529 ~1.1764705882352935 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~1.1764705882352935 ~1.411764705882355 ~-1.411764705882355 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-2.117647058823529 ~1.352941176470587 ~-1.117647058823529 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~0.882352941176471 ~0.9411764705882355 ~-0.7058823529411775 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~0.7843137254901968 ~0.9019607843137258 ~1.1764705882352935 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-1.1764705882352935 ~0.7450980392156872 ~0.7843137254901968 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~0.7843137254901968 ~0.9411764705882355 ~-0.9411764705882355 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-1.411764705882348 ~0.9019607843137258 ~-0.7450980392156872 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~0.5882352941176467 ~0.6274509803921564 ~-0.47058823529411775 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~0.39215686274509665 ~0.45098039215686114 ~0.588235294117645 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-0.588235294117645 ~0.3725490196078418 ~0.39215686274509665 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~0.39215686274509665 ~0.47058823529411953 ~-0.47058823529411953 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~-0.705882352941174 ~0.45098039215686114 ~-0.3725490196078418 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~0.2941176470588225 ~0.3137254901960791 ~-0.23529411764705976 0 0 0 0.7 1000 force @a
|
||||
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.7 1000 force @a
|
||||
1
1 copy.json
Normal file
1
1 copy.json
Normal file
File diff suppressed because one or more lines are too long
37
CFAB copy 2.py
Normal file
37
CFAB copy 2.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import Mil
|
||||
|
||||
|
||||
summon_pos=[
|
||||
Mil.Milib.RelativePos("~20", "~23", "~30"),
|
||||
Mil.Milib.RelativePos("~-30", "~19", "~20"),
|
||||
Mil.Milib.RelativePos("~20", "~24", "~-24"),
|
||||
Mil.Milib.RelativePos("~-36", "~23", "~-19"),
|
||||
Mil.Milib.RelativePos("~15", "~16", "~-12")
|
||||
]
|
||||
|
||||
GC_NUMBER = 5000
|
||||
COMMAND_BLOCK_POS=Mil.Milib.RelativePos("~", "~", "~")
|
||||
ADAS=["@a"]
|
||||
|
||||
class _CFAB(Mil.MCROCN):
|
||||
def __init__(self, host, password, port, debug=True):
|
||||
super().__init__(host, password, port, debug=debug)
|
||||
def Start(self):
|
||||
self.StartDraw()
|
||||
def StartDraw(self):
|
||||
r=Mil.Milib._Pos1ToPos2(summon_pos[0], COMMAND_BLOCK_POS, 50, )
|
||||
r2=Mil.Milib._Pos1ToPos2(summon_pos[1], COMMAND_BLOCK_POS, 50, )
|
||||
r3=Mil.Milib._Pos1ToPos2(summon_pos[2], COMMAND_BLOCK_POS, 50, )
|
||||
r4=Mil.Milib._Pos1ToPos2(summon_pos[3], COMMAND_BLOCK_POS, 50, )
|
||||
r5=Mil.Milib._Pos1ToPos2(summon_pos[4], COMMAND_BLOCK_POS, 50, )
|
||||
merged = []
|
||||
for q,w,e,r,t,y in zip(r, r2, r3, r4, r5,[COMMAND_BLOCK_POS]*50):
|
||||
merged.extend([q,w,e,r,t,y])
|
||||
f=open("./1", "w", encoding="UTF-8")
|
||||
f.write("\n".join([self.Particle("minecraft:totem_of_undying", i, Mil.Milib.Delta(), 0.7, 1000, "force", "@a", astext=True).command for i in merged]))
|
||||
f.close()
|
||||
|
||||
CFAB=_CFAB(host="mc.gvsds.com", password="1234567890114514", port=25566)
|
||||
if not CFAB.Connect(): exit()
|
||||
CFAB.Start()
|
||||
CFAB.disconnect()
|
||||
200
CFAB copy.py
Normal file
200
CFAB copy.py
Normal file
@@ -0,0 +1,200 @@
|
||||
import Mil
|
||||
import random
|
||||
import time
|
||||
import os
|
||||
from threading import Thread
|
||||
|
||||
|
||||
def asyncs(f):
|
||||
def wrapper(*args, **kwargs):
|
||||
thr = Thread(target = f, args = args, kwargs = kwargs)
|
||||
thr.start()
|
||||
return wrapper
|
||||
|
||||
#Command the fantastic adventure of the block
|
||||
|
||||
# 186 64 -216
|
||||
# 188 64 -173
|
||||
# 212 64 -216
|
||||
# 228 64 -188
|
||||
# 247 64 -229
|
||||
|
||||
summon_pos=[
|
||||
Mil.Milib.RelativePos(186, 64, -216),
|
||||
Mil.Milib.RelativePos(188, 64, -173),
|
||||
Mil.Milib.RelativePos(228, 64, -188),
|
||||
Mil.Milib.RelativePos(247, 64, -229),
|
||||
Mil.Milib.RelativePos(212, 64, -216)
|
||||
]
|
||||
# NV_NUMBER = 1000
|
||||
|
||||
GC_NUMBER = 5000
|
||||
COMMAND_BLOCK_POS=Mil.Milib.RelativePos(208, 108, -204)
|
||||
ADAS=["MXYYSH1"]
|
||||
|
||||
class _CFAB(Mil.MCROCN):
|
||||
def __init__(self, host, password, port, debug=True):
|
||||
super().__init__(host, password, port, debug=debug)
|
||||
|
||||
def Start(self):
|
||||
#self.StartStory()
|
||||
#CFAB.Bossbar("add", "minecraft:100", '[{"text":"==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"},{{"text":"1000","color":"red"},{"text":" \u5973\u5deb","color":"dark_red"},{"text":"\u5927\u8d5b","color":"dark_green"},{"text":" \u751f\u6210","color":"gold"},{"text":"\u8fdb\u5ea6","color":"green"},{"text":" ==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"}]')
|
||||
#CFAB.Bossbar("set", "minecraft:100", "color", "red")
|
||||
#CFAB.Bossbar("set", "minecraft:100", "max", "1000")
|
||||
#CFAB.Bossbar("set", "minecraft:100", "style", "notched_20")
|
||||
#CFAB.Bossbar("set", "minecraft:100", "players", "@a")
|
||||
#CFAB.Bossbar("set", "minecraft:100", "visible", "true")
|
||||
r=Mil.Milib._Pos1ToPos2(summon_pos[0], COMMAND_BLOCK_POS, 30)
|
||||
r2=Mil.Milib._Pos1ToPos2(summon_pos[1], COMMAND_BLOCK_POS, 30)
|
||||
r3=Mil.Milib._Pos1ToPos2(summon_pos[2], COMMAND_BLOCK_POS, 30)
|
||||
r4=Mil.Milib._Pos1ToPos2(summon_pos[3], COMMAND_BLOCK_POS, 30)
|
||||
r5=Mil.Milib._Pos1ToPos2(summon_pos[4], COMMAND_BLOCK_POS, 30)
|
||||
merged = []
|
||||
for q,w,e,r,t,y in zip(r, r2, r3, r4, r5,[COMMAND_BLOCK_POS]*30):
|
||||
merged.extend([q,w,e,r,t,y])
|
||||
for s in range(3):
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {summon_pos[0]}")
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {summon_pos[1]}")
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {summon_pos[2]}")
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {summon_pos[3]}")
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {summon_pos[4]}")
|
||||
_=0
|
||||
for _i, i in zip(range(len(merged)), merged):
|
||||
if _i % 10 == 0: self.PlaySoundWith("minecraft:block.anvil.use", ADAS)
|
||||
self.Particle("minecraft:end_rod", i, Mil.Milib.Delta(), 0.2, 30, "force", "@a")
|
||||
self.PlaySoundWith("minecraft:item.totem.use", ADAS)
|
||||
time.sleep(0.5)
|
||||
self.PlaySoundWith("minecraft:entity.elder_guardian.curse", ADAS)
|
||||
self.PlaySoundWith("minecraft:entity.elder_guardian.curse", ADAS)
|
||||
time.sleep(1)
|
||||
for i in range(5):
|
||||
self.PlaySoundWith("minecraft:entity.wither.spawn", ADAS, 10)
|
||||
time.sleep(1)
|
||||
self.PlaySoundWith("minecraft:item.totem.use", ADAS)
|
||||
time.sleep(1)
|
||||
for i in range(10):
|
||||
|
||||
self.Particle("minecraft:explosion", COMMAND_BLOCK_POS, Mil.Milib.Delta(10, 10, 10), 1, 100, "force", "@a")
|
||||
time.sleep(0.5)
|
||||
|
||||
|
||||
def StartStory(self):
|
||||
self.TellRawAll({"text": "古老的传说在方块世界深处回响...", "color": "green"});time.sleep(5)
|
||||
self.TellRawAll([{"text": "那是一个由", "color": "green"},
|
||||
{"text": " 纯粹指令之力 ","color":"yellow"},
|
||||
{"text": "构筑的领域。", "color": "green"},
|
||||
{"text": " RCON ", "color": "red"},
|
||||
{"text": "和", "color": "green"},
|
||||
{"text": " MCOMMAND ", "color": "red"},
|
||||
{"text": "化为", "color": "green"},
|
||||
{"text": "黑紫色", "color": "black"},
|
||||
{"text": "的", "color": "green"},
|
||||
{"text": "混沌", "color": "black"},
|
||||
{"text": "交织", "color": "red"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "一个", "color": "green"},
|
||||
{"text": "年近古稀的老人", "color": "yellow"},
|
||||
{"text": "翻开了老旧的书页,为他的重孙子念起故事,", "color": "green"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "沉寂的文字", "color": "black"},
|
||||
{"text": "在", "color": "green"},
|
||||
{"text": "空中", "color": "blue"},
|
||||
{"text": "回想", "color": "yellow"},
|
||||
{"text": ",仿佛将老人又带回那天...", "color": "green"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "三十年前,", "color": "green"},
|
||||
{"text": "命令方块", "color": "orange"},
|
||||
{"text": "失控的夜晚,", "color": "green"},
|
||||
{"text": "紫黑色", "color": "black"},
|
||||
{"text": "的", "color": "green"},
|
||||
{"text": "代码", "color": "green"},
|
||||
{"text": "洪流吞没了村庄。", "color": "black"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "他亲眼看见妻子的围裙被数据乱流撕成粉末,儿子的铁剑在抵挡", "color": "green"},
|
||||
{"text": "凋灵风暴", "color": "black"},
|
||||
{"text": "时断成两截。"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "最后只有他抱着尚在襁褓的孙子,蜷缩在", "color": "green"},
|
||||
{"text": "基岩裂缝", "color": "black"},
|
||||
{"text": "里熬到黎明。", "color": "green"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "屋外刮起一阵风声,老人突然冲出门去,看着天上", "color": "green"},
|
||||
{"text": "紫黑色的暗影。", "color": "black"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "他开始呢喃着:难道是它又回来了?TERVIRUS,Command_Block,MCRCON,还没结束吗?", "color": "red"}]);time.sleep(10)
|
||||
self.TellRawAll([{"text": "勇敢的冒险者啊……你脚下", "color": "green"},
|
||||
{"text": "圣洁的土地", "color": "white"},
|
||||
{"text": "已被", "color": "green"},
|
||||
{"text": "混沌", "color": "block"},
|
||||
{"text": "侵蚀。", "color": "red"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "命令方块", "color": "orange"},
|
||||
{"text": ",这", "color": "green"},
|
||||
{"text": "创造", "color": "blue"},
|
||||
{"text": "与", "color": "green"},
|
||||
{"text": "毁灭", "color": "red"},
|
||||
{"text": "的源头,正源源不断地", "color": "green"},
|
||||
{"text": "扭曲现实", "color": "red"},
|
||||
{"text": ",唤出你从未见过的", "color": "green"},
|
||||
{"text": "可怖生灵。", "color": "black"}]);time.sleep(5)
|
||||
self.TellRawAll({"text": "它们从数据深渊中爬出,带着不属于这个世界的狂暴与诡谲。而你,是被选中之人。", "color": "green"});time.sleep(5)
|
||||
self.TellRawAll({"text": "▌试炼开启", "color": "red"});time.sleep(5)
|
||||
self.TellRawAll({"text": "你的剑刃将劈开由代码生成的暗影,你的箭矢将击穿违背常理的怪物洪流。", "color": "black"});time.sleep(5)
|
||||
self.TellRawAll({"text": "每一波攻势都是命令方块对你生命的嘲弄,而每一次生存都是向终极真相迈进的烙印。", "color": "black"});time.sleep(5)
|
||||
self.TellRawAll({"text": "▌最终使命", "color": "red"});time.sleep(5)
|
||||
self.TellRawAll({"text": "当最后一头扭曲造物在你面前崩解成闪烁的粒子,", "color": "black"});time.sleep(5)
|
||||
self.TellRawAll({"text": "那悬浮于虚空中的命令方块将显露真容——摧毁它,终结这场疯狂的循环。", "color": "black"});time.sleep(5)
|
||||
self.TellRawAll({"text": "但小心……或许它早已为你准备了最后的", "color": "red"});time.sleep(5)
|
||||
self.TellRawAll({"text": "惊喜", "color": "red"});time.sleep(5)
|
||||
self.TellRawAll({"text": ">> 世界能否回归宁静,皆系于你一念之间 <<", "color": "green"});time.sleep(5)
|
||||
|
||||
|
||||
|
||||
|
||||
CFAB=_CFAB(host="mc.gvsds.com", password="1234567890114514", port=25566)
|
||||
if not CFAB.Connect(): exit()
|
||||
|
||||
CFAB.Start()
|
||||
|
||||
CFAB.disconnect()
|
||||
|
||||
os._exit(0)
|
||||
|
||||
|
||||
CFAB.Bossbar("add", "minecraft:1", '[{"text":"==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"},{"text":" 2","color":"blue"},{"text":"v","color":"yellow"},{"text":"1000","color":"red"},{"text":" \u5973\u5deb","color":"dark_red"},{"text":"\u5927\u8d5b","color":"dark_green"},{"text":" \u751f\u6210","color":"gold"},{"text":"\u8fdb\u5ea6","color":"green"},{"text":" ==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"}]')
|
||||
CFAB.Bossbar("set", "minecraft:1", "color", "red")
|
||||
CFAB.Bossbar("set", "minecraft:1", "max", "1000")
|
||||
CFAB.Bossbar("set", "minecraft:1", "style", "notched_20")
|
||||
CFAB.Bossbar("set", "minecraft:1", "players", "@a")
|
||||
CFAB.Bossbar("set", "minecraft:1", "visible", "true")
|
||||
for _ in range(10, -1, -1):
|
||||
CFAB.SbSpeak("赛方", f"{_} 秒后开始生成")
|
||||
time.sleep(1)
|
||||
# 滚啊看nm呢
|
||||
B=20
|
||||
SummonCount=(B-1)*50
|
||||
for i in range(B, 20+1):
|
||||
CFAB.SbSpeak("赛方", f"开始生成第 {i} 波女巫,请选手准备迎敌!")
|
||||
CFAB.SetTitle("@a", f"第 {i} 波!", "red")
|
||||
StartRandomTime=random.uniform(0.0, 2.0)
|
||||
LastRandomTime=StartRandomTime + random.uniform(0, 10.0)
|
||||
for _ in range(10):
|
||||
RPos = random.choice(summon_pos)
|
||||
CFAB.SbSpeak("赛方", f"有一小波女巫生成在了 {RPos}")
|
||||
for _ in range(5):
|
||||
CFAB._RunCommand(f"summon minecraft:witch {RPos}")
|
||||
SummonCount+=1
|
||||
CFAB.Bossbar("set", "minecraft:1", "value", f"{SummonCount}")
|
||||
time.sleep(random.uniform(StartRandomTime, LastRandomTime))
|
||||
CFAB.SbSpeak("赛方", f"第 {i} 波女巫生成已结束,{"本次比赛已结束" if i == 20 else ("开始 300 秒 中场休息" if i == 10 else "开始 210 秒休息。")}")
|
||||
time.sleep(0 if i == 20 else (270 if i == 10 else 190))
|
||||
if i != 20:
|
||||
CFAB.SbSpeak("赛方", "还有30秒。")
|
||||
time.sleep(20)
|
||||
CFAB.SbSpeak("赛方", "最后10秒,做好准备!")
|
||||
time.sleep(10)
|
||||
CFAB.SbSpeak("赛方", "生成已结束!请迅速解决剩余残孽。")
|
||||
CFAB.SetTitle("@a", "生成完毕!", "green")
|
||||
com=input("OK?> ")
|
||||
if com == "Y":
|
||||
CFAB.SbSpeak("赛方", "恭喜各位完成本次比赛!!!")
|
||||
time.sleep(5)
|
||||
CFAB.SbSpeak("赛方", f"诸位凭借自己的实力赢得了 {GC_NUMBER} GC!")
|
||||
else:
|
||||
CFAB.SbSpeakRaw("赛方", "对不起,你们失败了!", "red")
|
||||
time.sleep(5)
|
||||
CFAB.SbSpeak("赛方", "我们下次再见!")
|
||||
time.sleep(5)
|
||||
CFAB.SbSpeak("赛方", "我正式宣布比赛结束!")
|
||||
231
CFAB.py
Normal file
231
CFAB.py
Normal file
@@ -0,0 +1,231 @@
|
||||
import Mil
|
||||
import random
|
||||
import time
|
||||
import os
|
||||
from threading import Thread
|
||||
|
||||
|
||||
def asyncs(f):
|
||||
def wrapper(*args, **kwargs):
|
||||
thr = Thread(target = f, args = args, kwargs = kwargs)
|
||||
thr.start()
|
||||
return wrapper
|
||||
|
||||
#Command the fantastic adventure of the block
|
||||
|
||||
# 186 64 -216
|
||||
# 188 64 -173
|
||||
# 212 64 -216
|
||||
# 228 64 -188
|
||||
# 247 64 -229
|
||||
|
||||
summon_pos=[
|
||||
Mil.Milib.RelativePos(186, 64, -216),
|
||||
Mil.Milib.RelativePos(188, 64, -173),
|
||||
Mil.Milib.RelativePos(228, 64, -188),
|
||||
Mil.Milib.RelativePos(247, 64, -229),
|
||||
Mil.Milib.RelativePos(212, 64, -216)
|
||||
]
|
||||
# NV_NUMBER = 1000
|
||||
|
||||
GC_NUMBER = 5000
|
||||
COMMAND_BLOCK_POS=Mil.Milib.RelativePos(208, 108, -204)
|
||||
ADAS=["@a"]
|
||||
|
||||
class _CFAB(Mil.MCROCN):
|
||||
def __init__(self, host, password, port, debug=True):
|
||||
super().__init__(host, password, port, debug=debug)
|
||||
|
||||
def Start(self):
|
||||
self.StartStory()
|
||||
self.StartDraw()
|
||||
c=Mil.Milib._Pos1ToPos2DrawPi(Mil.Milib.RelativePos(195, 108, -204), Mil.Milib.RelativePos(188, 108 -204), 100)
|
||||
for i in c:
|
||||
self.Particle("minecraft:end_rod", i, Mil.Milib.Delta(), 0.2, 30, "force", "@a")
|
||||
#CFAB.Bossbar("add", "minecraft:100", '[{"text":"==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"},{{"text":"1000","color":"red"},{"text":" \u5973\u5deb","color":"dark_red"},{"text":"\u5927\u8d5b","color":"dark_green"},{"text":" \u751f\u6210","color":"gold"},{"text":"\u8fdb\u5ea6","color":"green"},{"text":" ==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"}]')
|
||||
#CFAB.Bossbar("set", "minecraft:100", "color", "red")
|
||||
#CFAB.Bossbar("set", "minecraft:100", "max", "1000")
|
||||
#CFAB.Bossbar("set", "minecraft:100", "style", "notched_20")
|
||||
#CFAB.Bossbar("set", "minecraft:100", "players", "@a")
|
||||
#CFAB.Bossbar("set", "minecraft:100", "visible", "true")
|
||||
#s=Mil.Milib._Pos1ToPos2()
|
||||
def StartDraw(self):
|
||||
r=Mil.Milib._Pos1ToPos2(summon_pos[0], COMMAND_BLOCK_POS, 15)
|
||||
r2=Mil.Milib._Pos1ToPos2(summon_pos[1], COMMAND_BLOCK_POS, 15)
|
||||
r3=Mil.Milib._Pos1ToPos2(summon_pos[2], COMMAND_BLOCK_POS, 15)
|
||||
r4=Mil.Milib._Pos1ToPos2(summon_pos[3], COMMAND_BLOCK_POS, 15)
|
||||
r5=Mil.Milib._Pos1ToPos2(summon_pos[4], COMMAND_BLOCK_POS, 15)
|
||||
merged = []
|
||||
for q,w,e,r,t,y in zip(r, r2, r3, r4, r5,[COMMAND_BLOCK_POS]*15):
|
||||
merged.extend([q,w,e,r,t,y])
|
||||
for s in range(5):
|
||||
if s != 0:
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {summon_pos[0]}")
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {summon_pos[1]}")
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {summon_pos[2]}")
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {summon_pos[3]}")
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {summon_pos[4]}")
|
||||
self.Particle("minecraft:entity_effect", summon_pos[0], Mil.Milib.Delta(5, 0 ,5), 1, 10000, "force", "@a")
|
||||
_=0
|
||||
for _i, i in zip(range(len(merged)), merged):
|
||||
if _i < 5 and s != 0:
|
||||
self.PlaySoundWith("minecraft:item.totem.use", ADAS)
|
||||
self.Particle("minecraft:totem_of_undying", i, Mil.Milib.Delta(), 0.7, 1000, "force", "@a")
|
||||
if i == COMMAND_BLOCK_POS:
|
||||
self.Particle("minecraft:totem_of_undying", i, Mil.Milib.Delta(), 2, 1000, "force", "@a")
|
||||
continue
|
||||
#if _i % 10 == 0: self.PlaySoundWith("minecraft:block.anvil.use", ADAS)
|
||||
self.Particle("minecraft:end_rod", i, Mil.Milib.Delta(), 0.2, 30, "force", "@a")
|
||||
for i in range(5):
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {COMMAND_BLOCK_POS}")
|
||||
self.PlaySoundWith("block.end_portal_frame.fill", ADAS)
|
||||
self.PlaySoundWith("block.end_portal_frame.fill", ADAS)
|
||||
self.PlaySoundWith("block.end_portal_frame.fill", ADAS)
|
||||
self.PlaySoundWith("block.end_portal_frame.fill", ADAS)
|
||||
self.PlaySoundWith("block.end_portal_frame.fill", ADAS)
|
||||
time.sleep(0.5)
|
||||
self.PlaySoundWith("minecraft:entity.elder_guardian.curse", ADAS)
|
||||
for _ in range(5):
|
||||
for i in summon_pos:
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {i}")
|
||||
for i in range(5):
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {COMMAND_BLOCK_POS}")
|
||||
self.PlaySoundWith("minecraft:item.totem.use", ADAS)
|
||||
self.Particle("minecraft:totem_of_undying", COMMAND_BLOCK_POS, Mil.Milib.Delta(), 2, 1000, "force", "@a")
|
||||
self.PlaySoundWith("minecraft:entity.elder_guardian.curse", ADAS)
|
||||
time.sleep(1)
|
||||
self.Particle("minecraft:explosion", COMMAND_BLOCK_POS, Mil.Milib.Delta(10, 10, 10), 1, 100, "force", "@a")
|
||||
time.sleep(1)
|
||||
for i in range(5):
|
||||
self.PlaySoundWith("minecraft:entity.wither.spawn", ADAS)
|
||||
time.sleep(1)
|
||||
self.Particle("minecraft:totem_of_undying", COMMAND_BLOCK_POS, Mil.Milib.Delta(), 2, 1000, "force", "@a")
|
||||
self.PlaySoundWith("minecraft:item.totem.use", ADAS)
|
||||
time.sleep(1)
|
||||
self._RunCommand(f"summon minecraft:lightning_bolt {COMMAND_BLOCK_POS}")
|
||||
self.Particle("minecraft:totem_of_undying", COMMAND_BLOCK_POS, Mil.Milib.Delta(), 2, 1000, "force", "@a")
|
||||
time.sleep(0.5)
|
||||
self.Particle("minecraft:nautilus", COMMAND_BLOCK_POS, Mil.Milib.Delta(2, 2, 2), 2, 10000, "force", "@a")
|
||||
|
||||
|
||||
def StartStory(self):
|
||||
self.TellRawAll({"text": "古老的传说在方块世界深处回响...", "color": "green"});time.sleep(5)
|
||||
self.TellRawAll([{"text": "那是一个由", "color": "green"},
|
||||
{"text": " 纯粹指令之力 ","color":"yellow"},
|
||||
{"text": "构筑的领域。", "color": "green"},
|
||||
{"text": " RCON ", "color": "red"},
|
||||
{"text": "和", "color": "green"},
|
||||
{"text": " MCOMMAND ", "color": "red"},
|
||||
{"text": "化为", "color": "green"},
|
||||
{"text": "黑紫色", "color": "black"},
|
||||
{"text": "的", "color": "green"},
|
||||
{"text": "混沌", "color": "black"},
|
||||
{"text": "交织", "color": "red"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "一个", "color": "green"},
|
||||
{"text": "年近古稀的老人", "color": "yellow"},
|
||||
{"text": "翻开了老旧的书页,为他的重孙子念起故事,", "color": "green"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "沉寂的文字", "color": "black"},
|
||||
{"text": "在", "color": "green"},
|
||||
{"text": "空中", "color": "blue"},
|
||||
{"text": "回想", "color": "yellow"},
|
||||
{"text": ",仿佛将老人又带回那天...", "color": "green"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "三十年前,", "color": "green"},
|
||||
{"text": "命令方块", "color": "orange"},
|
||||
{"text": "失控的夜晚,", "color": "green"},
|
||||
{"text": "紫黑色", "color": "black"},
|
||||
{"text": "的", "color": "green"},
|
||||
{"text": "代码", "color": "green"},
|
||||
{"text": "洪流吞没了村庄。", "color": "black"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "他亲眼看见妻子的围裙被数据乱流撕成粉末,儿子的铁剑在抵挡", "color": "green"},
|
||||
{"text": "凋灵风暴", "color": "black"},
|
||||
{"text": "时断成两截。"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "最后只有他抱着尚在襁褓的孙子,蜷缩在", "color": "green"},
|
||||
{"text": "基岩裂缝", "color": "black"},
|
||||
{"text": "里熬到黎明。", "color": "green"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "屋外刮起一阵风声,老人突然冲出门去,看着天上", "color": "green"},
|
||||
{"text": "紫黑色的暗影。", "color": "black"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "他开始呢喃着:难道是它又回来了?TERVIRUS,Command_Block,MCRCON,还没结束吗?", "color": "red"}]);time.sleep(10)
|
||||
self.TellRawAll([{"text": "勇敢的冒险者啊……你脚下", "color": "green"},
|
||||
{"text": "圣洁的土地", "color": "white"},
|
||||
{"text": "已被", "color": "green"},
|
||||
{"text": "混沌", "color": "block"},
|
||||
{"text": "侵蚀。", "color": "red"}]);time.sleep(5)
|
||||
self.TellRawAll([{"text": "命令方块", "color": "orange"},
|
||||
{"text": ",这", "color": "green"},
|
||||
{"text": "创造", "color": "blue"},
|
||||
{"text": "与", "color": "green"},
|
||||
{"text": "毁灭", "color": "red"},
|
||||
{"text": "的源头,正源源不断地", "color": "green"},
|
||||
{"text": "扭曲现实", "color": "red"},
|
||||
{"text": ",唤出你从未见过的", "color": "green"},
|
||||
{"text": "可怖生灵。", "color": "black"}]);time.sleep(5)
|
||||
self.TellRawAll({"text": "它们从数据深渊中爬出,带着不属于这个世界的狂暴与诡谲。而你,是被选中之人。", "color": "green"});time.sleep(5)
|
||||
self.TellRawAll({"text": "▌试炼开启", "color": "red"});time.sleep(5)
|
||||
self.TellRawAll({"text": "你的剑刃将劈开由代码生成的暗影,你的箭矢将击穿违背常理的怪物洪流。", "color": "black"});time.sleep(5)
|
||||
self.TellRawAll({"text": "每一波攻势都是命令方块对你生命的嘲弄,而每一次生存都是向终极真相迈进的烙印。", "color": "black"});time.sleep(5)
|
||||
self.TellRawAll({"text": "▌最终使命", "color": "red"});time.sleep(5)
|
||||
self.TellRawAll({"text": "当最后一头扭曲造物在你面前崩解成闪烁的粒子,", "color": "black"});time.sleep(5)
|
||||
self.TellRawAll({"text": "那悬浮于虚空中的命令方块将显露真容——摧毁它,终结这场疯狂的循环。", "color": "black"});time.sleep(5)
|
||||
self.TellRawAll({"text": "但小心……或许它早已为你准备了最后的", "color": "red"});time.sleep(5)
|
||||
self.TellRawAll({"text": "惊喜", "color": "red"});time.sleep(5)
|
||||
self.TellRawAll({"text": ">> 世界能否回归宁静,皆系于你一念之间 <<", "color": "green"});time.sleep(5)
|
||||
|
||||
|
||||
|
||||
|
||||
CFAB=_CFAB(host="mc.gvsds.com", password="1Qq@1Qq@190*", port=25566)
|
||||
CFAB.connect()
|
||||
# if not CFAB.Connect(): exit()
|
||||
|
||||
CFAB.Start()
|
||||
|
||||
CFAB.disconnect()
|
||||
|
||||
os._exit(0)
|
||||
|
||||
|
||||
CFAB.Bossbar("add", "minecraft:1", '[{"text":"==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"},{"text":" 2","color":"blue"},{"text":"v","color":"yellow"},{"text":"1000","color":"red"},{"text":" \u5973\u5deb","color":"dark_red"},{"text":"\u5927\u8d5b","color":"dark_green"},{"text":" \u751f\u6210","color":"gold"},{"text":"\u8fdb\u5ea6","color":"green"},{"text":" ==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"}]')
|
||||
CFAB.Bossbar("set", "minecraft:1", "color", "red")
|
||||
CFAB.Bossbar("set", "minecraft:1", "max", "1000")
|
||||
CFAB.Bossbar("set", "minecraft:1", "style", "notched_20")
|
||||
CFAB.Bossbar("set", "minecraft:1", "players", "@a")
|
||||
CFAB.Bossbar("set", "minecraft:1", "visible", "true")
|
||||
for _ in range(10, -1, -1):
|
||||
CFAB.SbSpeak("赛方", f"{_} 秒后开始生成")
|
||||
time.sleep(1)
|
||||
# 滚啊看nm呢
|
||||
B=20
|
||||
SummonCount=(B-1)*50
|
||||
for i in range(B, 20+1):
|
||||
CFAB.SbSpeak("赛方", f"开始生成第 {i} 波女巫,请选手准备迎敌!")
|
||||
CFAB.SetTitle("@a", f"第 {i} 波!", "red")
|
||||
StartRandomTime=random.uniform(0.0, 2.0)
|
||||
LastRandomTime=StartRandomTime + random.uniform(0, 10.0)
|
||||
for _ in range(10):
|
||||
RPos = random.choice(summon_pos)
|
||||
CFAB.SbSpeak("赛方", f"有一小波女巫生成在了 {RPos}")
|
||||
for _ in range(5):
|
||||
CFAB._RunCommand(f"summon minecraft:witch {RPos}")
|
||||
SummonCount+=1
|
||||
CFAB.Bossbar("set", "minecraft:1", "value", f"{SummonCount}")
|
||||
time.sleep(random.uniform(StartRandomTime, LastRandomTime))
|
||||
CFAB.SbSpeak("赛方", f"第 {i} 波女巫生成已结束,{"本次比赛已结束" if i == 20 else ("开始 300 秒 中场休息" if i == 10 else "开始 210 秒休息。")}")
|
||||
time.sleep(0 if i == 20 else (270 if i == 10 else 190))
|
||||
if i != 20:
|
||||
CFAB.SbSpeak("赛方", "还有30秒。")
|
||||
time.sleep(20)
|
||||
CFAB.SbSpeak("赛方", "最后10秒,做好准备!")
|
||||
time.sleep(10)
|
||||
CFAB.SbSpeak("赛方", "生成已结束!请迅速解决剩余残孽。")
|
||||
CFAB.SetTitle("@a", "生成完毕!", "green")
|
||||
com=input("OK?> ")
|
||||
if com == "Y":
|
||||
CFAB.SbSpeak("赛方", "恭喜各位完成本次比赛!!!")
|
||||
time.sleep(5)
|
||||
CFAB.SbSpeak("赛方", f"诸位凭借自己的实力赢得了 {GC_NUMBER} GC!")
|
||||
else:
|
||||
CFAB.SbSpeakRaw("赛方", "对不起,你们失败了!", "red")
|
||||
time.sleep(5)
|
||||
CFAB.SbSpeak("赛方", "我们下次再见!")
|
||||
time.sleep(5)
|
||||
CFAB.SbSpeak("赛方", "我正式宣布比赛结束!")
|
||||
189
CreateE_Server.py
Normal file
189
CreateE_Server.py
Normal file
@@ -0,0 +1,189 @@
|
||||
import Mil
|
||||
import random
|
||||
import time
|
||||
import os
|
||||
|
||||
class CreateE_Server(Mil.MCROCN):
|
||||
def __init__(self, host, password, port, debug=True):
|
||||
super().__init__(host, password, port, debug=debug)
|
||||
|
||||
|
||||
CreateE_User=CreateE_Server(host="mc.gvsds.com", password="1Qq@1Qq@190*", port=25567)
|
||||
if not CreateE_User.Connect(): exit()
|
||||
|
||||
#CreateE_User.Speak(f"{"="*5} Welcome to use CreateE_Server SYSTEM {"="*5}", "green")
|
||||
#CreateE_User.Speak("<CreateE_Server> The Python program has connected to the RCON port at 25566")
|
||||
|
||||
|
||||
# CreateE_User.SetTitle("@a", "CreateE Server")
|
||||
|
||||
#print(CreateE_User.Execute("as", "@a", "at", "@s", "run", CreateE_User.Particle("minecraft:lava", RelativePos(), Delta(), 1, 100, "force", "@a", astext=True), astext=False))
|
||||
|
||||
#while True:
|
||||
# CreateE_User.Execute("as", "MXYYSH2", "at", "@s", "run", CreateE_User.Particle("minecraft:end_rod", RelativePos(f"~", f"~", f"~"), Delta(), 0, 1, "force", "@a", astext=True))
|
||||
|
||||
|
||||
# 参数设置
|
||||
#num_points = 1000 # 点数
|
||||
#theta_max = 2 * np.pi # 旋转角度范围
|
||||
#height_max = 20 # 最大高度
|
||||
|
||||
# 生成参数t从0到1
|
||||
#t = np.linspace(0, 1, num_points)
|
||||
|
||||
# 计算螺旋线坐标
|
||||
#theta = theta_max * t # 角度
|
||||
#z = height_max * t # 高度线性增加
|
||||
#r = z # 半径随高度增加而增加(锥形螺旋)
|
||||
#x = r * np.cos(theta)
|
||||
#y = r * np.sin(theta)
|
||||
|
||||
# 将坐标组合成数组
|
||||
#spiral_points = np.column_stack((x, y, z))
|
||||
|
||||
# 打印前10个点
|
||||
#for i in range(1000):
|
||||
# _=spiral_points[i]
|
||||
# x, y, z=_[0], _[1], _[2]
|
||||
# print(CreateE_User.Execute("as", "MXYYSH1", "at", "@s", "run", CreateE_User.Particle("minecraft:end_rod", RelativePos(f"~{x}", f"~{y+20}", f"~{z}"), Delta(), 0, 1, "force", "@a", astext=True), astext=False))
|
||||
|
||||
#print(CreateE_User.Execute("as", "yrzd6", "at", "@s", "run", CreateE_User.Particle("minecraft:end_rod", Mil.RelativePos(f"~", f"~", f"~"), Mil.Delta(), 10, 10000, "force", "@a", astext=True), astext=False))
|
||||
|
||||
#user="@a"
|
||||
#for i in range(500, -1, -1):
|
||||
# if i % 2 == 0: CreateE_User.SetTitle(user, "I SEE U", "red")
|
||||
# CreateE_User.SetSubTitle(user, f"I'm Looking For U, So Hide Well! Count {i}", "red")
|
||||
# time.sleep(0.2)
|
||||
#time.sleep(1)
|
||||
#CreateE_User.SetTitle(user, "0", "red")
|
||||
#CreateE_User.SetSubTitle(user, "0", "red")
|
||||
|
||||
#time.sleep(5)
|
||||
#CreateE_User.Execute("as", "@a", "at", "@s", "run", "tp @s ~ ~100 ~")
|
||||
#time.sleep(5)
|
||||
#CreateE_User.Execute("as", "@a", "at", "@s", "run", "kill @s")
|
||||
#_=CreateE_User.Data("get", "entity", "MXYYSH1")
|
||||
#CreateE_User.Gamemode("creative")
|
||||
|
||||
#201 68 -275
|
||||
#201 68 -237
|
||||
|
||||
#for i in range(2369, 2750):
|
||||
# CreateE_User.Particle("minecraft:lava", Mil.RelativePos(f"201", f"66", f"-{i/10}"), Mil.Delta(), 1, 100, "force", "@a", astext=False)
|
||||
|
||||
#CreateE_User.Weather("clear")
|
||||
|
||||
#215 81 -368
|
||||
#200 90 -373
|
||||
#198 69 -362
|
||||
|
||||
#256 66 -174
|
||||
#254 62 -183
|
||||
|
||||
#s=Mil.Milib._Pos1ToPos2WithPoints(600, 0,
|
||||
# Mil.Milib.RelativePos(276, 83, -175),
|
||||
# Mil.Milib.RelativePos(218, 63, -189),
|
||||
# Mil.Milib.RelativePos(189, 73, -161)
|
||||
# )
|
||||
|
||||
#s=Mil.Milib._Pos1ToPos2WithPoints(50, 0,
|
||||
# Mil.Milib.RelativePos(256, 66, -174),
|
||||
# Mil.Milib.RelativePos(254, 62, -183),
|
||||
# )
|
||||
#print(s)
|
||||
|
||||
#for i in s:
|
||||
# print(i.x, i.y, i.z)
|
||||
# CreateE_User.Particle("minecraft:end_rod", Mil.Milib.RelativePos(f"{i.x}", f"{i.y}", f"{i.z}"), Mil.Milib.Delta(), 0, 150, "force", "@a", astext=False)
|
||||
#for i in range(3000):
|
||||
# CreateE_User.Execute("as", "yrzd6", "at", "@s", "facing", Mil.Milib.LocalCoordinatesPos("^1", "^", "^"), "run", CreateE_User.Tp(Mil.Milib.RelativePos(), astext=True))
|
||||
|
||||
#while True:
|
||||
# CreateE_User.Kill("@e[type=tnt]")
|
||||
|
||||
|
||||
#s=CreateE_User.Data("get", "entity", "MXYYSH1")
|
||||
summon_pos=[
|
||||
Mil.Milib.RelativePos(95, 81, 3),
|
||||
Mil.Milib.RelativePos(146, 81, 15),
|
||||
Mil.Milib.RelativePos(96, 81, 38),
|
||||
Mil.Milib.RelativePos(65, 81, -1),
|
||||
]
|
||||
# NV_NUMBER = 1000
|
||||
|
||||
GC_NUMBER = 10000
|
||||
|
||||
'''
|
||||
CreateE_User.SbSpeakRaw("赛方", [{"text":"========== 本次 ", "color":"green"}, {"text":"1v300女巫大赛", "color":"red"}, {"text":" 即将开始 ==========", "color":"green"}])
|
||||
time.sleep(5)
|
||||
CreateE_User.SbSpeak("赛方", "请各位稍安勿躁。")
|
||||
time.sleep(5)
|
||||
CreateE_User.SbSpeak("赛方", "本次比赛由选手 zhui_er 和 300 只女巫进行比拼。")
|
||||
time.sleep(5)
|
||||
CreateE_User.SbSpeak("赛方", f"胜利后每人可获得 { GC_NUMBER } GC(游戏货币),用于购买游戏商店内的优质物品。")
|
||||
time.sleep(6)
|
||||
CreateE_User.SbSpeak("赛方", "失败后每人可获得 50 + 250 * 波数 GC(游戏货币),用于购买游戏商店内的优质物品。")
|
||||
time.sleep(6)
|
||||
CreateE_User.SbSpeak("赛方", "允许使用药水、盾牌等,不允许使用飞行、作弊、挖掘、放置、TNT等明显破坏平衡性的功能。")
|
||||
time.sleep(7)
|
||||
CreateE_User.SbSpeak("赛方", "如果死亡不可复活。")
|
||||
time.sleep(5)
|
||||
CreateE_User.SbSpeak("赛方", "女巫总共有6波,每波50只女巫,每波会随机生成十小波,每小波女巫有5只女巫间隔随机时间 0-10 秒生成,每波间隔三分钟。")
|
||||
time.sleep(5)
|
||||
CreateE_User.SbSpeak("赛方", "本页面程序由 CreateE 《 基于 Python 的 我的世界 RCON 核心支持库(Mil Minecraft RCON Core Library For Python)》 和 其作者 TermiNexus(MXYYSH1)的大力支持")
|
||||
time.sleep(10)
|
||||
CreateE_User.SbSpeak("赛方", "我宣布,本次比赛正式开始,十秒后开始生成")
|
||||
CreateE_User.Bossbar("add", "minecraft:1", '[{"text":"==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"},{"text":" 1","color":"blue"},{"text":"v","color":"yellow"},{"text":"300","color":"red"},{"text":" \u5973\u5deb","color":"dark_red"},{"text":"\u5927\u8d5b","color":"dark_green"},{"text":" \u751f\u6210","color":"gold"},{"text":"\u8fdb\u5ea6","color":"green"},{"text":" ==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"}]')
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "color", "red")
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "max", "300")
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "style", "notched_20")
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "players", "@a")
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "visible", "true")
|
||||
for _ in range(10, -1, -1):
|
||||
CreateE_User.SbSpeak("赛方", f"{_} 秒后开始生成")
|
||||
time.sleep(1)'''
|
||||
|
||||
CreateE_User.Bossbar("add", "minecraft:1", '[{"text":"==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"},{"text":" 1","color":"blue"},{"text":"v","color":"yellow"},{"text":"300","color":"red"},{"text":" \u5973\u5deb","color":"dark_red"},{"text":"\u5927\u8d5b","color":"dark_green"},{"text":" \u751f\u6210","color":"gold"},{"text":"\u8fdb\u5ea6","color":"green"},{"text":" ==","color":"red"},{"text":"====","obfuscated":true,"color":"red"},{"text":"==","color":"red"}]')
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "color", "red")
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "max", "300")
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "style", "notched_20")
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "players", "@a")
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "visible", "true")
|
||||
|
||||
|
||||
B=1
|
||||
SummonCount=(B-1)*10
|
||||
for i in range(B, 6+1):
|
||||
CreateE_User.SbSpeak("赛方", f"开始生成第 {i} 波女巫,请选手准备迎敌!")
|
||||
CreateE_User.SetTitle("@a", f"第 {i} 波!", "red")
|
||||
StartRandomTime=random.uniform(0.0, 2.0)
|
||||
LastRandomTime=StartRandomTime + random.uniform(0, 10.0)
|
||||
for _ in range(5):
|
||||
RPos = random.choice(summon_pos)
|
||||
CreateE_User.SbSpeak("赛方", f"有一小波女巫生成在了 {RPos}")
|
||||
for _ in range(5):
|
||||
CreateE_User._RunCommand(f"execute in myid:1 run summon minecraft:witch {RPos}")
|
||||
SummonCount+=1
|
||||
CreateE_User.Bossbar("set", "minecraft:1", "value", f"{SummonCount}")
|
||||
time.sleep(random.uniform(StartRandomTime, LastRandomTime))
|
||||
CreateE_User.SbSpeak("赛方", f"第 {i} 波女巫生成已结束,{"本次比赛已结束" if i == 20 else ("开始 300 秒 中场休息" if i == 10 else "开始 90 秒休息。")}")
|
||||
time.sleep(0 if i == 20 else (270 if i == 10 else 70))
|
||||
if i != 20:
|
||||
CreateE_User.SbSpeak("赛方", "还有30秒。")
|
||||
time.sleep(20)
|
||||
CreateE_User.SbSpeak("赛方", "最后10秒,做好准备!")
|
||||
time.sleep(10)
|
||||
CreateE_User.SbSpeak("赛方", "生成已结束!请迅速解决剩余残孽。")
|
||||
CreateE_User.SetTitle("@a", "生成完毕!", "green")
|
||||
com=input("OK?> ")
|
||||
if com == "Y":
|
||||
CreateE_User.SbSpeak("赛方", "恭喜各位完成本次比赛!!!")
|
||||
time.sleep(5)
|
||||
CreateE_User.SbSpeak("赛方", f"诸位凭借自己的实力赢得了 {GC_NUMBER} GC!")
|
||||
else:
|
||||
CreateE_User.SbSpeakRaw("赛方", "对不起,你们失败了!", "red")
|
||||
time.sleep(5)
|
||||
CreateE_User.SbSpeak("赛方", "我们下次再见!")
|
||||
time.sleep(5)
|
||||
CreateE_User.SbSpeak("赛方", "我正式宣布比赛结束!")
|
||||
CreateE_User.disconnect()
|
||||
117
Mil.py
Normal file
117
Mil.py
Normal file
@@ -0,0 +1,117 @@
|
||||
# Minecraft RCON Core Library For Python
|
||||
# Version: @1.0.0
|
||||
# Author: @TermiNexus
|
||||
|
||||
import MilRcon
|
||||
import MilCon
|
||||
import Milib
|
||||
import typing
|
||||
import json
|
||||
import math
|
||||
import time
|
||||
|
||||
|
||||
class MinecraftCore():
|
||||
def __init__(self, con: MilRcon._MinecraftRcon):
|
||||
self.con=con
|
||||
def _RunCommand(self, command, astext: bool = False):
|
||||
try: return self.con._RunCommand(command, astext = astext)
|
||||
except: return False
|
||||
# Minecraft Command
|
||||
def Tellraw(self, user: MilCon._user, j, astext: bool = False):
|
||||
self._RunCommand(f"tellraw {user} {json.dumps(j, ensure_ascii=False)}", astext)
|
||||
def Title(self, user: MilCon._user, mode: typing.Literal["actionbar", "clear", "reset", "subtitle", "title", "times", "title"], j, astext: bool = False):
|
||||
return self._RunCommand(f"title {user} {mode} {json.dumps(j, ensure_ascii=False)}", astext)
|
||||
def Gamemode(self, mode: MilCon._gamemode, user: MilCon._all_user, astext: bool = False):
|
||||
return self._RunCommand(f"gamemode {mode} {user}", astext)
|
||||
def Particle(self, name: MilCon._minecraft_particles, pos: Milib.RelativePos, delta: Milib.Delta, speed: int = 0, count: int = 0, show: typing.Literal["force", "normal"] = "normal", user: MilCon._user = "@a", astext: bool = False):
|
||||
return self._RunCommand(f"particle {name} {pos} {delta} {speed} {count} {show} {user}", astext)
|
||||
def Execute(self, *args: typing.Unpack[Milib.ExecuteSubCommandRule], astext: bool = False):
|
||||
return self._RunCommand(f"execute {" ".join(map(str, args))}", astext)
|
||||
def Mute(self, user: MilCon._user, mode: MilCon._mute_mode, astext: bool = False):
|
||||
return self._RunCommand(f"mute {user} {mode}", astext)
|
||||
def UnMute(self, user: MilCon._user, astext: bool = False):
|
||||
return self._RunCommand(f"unmute {user}", astext)
|
||||
def List(self, astext: bool = False):
|
||||
if astext: return self._RunCommand(f"list", astext)
|
||||
return self._RunCommand(f"list").split(": ")[1].split(", ")
|
||||
def Weather(self, mode: MilCon._weather_mode, astext: bool = False):
|
||||
return self._RunCommand(f"weather {mode}", astext)
|
||||
def Gamerule(self, rule: MilCon._gamerules, value: typing.Union[bool, int, str], astext: bool = False):
|
||||
return self._RunCommand(f"gamerule {rule} {Milib._Bool2Str(value)}", astext)
|
||||
def Data(self, mode: typing.Literal["get", "merge", "modify", "remove"], usermode: typing.Literal["block", "entity", "storage"], user: MilCon._all_user | Milib.RelativePos, path: str = "", astext: bool = False):
|
||||
_: str=self._RunCommand(f"data {mode} {usermode} {user}" + Milib._WithValue(path), astext)
|
||||
if mode == "get" and (31+len(user)) < len(_) and not path:
|
||||
_2=_[(32+len(user)):]
|
||||
return _2
|
||||
return _
|
||||
def Bossbar(self, mode: typing.Literal["add", "get", "list", "remove", "set"], id: str = "", key: str = "", value: typing.Union[str, int, bool, MilCon._minecraft_colors, MilCon._user] = "", astext: bool = False):
|
||||
return self._RunCommand(f"bossbar {mode}" + Milib._WithValue(id) + Milib._WithValue(key) + Milib._WithValue(value), astext)
|
||||
def Tp(self, pos1: MilCon._all_user | Milib.RelativePos, pos2: MilCon._all_user | Milib.RelativePos = "", astext: bool = False):
|
||||
return self._RunCommand(f"tp {pos1}" + Milib._WithValue(pos2), astext)
|
||||
def Kick(self, user: MilCon._user, astext: bool = False):
|
||||
return self._RunCommand(f"kick {user}", astext)
|
||||
def Kill(self, user: MilCon._all_user, astext: bool = False):
|
||||
return self._RunCommand(f"kill {user}", astext)
|
||||
def PlaySound(self, name, mode: typing.Literal["ambient", "block", "hostile", "master", "music", "neutral", "player", "record", "voice", "weather"], value: Milib.RelativePos | int | MilCon._user = None, value2: Milib.RelativePos | int | MilCon._user = None, value3: Milib.RelativePos | int | MilCon._user = None, astext: bool = False):
|
||||
return self._RunCommand(f"playsound {name} {mode}" + Milib._WithValue(value) + Milib._WithValue(value2) + Milib._WithValue(value3), astext)
|
||||
# Python For Minecraft
|
||||
def TellRawAll(self, j: dict | list, astext: bool = False):
|
||||
return self.Tellraw("@a", j, astext)
|
||||
def Speak(self, text: str, color: MilCon._minecraft_colors = "white", user: MilCon._user = "@a", astext: bool = False):
|
||||
return self.Tellraw(user, {"text": text, "color": color}, astext)
|
||||
def SbSpeak(self, asuser: str, text: str, color: MilCon._minecraft_colors = "white", user: MilCon._user = "@a", astext: bool = False):
|
||||
return self.Tellraw(user, [{"text": f"[{asuser}] ", "color": "yellow"}, {"text": text, "color": color}], astext)
|
||||
def SbSpeakRaw(self, asuser: str, j: dict | list, color: MilCon._minecraft_colors = "white", user: MilCon._user = "@a", astext: bool = False):
|
||||
if type(j) == str: j={"text":j, "color":color}
|
||||
if type(j) != list: j=[j]
|
||||
return self.Tellraw(user, [{"text": f"[{asuser}] ", "color": "yellow"}] + j, astext)
|
||||
def SetTitle(self, user: MilCon._user, text: str, color: MilCon._minecraft_colors = "white", astext: bool = False):
|
||||
return self.Title(user, "title", {"text": text, "color": color}, astext)
|
||||
def SetSubTitle(self, user: MilCon._user, text: str, color: MilCon._minecraft_colors = "white", astext: bool = False):
|
||||
return self.Title(user, "subtitle", {"text": text, "color": color}, astext)
|
||||
def PlaySoundWith(self, name, user: list[MilCon._user]):
|
||||
for i in user: self.Execute("as", i, "at", "@s", "run", self.PlaySound(name, "voice", "@s", Milib.RelativePos(), 100, astext=True))
|
||||
|
||||
class MCROCN(MilRcon._MinecraftRcon, MinecraftCore):
|
||||
def __init__(self, host, password, port, debug=False):
|
||||
MilRcon._MinecraftRcon.__init__(self, host, password, port)
|
||||
MinecraftCore.__init__(self, self)
|
||||
self.debug=debug
|
||||
def Connect(self):
|
||||
try: self.connect()
|
||||
except: return False
|
||||
return True
|
||||
def _RunCommand(self, command, astext: bool = False):
|
||||
if self.debug: print("> ", command)
|
||||
if astext: return Milib.Command(command)
|
||||
try:
|
||||
r=self.command(command)
|
||||
if self.debug: print(r)
|
||||
return r
|
||||
except: return False
|
||||
|
||||
'''@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["add"], id: str, name: str, astext: bool = False) -> str | bool: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["get"], id: str, key: typing.Literal["max", "players", "value", "visible"], astext: bool = False) -> str | bool: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["list"], astext: bool = False) -> str | bool | list: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["remove"], id: str, astext: bool = False) -> str | bool: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["set"], id: str, key: typing.Literal["color", "max", "name", "players", "style", "value", "visible"], value: str, astext: bool = False) -> str | bool: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["set"], id: str, key: typing.Literal["color"], value: _minecraft_colors, astext: bool = False) -> str | bool: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["set"], id: str, key: typing.Literal["max"], value: int, astext: bool = False) -> str | bool: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["set"], id: str, key: typing.Literal["name"], value: str, astext: bool = False) -> str | bool: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["set"], id: str, key: typing.Literal["players"], value: _user, astext: bool = False) -> str | bool: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["set"], id: str, key: typing.Literal["style"], value: typing.Literal["notched_10", "notched_12", "notched_20", "notched_6", "progress"], astext: bool = False) -> str | bool: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["set"], id: str, key: typing.Literal["value"], value: int, astext: bool = False) -> str | bool: ...
|
||||
@typing.overload
|
||||
def Bossbar(self, mode: typing.Literal["set"], id: str, key: typing.Literal["visible"], value: bool, astext: bool = False) -> str | bool: ...'''
|
||||
229
MilCon.py
Normal file
229
MilCon.py
Normal file
@@ -0,0 +1,229 @@
|
||||
import typing
|
||||
|
||||
|
||||
_gamemode=typing.Literal["creative", "survival", "adventure", "spectator"]
|
||||
_user=typing.Union[typing.Literal["@a", "@e", "@p", "@r", "@s"], str]
|
||||
_all_user=typing.Union[typing.Literal["@a", "@e", "@p", "@r", "@s", "@e"], str]
|
||||
_minecraft_particles = typing.Literal[
|
||||
"minecraft:ambient_entity_effect",
|
||||
"minecraft:angry_villager",
|
||||
"minecraft:block",
|
||||
"minecraft:block_marker",
|
||||
"minecraft:bubble",
|
||||
"minecraft:bubble_column_up",
|
||||
"minecraft:bubble_pop",
|
||||
"minecraft:campfire_cosy_smoke",
|
||||
"minecraft:campfire_signal_smoke",
|
||||
"minecraft:cherry_leaves",
|
||||
"minecraft:cloud",
|
||||
"minecraft:composter",
|
||||
"minecraft:crimson_spore",
|
||||
"minecraft:crit",
|
||||
"minecraft:current_down",
|
||||
"minecraft:damage_indicator",
|
||||
"minecraft:dolphin",
|
||||
"minecraft:dragon_breath",
|
||||
"minecraft:dripping_dripstone_lava",
|
||||
"minecraft:dripping_dripstone_water",
|
||||
"minecraft:dripping_honey",
|
||||
"minecraft:dripping_lava",
|
||||
"minecraft:dripping_obsidian_tear",
|
||||
"minecraft:dripping_water",
|
||||
"minecraft:dust",
|
||||
"minecraft:dust_color_transition",
|
||||
"minecraft:effect",
|
||||
"minecraft:egg_crack",
|
||||
"minecraft:elder_guardian",
|
||||
"minecraft:electric_spark",
|
||||
"minecraft:enchant",
|
||||
"minecraft:enchanted_hit",
|
||||
"minecraft:end_rod",
|
||||
"minecraft:entity_effect",
|
||||
"minecraft:explosion",
|
||||
"minecraft:explosion_emitter",
|
||||
"minecraft:falling_dripstone_lava",
|
||||
"minecraft:falling_dripstone_water",
|
||||
"minecraft:falling_dust",
|
||||
"minecraft:falling_honey",
|
||||
"minecraft:falling_lava",
|
||||
"minecraft:falling_nectar",
|
||||
"minecraft:falling_obsidian_tear",
|
||||
"minecraft:falling_spore_blossom",
|
||||
"minecraft:falling_water",
|
||||
"minecraft:firework",
|
||||
"minecraft:fishing",
|
||||
"minecraft:flame",
|
||||
"minecraft:flash",
|
||||
"minecraft:glow",
|
||||
"minecraft:glow_squid_ink",
|
||||
"minecraft:gust",
|
||||
"minecraft:gust_emitter",
|
||||
"minecraft:heart",
|
||||
"minecraft:instant_effect",
|
||||
"minecraft:item",
|
||||
"minecraft:item_slime",
|
||||
"minecraft:item_snowball",
|
||||
"minecraft:landing_honey",
|
||||
"minecraft:landing_lava",
|
||||
"minecraft:landing_obsidian_tear",
|
||||
"minecraft:large_smoke",
|
||||
"minecraft:lava",
|
||||
"minecraft:mycelium",
|
||||
"minecraft:nautilus",
|
||||
"minecraft:note",
|
||||
"minecraft:ominous_spawning",
|
||||
"minecraft:poof",
|
||||
"minecraft:portal",
|
||||
"minecraft:rain",
|
||||
"minecraft:reverse_portal",
|
||||
"minecraft:scrape",
|
||||
"minecraft:sculk_charge",
|
||||
"minecraft:sculk_charge_pop",
|
||||
"minecraft:sculk_soul",
|
||||
"minecraft:shriek",
|
||||
"minecraft:slime",
|
||||
"minecraft:small_flame",
|
||||
"minecraft:smoke",
|
||||
"minecraft:sneeze",
|
||||
"minecraft:snowflake",
|
||||
"minecraft:soul",
|
||||
"minecraft:soul_fire_flame",
|
||||
"minecraft:spit",
|
||||
"minecraft:spore_blossom_air",
|
||||
"minecraft:splash",
|
||||
"minecraft:spore_blossom",
|
||||
"minecraft:squid_ink",
|
||||
"minecraft:sweep_attack",
|
||||
"minecraft:totem_of_undying",
|
||||
"minecraft:underwater",
|
||||
"minecraft:vibration",
|
||||
"minecraft:warped_spore",
|
||||
"minecraft:wax_off",
|
||||
"minecraft:wax_on",
|
||||
"minecraft:white_ash",
|
||||
"minecraft:white_smoke",
|
||||
"minecraft:witch"
|
||||
]
|
||||
_minecraft_colors = typing.Literal[
|
||||
"black",
|
||||
"dark_blue",
|
||||
"dark_green",
|
||||
"dark_aqua",
|
||||
"dark_red",
|
||||
"dark_purple",
|
||||
"gold",
|
||||
"gray",
|
||||
"dark_gray",
|
||||
"blue",
|
||||
"green",
|
||||
"aqua",
|
||||
"red",
|
||||
"light_purple",
|
||||
"yellow",
|
||||
"white",
|
||||
"brown",
|
||||
"cyan",
|
||||
"pink",
|
||||
"reset"
|
||||
]
|
||||
_execute_sub_commands = typing.Literal[
|
||||
"align",
|
||||
"anchored",
|
||||
"as",
|
||||
"at",
|
||||
"facing",
|
||||
"facing entity",
|
||||
"in",
|
||||
"positioned",
|
||||
"positioned as",
|
||||
"positioned over",
|
||||
"rotated",
|
||||
"rotated as",
|
||||
"if",
|
||||
"if entity",
|
||||
"if block",
|
||||
"if blocks",
|
||||
"if score",
|
||||
"if predicate",
|
||||
"unless",
|
||||
"unless entity",
|
||||
"unless block",
|
||||
"unless blocks",
|
||||
"unless score",
|
||||
"unless predicate",
|
||||
"run",
|
||||
"store",
|
||||
"store result",
|
||||
"store success",
|
||||
"summon",
|
||||
"data",
|
||||
"on",
|
||||
"on attacker",
|
||||
"on controller",
|
||||
"on leasher",
|
||||
"on owner",
|
||||
"on passenger",
|
||||
"on target",
|
||||
"on vehicle"
|
||||
]
|
||||
_gamerules = typing.Literal[
|
||||
"announceAdvancements",
|
||||
"commandBlockOutput",
|
||||
"disableElytraMovementCheck",
|
||||
"disableRaids",
|
||||
"doDaylightCycle",
|
||||
"doEntityDrops",
|
||||
"doFireTick",
|
||||
"doInsomnia",
|
||||
"doImmediateRespawn",
|
||||
"doLimitedCrafting",
|
||||
"doMobLoot",
|
||||
"doMobSpawning",
|
||||
"doPatrolSpawning",
|
||||
"doTileDrops",
|
||||
"doTraderSpawning",
|
||||
"doVinesSpread",
|
||||
"doWardenSpawning",
|
||||
"doWeatherCycle",
|
||||
"drowningDamage",
|
||||
"fallDamage",
|
||||
"fireDamage",
|
||||
"forgiveDeadPlayers",
|
||||
"freezeDamage",
|
||||
"keepInventory",
|
||||
"logAdminCommands",
|
||||
"maxCommandChainLength",
|
||||
"maxEntityCramming",
|
||||
"mobGriefing",
|
||||
"naturalRegeneration",
|
||||
"playersSleepingPercentage",
|
||||
"randomTickSpeed",
|
||||
"reducedDebugInfo",
|
||||
"sendCommandFeedback",
|
||||
"showDeathMessages",
|
||||
"spawnRadius",
|
||||
"spectatorsGenerateChunks",
|
||||
"universalAnger"
|
||||
]
|
||||
_mute_mode=typing.Union[
|
||||
typing.Literal[
|
||||
"* (indefinite)",
|
||||
"10m",
|
||||
"1d",
|
||||
"1h",
|
||||
"1w",
|
||||
"5m",
|
||||
"<number>[smhdw]"
|
||||
],
|
||||
typing.Union[
|
||||
int,
|
||||
typing.Literal["m", "d", "h", "w", "m"]
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
_weather_mode=typing.Literal["clear", "rain", "thunder"]
|
||||
DurationTime=typing.Union[int, typing.Literal["d", "s", "t"]]
|
||||
|
||||
true="true"
|
||||
false="false"
|
||||
108
MilRcon.py
Normal file
108
MilRcon.py
Normal file
@@ -0,0 +1,108 @@
|
||||
import getpass
|
||||
import argparse
|
||||
import os
|
||||
import socket
|
||||
import ssl
|
||||
import select
|
||||
import struct
|
||||
import time
|
||||
import platform
|
||||
|
||||
|
||||
|
||||
#if platform.system() != "Windows":
|
||||
# import signal
|
||||
|
||||
class MCRconException(Exception):
|
||||
pass
|
||||
|
||||
def timeout_handler(signum, frame):
|
||||
raise MCRconException("Connection timeout error")
|
||||
|
||||
|
||||
class _MinecraftRcon(object):
|
||||
socket = None
|
||||
def __init__(self, host, password, port=25575, tlsmode=0, timeout=5):
|
||||
self.host = host
|
||||
self.password = password
|
||||
self.port = port
|
||||
self.tlsmode = tlsmode
|
||||
self.timeout = timeout
|
||||
#if platform.system() != "Windows":
|
||||
# signal.signal(signal.SIGALRM, timeout_handler)
|
||||
def __enter__(self):
|
||||
self.connect()
|
||||
return self
|
||||
def __exit__(self, type, value, tb):
|
||||
self.disconnect()
|
||||
def connect(self):
|
||||
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
if self.tlsmode > 0:
|
||||
ctx = ssl.create_default_context()
|
||||
if self.tlsmode > 1:
|
||||
ctx.check_hostname = False
|
||||
ctx.verify_mode = ssl.CERT_NONE
|
||||
self.socket = ctx.wrap_socket(self.socket, server_hostname=self.host)
|
||||
self.socket.connect((self.host, self.port))
|
||||
self._send(3, self.password)
|
||||
def disconnect(self):
|
||||
if self.socket is not None:
|
||||
self.socket.close()
|
||||
self.socket = None
|
||||
def _read(self, length):
|
||||
#if platform.system() != "Windows": signal.alarm(self.timeout)
|
||||
data = b""
|
||||
while len(data) < length: data += self.socket.recv(length - len(data))
|
||||
#if platform.system() != "Windows": signal.alarm(0)
|
||||
return data
|
||||
def _send(self, out_type, out_data):
|
||||
if self.socket is None:
|
||||
raise MCRconException("Must connect before sending data")
|
||||
out_payload = (
|
||||
struct.pack("<ii", 0, out_type) + out_data.encode("utf8") + b"\x00\x00"
|
||||
)
|
||||
out_length = struct.pack("<i", len(out_payload))
|
||||
self.socket.send(out_length + out_payload)
|
||||
in_data = ""
|
||||
while True:
|
||||
(in_length,) = struct.unpack("<i", self._read(4))
|
||||
in_payload = self._read(in_length)
|
||||
in_id, in_type = struct.unpack("<ii", in_payload[:8])
|
||||
in_data_partial, in_padding = in_payload[8:-2], in_payload[-2:]
|
||||
if in_padding != b"\x00\x00":
|
||||
raise MCRconException("Incorrect padding")
|
||||
if in_id == -1:
|
||||
raise MCRconException("Login failed")
|
||||
in_data += in_data_partial.decode("utf8")
|
||||
if len(select.select([self.socket], [], [], 0)[0]) == 0:
|
||||
return in_data
|
||||
def command(self, command):
|
||||
result = self._send(2, command)
|
||||
#time.sleep(0.003) # MC-72390 workaround
|
||||
return result
|
||||
|
||||
def MinecraftRconCli():
|
||||
try:
|
||||
parser = argparse.ArgumentParser(description="connect to and use Minecraft Server remote console protocol")
|
||||
parser.add_argument("host", metavar="HOST", help="the host to connect to")
|
||||
parser.add_argument("--password", metavar="PASSWORD", help="the password to connect with, default is a prompt or envvar RCON_PASSWORD.")
|
||||
parser.add_argument("-p", "--port", metavar="PORT", dest="port", type=int, default=25575,help="the port to connect to")
|
||||
parser.add_argument("-t", "--tls", dest="tlsmode", action="store_true", help="connect to the server with tls encryption",)
|
||||
args = parser.parse_args()
|
||||
if not args.password and not os.environ.get("RCON_PASSWORD"): password = getpass.getpass("Password: ")
|
||||
elif os.environ.get("RCON_PASSWORD"): password = os.environ.get("RCON_PASSWORD")
|
||||
else: password = args.password
|
||||
try:
|
||||
with _MinecraftRcon(args.host, password, args.port, args.tlsmode) as mcr:
|
||||
while True:
|
||||
cmd = input("> ")
|
||||
if cmd.strip() == "exit": break
|
||||
else:
|
||||
try: print(mcr.command(cmd))
|
||||
except (ConnectionResetError, ConnectionAbortedError):
|
||||
print("The connection was terminated, the server may have been stopped.")
|
||||
break
|
||||
if cmd == "exit": break
|
||||
except ConnectionRefusedError: print("The connection could not be made as the server actively refused it.")
|
||||
except ConnectionError as e: print(e)
|
||||
except KeyboardInterrupt: pass
|
||||
256
Milib.py
Normal file
256
Milib.py
Normal file
@@ -0,0 +1,256 @@
|
||||
import MilCon
|
||||
import typing
|
||||
import math
|
||||
|
||||
|
||||
class _HPos:
|
||||
x: str
|
||||
y: str
|
||||
z: str
|
||||
|
||||
class RelativePos:
|
||||
def __init__(self, x: str | int | float = "~", y: str | int | float = "~", z: str | int | float = "~"):
|
||||
self.x: str = str(x) if isinstance(x, (int, float)) else x
|
||||
self.y: str = str(y) if isinstance(y, (int, float)) else y
|
||||
self.z: str = str(z) if isinstance(z, (int, float)) else z
|
||||
def __str__(self):
|
||||
return f"{self.x} {self.y} {self.z}"
|
||||
@classmethod
|
||||
def FromString(cls, s: str):
|
||||
parts = s.split()
|
||||
if len(parts) != 3 or not all(p.startswith('~') for p in parts): raise ValueError("Catch A Error As RelativePos ~x ~y ~z")
|
||||
return cls(*parts)
|
||||
def ToAbsolute(self, reference: _HPos=None):
|
||||
def ParseCoord(coord: str, ref):
|
||||
if coord.startswith('~'): return ref + (float(coord[1:]) if len(coord) > 1 else 0.0)
|
||||
else: return float(coord)
|
||||
ref_x = reference.x if reference and reference.x.startswith('~') else 0.0
|
||||
ref_y = reference.y if reference and reference.y.startswith('~') else 0.0
|
||||
ref_z = reference.z if reference and reference.z.startswith('~') else 0.0
|
||||
abs_x = ParseCoord(self.x, ref_x)
|
||||
abs_y = ParseCoord(self.y, ref_y)
|
||||
abs_z = ParseCoord(self.z, ref_z)
|
||||
return RelativePos(abs_x, abs_y, abs_z)
|
||||
|
||||
class LocalCoordinatesPos:
|
||||
def __init__(self, x: str | int | float = "^", y: str | int | float = "^", z: str | int | float = "^"):
|
||||
self.x: str = str(x) if isinstance(x, (int, float)) else x
|
||||
self.y: str = str(y) if isinstance(y, (int, float)) else y
|
||||
self.z: str = str(z) if isinstance(z, (int, float)) else z
|
||||
def __str__(self):
|
||||
return f"{self.x} {self.y} {self.z}"
|
||||
@classmethod
|
||||
def FromString(cls, s: str):
|
||||
parts = s.split()
|
||||
if len(parts) != 3 or not all(p.startswith('^') for p in parts): raise ValueError("Catch A Error As LocalCoordinatesPos ^x ^y ^z")
|
||||
return cls(*parts)
|
||||
def ToAbsolute(self, reference: _HPos=None):
|
||||
def ParseCoord(coord: str, ref):
|
||||
if coord.startswith('^'): return ref + (float(coord[1:]) if len(coord) > 1 else 0.0)
|
||||
else: return float(coord)
|
||||
ref_x = reference.x if reference and reference.x.startswith('^') else 0.0
|
||||
ref_y = reference.y if reference and reference.y.startswith('^') else 0.0
|
||||
ref_z = reference.z if reference and reference.z.startswith('^') else 0.0
|
||||
abs_x = ParseCoord(self.x, ref_x)
|
||||
abs_y = ParseCoord(self.y, ref_y)
|
||||
abs_z = ParseCoord(self.z, ref_z)
|
||||
return LocalCoordinatesPos(abs_x, abs_y, abs_z)
|
||||
|
||||
class Delta:
|
||||
def __init__(self, x: int = 0, y: int = 0, z: int = 0):
|
||||
self.x, self.y, self.z = x, y, z
|
||||
def __str__(self):
|
||||
return f"{self.x} {self.y} {self.z}"
|
||||
class Command():
|
||||
def __init__(self, command):
|
||||
self.command = command
|
||||
def __str__(self):
|
||||
return self.command
|
||||
class ExecuteSubCommandRule(typing.TypedDict):
|
||||
mode: MilCon._execute_sub_commands
|
||||
text: Command
|
||||
|
||||
def _Bool2Str(value: bool):
|
||||
return "true" if value else "false"
|
||||
def _WithValue(value: str | int):
|
||||
return f" {value}" if value else ""
|
||||
|
||||
def _Pos1ToPos2(pos1: RelativePos, pos2: RelativePos, radios: int):
|
||||
abs_pos1 = pos1.ToAbsolute()
|
||||
abs_pos2 = pos2.ToAbsolute()
|
||||
x1, y1, z1 = float(abs_pos1.x), float(abs_pos1.y), float(abs_pos1.z)
|
||||
x2, y2, z2 = float(abs_pos2.x), float(abs_pos2.y), float(abs_pos2.z)
|
||||
delta_x = (x2 - x1) / (radios + 1)
|
||||
delta_y = (y2 - y1) / (radios + 1)
|
||||
delta_z = (z2 - z1) / (radios + 1)
|
||||
points = []
|
||||
for i in range(1, radios + 1):
|
||||
x = x1 + delta_x * i
|
||||
y = y1 + delta_y * i
|
||||
z = z1 + delta_z * i
|
||||
points.append(RelativePos(x, y, z))
|
||||
return points
|
||||
|
||||
def _Pos1ToPos2WithPoints(radios: int, radian: int, pos1: RelativePos, pos2: RelativePos, *poses: RelativePos):
|
||||
# 参数验证
|
||||
if radios <= len(poses) + 2:
|
||||
raise ValueError("radios must be greater than len(poses) + 2")
|
||||
if radian < 0:
|
||||
raise ValueError("radian must be non-negative")
|
||||
|
||||
# 转换为绝对坐标
|
||||
abs_pos1 = pos1.ToAbsolute()
|
||||
abs_poses = [p.ToAbsolute() for p in poses]
|
||||
abs_pos2 = pos2.ToAbsolute()
|
||||
|
||||
# 所有点按顺序排列
|
||||
all_points = [abs_pos1] + abs_poses + [abs_pos2]
|
||||
num_segments = len(all_points) - 1
|
||||
|
||||
# 计算每段的点数
|
||||
points_per_segment = (radios - num_segments + 1) // num_segments
|
||||
remainder = (radios - num_segments + 1) % num_segments
|
||||
|
||||
# 生成点
|
||||
points = []
|
||||
for i in range(num_segments):
|
||||
start = all_points[i]
|
||||
end = all_points[i + 1]
|
||||
|
||||
# 当前段的点数
|
||||
current_points = points_per_segment + (1 if i < remainder else 0)
|
||||
|
||||
# 计算增量
|
||||
delta_x = (float(end.x) - float(start.x)) / (current_points + 1)
|
||||
delta_y = (float(end.y) - float(start.y)) / (current_points + 1)
|
||||
delta_z = (float(end.z) - float(start.z)) / (current_points + 1)
|
||||
|
||||
# 生成当前段的点
|
||||
for j in range(1, current_points + 1):
|
||||
x = float(start.x) + delta_x * j
|
||||
y = float(start.y) + delta_y * j
|
||||
z = float(start.z) + delta_z * j
|
||||
|
||||
# 如果 radian 不为 0 且 poses 存在,则在中间点附近向外偏移
|
||||
if radian != 0 and len(poses) > 0 and i < len(poses):
|
||||
# 计算当前点与中间点的距离比例 (0-1)
|
||||
t = j / (current_points + 1)
|
||||
|
||||
# 使用正弦函数生成弧形偏移 (0-π)
|
||||
offset = radian * math.sin(t * math.pi)
|
||||
|
||||
# 计算3D垂直方向
|
||||
# 获取前一个点和后一个点
|
||||
prev_point = all_points[i]
|
||||
next_point = all_points[i+1]
|
||||
|
||||
# 计算线段方向向量
|
||||
direction = (
|
||||
float(next_point.x) - float(prev_point.x),
|
||||
float(next_point.y) - float(prev_point.y),
|
||||
float(next_point.z) - float(prev_point.z)
|
||||
)
|
||||
|
||||
# 计算垂直方向 (使用简单的垂直向量)
|
||||
# 这里我们选择一个与方向向量垂直的向量
|
||||
if direction[0] != 0 or direction[1] != 0:
|
||||
# 如果方向向量不是纯z轴方向,我们可以用叉积计算垂直向量
|
||||
perpendicular = (
|
||||
-direction[1],
|
||||
direction[0],
|
||||
0
|
||||
)
|
||||
else:
|
||||
# 如果是纯z轴方向,用x轴作为垂直方向
|
||||
perpendicular = (1, 0, 0)
|
||||
|
||||
# 归一化垂直向量
|
||||
length = math.sqrt(sum(p*p for p in perpendicular))
|
||||
if length > 0:
|
||||
perpendicular = (
|
||||
perpendicular[0]/length,
|
||||
perpendicular[1]/length,
|
||||
perpendicular[2]/length
|
||||
)
|
||||
|
||||
# 应用偏移
|
||||
x += offset * perpendicular[0]
|
||||
y += offset * perpendicular[1]
|
||||
z += offset * perpendicular[2]
|
||||
|
||||
points.append(RelativePos(x, y, z))
|
||||
|
||||
return points
|
||||
|
||||
def _Pos1ToPos2DrawPi(pos1: RelativePos, pos2: RelativePos, points: int) -> typing.List[RelativePos]:
|
||||
"""
|
||||
Generate a list of points forming a circle with pos1 as the center,
|
||||
pos2 as a point on the circumference, and return num_points including pos1 at start and end.
|
||||
|
||||
Args:
|
||||
pos1: Center of the circle (absolute coordinates)
|
||||
pos2: Point on the circumference (absolute coordinates)
|
||||
num_points: Number of points to generate (including start/end point)
|
||||
|
||||
Returns:
|
||||
List of RelativePos points forming the circle, starting and ending with pos1
|
||||
"""
|
||||
if points < 2:
|
||||
raise ValueError("Number of points must be at least 2 (including start/end)")
|
||||
|
||||
# Convert positions to absolute float values
|
||||
center_x = float(pos1.x)
|
||||
center_y = float(pos1.y)
|
||||
center_z = float(pos1.z)
|
||||
|
||||
point_x = float(pos2.x)
|
||||
point_y = float(pos2.y)
|
||||
point_z = float(pos2.z)
|
||||
|
||||
# Calculate radius as distance from pos1 to pos2
|
||||
dx = point_x - center_x
|
||||
dy = point_y - center_y
|
||||
dz = point_z - center_z
|
||||
radius = (dx**2 + dy**2 + dz**2) ** 0.5
|
||||
|
||||
# Determine the plane of the circle
|
||||
# Assume the circle is in the x-z plane if dy is zero, otherwise use x-y plane
|
||||
# This is a simplification and may need adjustment based on actual requirements
|
||||
points = []
|
||||
|
||||
for i in range(points):
|
||||
angle = 2 * math.pi * i / (points - 1)
|
||||
|
||||
# Simplified 2D circle in x-z plane (y remains constant)
|
||||
x = center_x + radius * math.cos(angle)
|
||||
z = center_z + radius * math.sin(angle)
|
||||
y = center_y # y coordinate remains the same as center
|
||||
|
||||
points.append(RelativePos(x, y, z))
|
||||
|
||||
return points
|
||||
|
||||
'''def _Pos1ToPos2WithPoints(radios: int, pos1: RelativePos, pos2: RelativePos, *poses: RelativePos):
|
||||
if radios <= len(poses) + 2:
|
||||
raise ValueError("radios must be greater than len(poses) + 2")
|
||||
abs_pos1 = pos1.ToAbsolute()
|
||||
abs_poses = [p.ToAbsolute() for p in poses]
|
||||
abs_pos2 = pos2.ToAbsolute()
|
||||
all_points = [abs_pos1] + abs_poses + [abs_pos2]
|
||||
num_segments = len(all_points) - 1
|
||||
points_per_segment = (radios - num_segments + 1) // num_segments
|
||||
remainder = (radios - num_segments + 1) % num_segments
|
||||
points = []
|
||||
for i in range(num_segments):
|
||||
start = all_points[i]
|
||||
end = all_points[i + 1]
|
||||
current_points = points_per_segment + (1 if i < remainder else 0)
|
||||
delta_x = (float(end.x) - float(start.x)) / (current_points + 1)
|
||||
delta_y = (float(end.y) - float(start.y)) / (current_points + 1)
|
||||
delta_z = (float(end.z) - float(start.z)) / (current_points + 1)
|
||||
for j in range(1, current_points + 1):
|
||||
x = float(start.x) + delta_x * j
|
||||
y = float(start.y) + delta_y * j
|
||||
z = float(start.z) + delta_z * j
|
||||
points.append(RelativePos(x, y, z))
|
||||
return points'''
|
||||
174
Milib.py.txt
Normal file
174
Milib.py.txt
Normal file
@@ -0,0 +1,174 @@
|
||||
import MilCon
|
||||
import typing
|
||||
import math
|
||||
|
||||
|
||||
class _HPos:
|
||||
x: str
|
||||
y: str
|
||||
z: str
|
||||
|
||||
class RelativePos:
|
||||
def __init__(self, x: str | int | float = "~", y: str | int | float = "~", z: str | int | float = "~"):
|
||||
self.x: str = str(x) if isinstance(x, (int, float)) else x
|
||||
self.y: str = str(y) if isinstance(y, (int, float)) else y
|
||||
self.z: str = str(z) if isinstance(z, (int, float)) else z
|
||||
def __str__(self):
|
||||
return f"{self.x} {self.y} {self.z}"
|
||||
@classmethod
|
||||
def FromString(cls, s: str):
|
||||
parts = s.split()
|
||||
if len(parts) != 3 or not all(p.startswith('~') for p in parts): raise ValueError("Catch A Error As RelativePos ~x ~y ~z")
|
||||
return cls(*parts)
|
||||
def ToAbsolute(self, reference: _HPos=None):
|
||||
def ParseCoord(coord: str, ref):
|
||||
if coord.startswith('~'): return ref + (float(coord[1:]) if len(coord) > 1 else 0.0)
|
||||
else: return float(coord)
|
||||
ref_x = reference.x if reference and reference.x.startswith('~') else 0.0
|
||||
ref_y = reference.y if reference and reference.y.startswith('~') else 0.0
|
||||
ref_z = reference.z if reference and reference.z.startswith('~') else 0.0
|
||||
abs_x = ParseCoord(self.x, ref_x)
|
||||
abs_y = ParseCoord(self.y, ref_y)
|
||||
abs_z = ParseCoord(self.z, ref_z)
|
||||
return RelativePos(abs_x, abs_y, abs_z)
|
||||
|
||||
class LocalCoordinatesPos:
|
||||
def __init__(self, x: str | int | float = "^", y: str | int | float = "^", z: str | int | float = "^"):
|
||||
self.x: str = str(x) if isinstance(x, (int, float)) else x
|
||||
self.y: str = str(y) if isinstance(y, (int, float)) else y
|
||||
self.z: str = str(z) if isinstance(z, (int, float)) else z
|
||||
def __str__(self):
|
||||
return f"{self.x} {self.y} {self.z}"
|
||||
@classmethod
|
||||
def FromString(cls, s: str):
|
||||
parts = s.split()
|
||||
if len(parts) != 3 or not all(p.startswith('^') for p in parts): raise ValueError("Catch A Error As LocalCoordinatesPos ^x ^y ^z")
|
||||
return cls(*parts)
|
||||
def ToAbsolute(self, reference: _HPos=None):
|
||||
def ParseCoord(coord: str, ref):
|
||||
if coord.startswith('^'): return ref + (float(coord[1:]) if len(coord) > 1 else 0.0)
|
||||
else: return float(coord)
|
||||
ref_x = reference.x if reference and reference.x.startswith('^') else 0.0
|
||||
ref_y = reference.y if reference and reference.y.startswith('^') else 0.0
|
||||
ref_z = reference.z if reference and reference.z.startswith('^') else 0.0
|
||||
abs_x = ParseCoord(self.x, ref_x)
|
||||
abs_y = ParseCoord(self.y, ref_y)
|
||||
abs_z = ParseCoord(self.z, ref_z)
|
||||
return LocalCoordinatesPos(abs_x, abs_y, abs_z)
|
||||
|
||||
class Delta:
|
||||
def __init__(self, x: int = 0, y: int = 0, z: int = 0):
|
||||
self.x, self.y, self.z = x, y, z
|
||||
def __str__(self):
|
||||
return f"{self.x} {self.y} {self.z}"
|
||||
class Command():
|
||||
def __init__(self, command):
|
||||
self.command = command
|
||||
def __str__(self):
|
||||
return self.command
|
||||
class ExecuteSubCommandRule(typing.TypedDict):
|
||||
mode: MilCon._execute_sub_commands
|
||||
text: Command
|
||||
|
||||
def _Bool2Str(self, value: bool):
|
||||
return "true" if value else "false"
|
||||
def _WithValue(self, value: str | int):
|
||||
return f" {value}" if value else ""
|
||||
|
||||
def _Pos1ToPos2(pos1: RelativePos, pos2: RelativePos, radios: int):
|
||||
abs_pos1 = pos1.ToAbsolute()
|
||||
abs_pos2 = pos2.ToAbsolute()
|
||||
x1, y1, z1 = abs_pos1.x, abs_pos1.y, abs_pos1.z
|
||||
x2, y2, z2 = abs_pos2.x, abs_pos2.y, abs_pos2.z
|
||||
delta_x = (x2 - x1) / (radios + 1)
|
||||
delta_y = (y2 - y1) / (radios + 1)
|
||||
delta_z = (z2 - z1) / (radios + 1)
|
||||
points = []
|
||||
for i in range(1, radios + 1):
|
||||
x = x1 + delta_x * i
|
||||
y = y1 + delta_y * i
|
||||
z = z1 + delta_z * i
|
||||
points.append(RelativePos(x, y, z))
|
||||
return points
|
||||
|
||||
def _Pos1ToPos2WithPoints(radios: int, radian: int, pos1: RelativePos, pos2: RelativePos, *poses: RelativePos):
|
||||
# 参数验证
|
||||
if radios <= len(poses) + 2:
|
||||
raise ValueError("radios must be greater than len(poses) + 2")
|
||||
if radian < 0:
|
||||
raise ValueError("radian must be non-negative")
|
||||
|
||||
# 转换为绝对坐标
|
||||
abs_pos1 = pos1.ToAbsolute()
|
||||
abs_poses = [p.ToAbsolute() for p in poses]
|
||||
abs_pos2 = pos2.ToAbsolute()
|
||||
|
||||
# 所有点按顺序排列
|
||||
all_points = [abs_pos1] + abs_poses + [abs_pos2]
|
||||
num_segments = len(all_points) - 1
|
||||
|
||||
# 计算每段的点数
|
||||
points_per_segment = (radios - num_segments + 1) // num_segments
|
||||
remainder = (radios - num_segments + 1) % num_segments
|
||||
|
||||
# 生成点
|
||||
points = []
|
||||
for i in range(num_segments):
|
||||
start = all_points[i]
|
||||
end = all_points[i + 1]
|
||||
|
||||
# 当前段的点数
|
||||
current_points = points_per_segment + (1 if i < remainder else 0)
|
||||
|
||||
# 计算增量
|
||||
delta_x = (float(end.x) - float(start.x)) / (current_points + 1)
|
||||
delta_y = (float(end.y) - float(start.y)) / (current_points + 1)
|
||||
delta_z = (float(end.z) - float(start.z)) / (current_points + 1)
|
||||
|
||||
# 生成当前段的点
|
||||
for j in range(1, current_points + 1):
|
||||
x = float(start.x) + delta_x * j
|
||||
y = float(start.y) + delta_y * j
|
||||
z = float(start.z) + delta_z * j
|
||||
|
||||
# 如果 radian 不为 0 且 poses 存在,则在中间点附近向外偏移
|
||||
if radian != 0 and len(poses) > 0 and i < len(poses):
|
||||
# 计算当前点与中间点的距离比例
|
||||
t = j / (current_points + 1)
|
||||
# 使用正弦函数生成弧形偏移
|
||||
offset = radian * math.sin(t * math.pi)
|
||||
|
||||
# 计算垂直于路径的方向(简单实现,可以改进为真正的 3D 垂直)
|
||||
# 这里假设偏移方向为 (1, 1, 1) 的某个分量,实际应根据路径方向计算
|
||||
x += offset * 0.577 # 0.577 ≈ 1 / sqrt(3)
|
||||
y += offset * 0.577
|
||||
z += offset * 0.577
|
||||
|
||||
points.append(RelativePos(x, y, z))
|
||||
|
||||
return points
|
||||
|
||||
'''def _Pos1ToPos2WithPoints(radios: int, pos1: RelativePos, pos2: RelativePos, *poses: RelativePos):
|
||||
if radios <= len(poses) + 2:
|
||||
raise ValueError("radios must be greater than len(poses) + 2")
|
||||
abs_pos1 = pos1.ToAbsolute()
|
||||
abs_poses = [p.ToAbsolute() for p in poses]
|
||||
abs_pos2 = pos2.ToAbsolute()
|
||||
all_points = [abs_pos1] + abs_poses + [abs_pos2]
|
||||
num_segments = len(all_points) - 1
|
||||
points_per_segment = (radios - num_segments + 1) // num_segments
|
||||
remainder = (radios - num_segments + 1) % num_segments
|
||||
points = []
|
||||
for i in range(num_segments):
|
||||
start = all_points[i]
|
||||
end = all_points[i + 1]
|
||||
current_points = points_per_segment + (1 if i < remainder else 0)
|
||||
delta_x = (float(end.x) - float(start.x)) / (current_points + 1)
|
||||
delta_y = (float(end.y) - float(start.y)) / (current_points + 1)
|
||||
delta_z = (float(end.z) - float(start.z)) / (current_points + 1)
|
||||
for j in range(1, current_points + 1):
|
||||
x = float(start.x) + delta_x * j
|
||||
y = float(start.y) + delta_y * j
|
||||
z = float(start.z) + delta_z * j
|
||||
points.append(RelativePos(x, y, z))
|
||||
return points'''
|
||||
BIN
__pycache__/Mil.cpython-312.pyc
Normal file
BIN
__pycache__/Mil.cpython-312.pyc
Normal file
Binary file not shown.
BIN
__pycache__/MilCon.cpython-312.pyc
Normal file
BIN
__pycache__/MilCon.cpython-312.pyc
Normal file
Binary file not shown.
BIN
__pycache__/MilRcon.cpython-312.pyc
Normal file
BIN
__pycache__/MilRcon.cpython-312.pyc
Normal file
Binary file not shown.
BIN
__pycache__/Milib.cpython-312.pyc
Normal file
BIN
__pycache__/Milib.cpython-312.pyc
Normal file
Binary file not shown.
BIN
__pycache__/MinecraftLibrary.cpython-312.pyc
Normal file
BIN
__pycache__/MinecraftLibrary.cpython-312.pyc
Normal file
Binary file not shown.
BIN
__pycache__/MinecraftRcon.cpython-312.pyc
Normal file
BIN
__pycache__/MinecraftRcon.cpython-312.pyc
Normal file
Binary file not shown.
16
cmdsys.py
Normal file
16
cmdsys.py
Normal file
@@ -0,0 +1,16 @@
|
||||
import MinecraftLibrary as mil
|
||||
import time
|
||||
|
||||
|
||||
class Mil(mil.MCROCN):
|
||||
def __init__(self, host, password, port):
|
||||
super().__init__(host, password, port)
|
||||
|
||||
|
||||
mcr=Mil(host="mc.gvsds.com", password="1234567890114514", port=25566)
|
||||
if not mcr.Connect(): exit()
|
||||
|
||||
mcr.Gamerule("sendCommandFeedback", False)
|
||||
mcr.Gamemode("survival", "MXYYSH2")
|
||||
|
||||
mcr.disconnect()
|
||||
15
test copy.py
Normal file
15
test copy.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from openai import OpenAI
|
||||
|
||||
|
||||
client = OpenAI(api_key="sk-F9OLC5dSwNYB9n8g374fA0D642984246Be6cAd2cC9B61090", base_url="https://free.v36.cm")
|
||||
response = client.chat.completions.create(
|
||||
model="deepseek-chat",
|
||||
messages=[
|
||||
{"role": "system", "content": "You are a helpful assistant"},
|
||||
{"role": "user", "content": "你好"},
|
||||
],
|
||||
stream=False
|
||||
)
|
||||
|
||||
print(response)
|
||||
print(response.choices[0].message.content)
|
||||
15
test.py
Normal file
15
test.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from openai import OpenAI
|
||||
|
||||
|
||||
client = OpenAI(api_key="sk-8a48b938f3444488ac22653d05254916", base_url="https://api.deepseek.com")
|
||||
response = client.chat.completions.create(
|
||||
model="deepseek-chat",
|
||||
messages=[
|
||||
{"role": "system", "content": "You are a helpful assistant"},
|
||||
{"role": "user", "content": "你好"},
|
||||
],
|
||||
stream=False
|
||||
)
|
||||
|
||||
|
||||
print(response.choices[0].message.content)
|
||||
Reference in New Issue
Block a user